0

Мы должны закодировать приложение цифровых вывесок для университетского проекта. Сначала мы используем язык и рамки: .Net, C#, инфраструктура сущностей (с планами использования NHibernate), Winforms (с планами использования WPF).В каком слое должна идти модель домена?

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

Из-за этого мы решили работать с тремя уровнями: слой пользовательского интерфейса, который «знает» уровень обслуживания (или уровень бизнес-логики), уровень обслуживания, который знает уровень сохранения и уровень сохранения. Каждый из них - отдельный проект. В настоящее время классы домена или классы сущностей (в данном случае такие классы, как Кампания, RSSFeed, Пользователь и т. Д.) Содержатся в пространстве имен «Модель» в рамках проекта или уровня сохранения.

Мы определили некоторые интерфейсы для логики доступа к данным, чтобы можно было легко переключать носители.

Вопросы были бы следующими: если для изменения логики персистентности нам пришлось бы изменять фактические ссылки на проекты для замещающих (например, Entity Framework для NHibernate), где должны определяться эти интерфейсы? Что еще более важно, где должны быть определены классы домена? Является ли он «допустимым» для добавления другого слоя с именем, например «Domain», известного уровнем сохранения и уровнем обслуживания?

Прошу прощения, если что-то, что я написал, как странно, мой письменный английский немного ржавый.

ответ

0

Что вы можете сделать, так это извлечь интерфейс для логики сохранения в отдельный проект. Затем просто введите реализацию (EF или NHibernate) в класс, который ее использует. Таким образом, класс, который использует его, нуждается только в ссылке на проект, содержащий интерфейс, а не на конкретную реализацию.

Что касается доменов, вы можете создать для каждого домена набор проектов, таких как Domains.NameHere.Facade, Domains.NameHere.Implementation, Domains.NameHere.UnitTests. Таким образом, вы также разделяете интерфейсы в проекте фасада. Вы можете добавить свой сервисный уровень в проект Domains.Implementation, а также включить в него все другие классы домена.

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

Смежные вопросы