У меня есть решение VS со следующими проектами.
-GUI
-DataAccess
-BusinessLogic
-BusinessObjects
но где должен находиться основной класс модели? Обычно это кэш набора объектов, которые являются результатами уровня доступа к данным и графического интерфейса пользователя, использующего виртуальные сетки для просмотра данных внутри модели. Вопрос будет таким же, используя MVC или MVP
мысли?





В моих решениях есть 3 (не тестовых) проекта
Это субъективный вопрос, но часто, чтобы гарантировать, что объекты вашей модели не имеют прямых зависимостей от инфраструктуры, люди часто помещают их в отдельный проект. вам также необходимо подумать, какие другие проекты могут использовать эти объекты модели.
Другой вариант разделения функциональности на отдельные развертываемые блоки (сборки) - это то, что команды могут работать более независимо. Разделяйте проекты в зависимости от частоты развертывания и автономии команды.
Наконец, я видел несколько проектов, в которых объекты модели вызывались удаленно (например, при удаленном взаимодействии .NET) и обслуживались на сервере приложений отдельно от веб-сервера. Я действительно не рекомендую этот подход, но это вариант.
Если вы не планируете повторно использовать их, и вы осведомлены о том, что, помещая их в одну сборку позволяет, вы создаете перекрестные зависимости с чем-либо еще, определенным в этом проекте, но вы достаточно умны, чтобы этого не делать, вы можете разместить их все в одном проекте.
Тем не менее, в 99% случаев у меня есть следующие проекты:
Но вам все равно нужно учитывать потребности вашего проекта.
Я склонен иметь
Justice.Project.Core - модель предметной области POCO - т. Е. Бизнес-объекты)Justice.Project.Data - отображения NHibernate и т. д., Где находится схема сохраненияJustice.Project.Services - репозитории, а также бизнес-логика, которую нелегко вписать в бизнес-объекты.Justice.Project.(Web|UI)Модель является - или должно быть - бизнес-объекты.
Я согласен с тем, что объекты модели входят в POCO. так что скажем, у меня есть объект Order. У меня вопрос: где у меня класс, в котором хранится коллекция заказов?
i agree that the model objects go into POCO. so lets say i have an Order object. My question is where do i have the class that stores a collection of orders ??
Это зависит от вашего бизнеса. Скорее всего, у вас будет коллекция заказов в нескольких разных местах ...
На вашем объекте клиента у каждого клиента должна быть коллекция заказов, так что у вас будет один там.
Если у вас есть отделы, в каждом отделе должна быть коллекция заказов, которые они создали.
Если у вас есть склады, на каждом складе может быть набор заказов, за выполнение которых они несут ответственность.
У некоторых объектов нет родителя, и это нормально. В моей системе есть клиенты. Реальным владельцем клиентов является мы (бизнес), но в системе нет объекта «Нас». Если вы хотите получить список своих клиентов (в нашем случае), мы запрашиваем его в репозитории.
IRespoistory<Client> repository = new Repository<Client>();
IList<Client> clients = repository.GetAllClients();
То же самое может относиться к вашим заказам.
Я бы рекомендовал проверить эту книгу DDD: http://www.amazon.com/gp/product/0321268202/ref=s9k2a_c1_at1-rfc_p-3237_p?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-1&pf_rd_r=1BWAPTN7&rd1&pf_rd_r=1BWAPTN7&rd1&pf_rd_r=1BWAPTN7&rd1&d=JBWAPT_D1&rd5_05_04_05_05_04_05_04_05_08
Модель домена, доменные службы, простые утилиты и методы расширения, применимые к ядру. Впрочем, ничего об инфраструктуре.