Winforms - лучший каталог / структура проекта - PullRequest
8 голосов
/ 07 октября 2008

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

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

View.csproj BusinessLogic.csproj Data.csproj CalculatorService.Exported.csproj (интерфейсы) CalculatorService.MyCalcImpl.csproj (одна реализация) CalculatorService.MyCalcImpl2.csproj (другая реализация)

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

Интерфейсы
--- IFoo
--- IDATA
Impl
--- Foo
--- данные

или

Продукт
--- Интерфейсы / IProduct
--- Impl / Продукт
Foo
--- Impl / Foo
--- Интерфейсы / IFoo

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

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

Ответы [ 3 ]

7 голосов
/ 08 октября 2008

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

Project
-Models
-Controllers
-Views

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

Project
-Models
-Presenters
-Views

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

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

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

7 голосов
/ 02 июня 2011

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

Я лично использовал папки, основываясь на фактическом типе предмета. Например:

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

Итак, я получаю:

new Forms.AboutForm().ShowDialog();
Controls.Add(new Controls.UberTextBox());
0 голосов
/ 07 октября 2008

Мы обычно синхронизируем проекты, имена проектов, пространства имен и структуры каталогов 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

.

Мы также работаем для многих клиентов, поэтому работа с ними начинается с их имени. Client1 \ App1 \ UI и т. Д.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...