Храните модель и репозиторий в отдельных проектах

У меня есть решение Visual Studio с несколькими проектами.

Я не на 100% уверен в структуре проекта и его преимуществах.

Например: у меня есть проект под названием DOMAIN. Здесь у меня есть несколько папок, например:

DOMAIN
|
|_Repository
  |__Implementations
  |____|__OrderRepository.cs
  |____|__CustomerRepository.cs
  |__Contracts
  |____|__IOrderRepository.cs
  |____|__ICustomerRepository.cs
  SessionManager.cs
  Model
  |__Customer.cs
  |__Order.cs

ВОПРОС: Должна ли Модель быть отделена от Репозитория в дополнительном проекте?

Если да, то ПОЧЕМУ?


person Elisabeth    schedule 30.12.2010    source источник


Ответы (1)


Если вы стремитесь к тому, чтобы ваше приложение не зависело от хранилища, тогда да. Один из способов сделать это — включить в модель абстракции для ваших репозиториев, такие как абстрактные классы или интерфейсы. Тогда у вас будет отдельный проект, который вы можете назвать чем-то вроде уровня доступа к данным (DAL), и он будет содержать ссылку на ваш модельный проект и реализовывать абстрактные репозитории.

Преимущество этого заключается в более четком разделении обязанностей между вашим проектом (например, ваш модельный проект реализует бизнес-логику, а ваш проект DAL знает кровавые подробности о том, как извлекать данные). Кроме того, это позволит вам реализовать два разных DAL, например, один для SQLServer, а другой для SqlLite.

person Klaus Byskov Pedersen    schedule 30.12.2010
comment
собирался выложить что-то очень похожее +1 - person tQuarella; 30.12.2010
comment
хорошо, я мог бы просто поменять проект с DAL на sqlite и использовать sqlserverdal. Звучит все в порядке, поэтому я отметил это как решение, но с инструментом ORM, таким как Entity Framework, ваш совет не имеет смысла, верно? Я запрашиваю контекст через LINQ-Provider, и это может быть sqlite/sqlserver/mysql и т.д. - person Elisabeth; 30.12.2010
comment
ааа... У меня была важная опечатка, ха-ха. У меня уже есть 2 проекта, но DAL имеет реализацию + контракты, а МОДЕЛЬ имеет сущности ... хорошо для эффекта обучения. Я перемещаю интерфейсы в МОДЕЛЬ, хотя мне нравится как-то хранить импл. + контракты вместе ;-) - person Elisabeth; 30.12.2010
comment
@Lisa, совместная реализация и контракты делают ваши проекты более тесно связанными и мешают вам эффективно модулировать код. Во всяком случае, вы должны хранить все свои контракты отдельно от всего остального. - person Klaus Byskov Pedersen; 20.02.2011