Nano Hash - криптовалюты, майнинг, программирование

Winforms - лучшая структура каталогов/проектов

Хотел узнать мнение людей о наилучшем способе организации структуры каталогов и проектов в проекте/решении для приложения C# winforms.

Большинство людей согласны с тем, что лучше всего разделить представление, бизнес-логику, объекты данных, интерфейсы, но хотели посмотреть, как разные люди справляются с этим. Кроме того, изолируйте сторонние зависимости в проектах реализации, а затем экспортируйте проекты, на которые ссылаются потребители.

  • View.csproj
  • BusinessLogic.csproj
  • Data.csproj
  • CalculatorService.Exported.csproj (interfaces)
  • CalculatorService.MyCalcImpl.csproj (one implementation)
  • CalculatorService.MyCalcImpl2.csproj (another implementation)

    Кроме того, с точки зрения структуры папок, что лучше вложенность:

    Интерфейсы
    ---IFoo
    ---IData
    Impl
    ---Foo
    --- Данные

    or

    Product
    ---Interfaces/IPProduct
    ---Impl/Product
    Foo
    ---Impl/Foo
    ---Interfaces/IFoo

    Все пытаются добиться несвязанных зависимостей от абстракций и быстрой возможности изменения реализации.

    Мысли? Лучшие практики?

  • 07.10.2008

    Ответы:


    1

    Для меня это зависит от модели, которой я следую. Если я использую MVC, это будет

    Project
    -Models
    -Controllers
    -Views
    

    Или для MVP это будет

    Project
    -Models
    -Presenters
    -Views
    

    В представлениях я разделяю их на пространства имен, относящиеся к контроллерам, т.е. если у меня есть контроллер для обработки транзакций инвентаризации, я мог бы использовать его как

    Project
    -Models
    --Inventory
    -Controllers
    --Inventory
    ---TransactionsController.cs
    -Views
    --Inventory
    ---Transactions
    ----EditTransactionsView.dfm
    

    Для интерфейсов я помещаю интерфейс в тот же каталог, что и реализации.

    07.10.2008

    2

    Немного поздний ответ, но может также вмешаться.

    Лично я использую папки в зависимости от фактического типа объекта. Например:

    - Project
        + Forms
        + Classes
        + UserControls
        + Resources
        + Data
    

    Итак, я заканчиваю:

    new Forms.AboutForm().ShowDialog();
    Controls.Add(new Controls.UberTextBox());
    
    02.06.2011

    3

    Обычно мы синхронизируем проекты SourceSafe, имена проектов, пространства имен и структуры каталогов.

    Например, учитывая название нашей компании XCENT, структура SourceSafe и соответствующая структура каталогов для App1 выглядят следующим образом:

    \XCENT
    \XCENT\App1
    \XCENT\App1\UI
    \XCENT\App1\UI\Test //test harness for UI
    \XCENT\App1\Data
    \XCENT\App1\Data\Test //test harnesses for Data
    

    и т. д.

    Проект пользовательского интерфейса называется XCENT.App1.UI.cproj, а классы в этом пространстве имен — XCENT.App1.UI.

    Мы работаем и для многих клиентов, поэтому работа специально для них начинается с их имени. Клиент1\Приложение1\UI и т. д.

    Все в нашей фирме пользуются одними и теми же условными обозначениями, и сразу становится ясно, где что подходит.

    Если есть смысл сегментировать логический интервал дальше, мы так и делаем. Такая другая сегментация включает .Export, .Import, .Reporting, .Security и т. д.

    07.10.2008
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..