Границы репозитория - PullRequest
0 голосов
/ 13 июня 2011

Предполагая, что приложение имеет библиотеку Business Objects в интерфейсах репозиториев, библиотеку реализации и BLL (BPL), как вы решаете, что необходимо связать с репозиторием, а что - непосредственно с BPL

BO.dll
ISomeObjectRepository.cs

public interface ISomeObjectRepository:  
IRepository<SomeObject>, ILazyFetchingRepository<SomeObject>  
{  
      SomeObject GetSomeObjectByWeirdFields(IDictionary<string, object> weirdFields);  
} 

Repositories.dll
SomeObjectRepository.cs

public sealed class SomeObjectRepository:  
BaseRepository<SomeObject>, ISomeObjectRepository  
{  
     public SomeObject GetSomeObjectByWeirdFields(IDictionary<string, object> weirdFields){  
         throw new NotImplementedException();  
        }  
}

BPL.dll
SomeObjectService.cs

public static class SomeObjectService:  
{  
     public static SomeObject GetSomeObjectByWeirdFields(IDictionary<string, object> weirdFields){  
           throw new NotImplementedException();  
     }  
} 

Итак, на самом деле вопрос в том, за кого отвечает реализация GetSomeObjectByWeirdFields?Любые руководства по шаблонам приветствуются.

1 Ответ

0 голосов
/ 30 августа 2011

Интерфейс хранилища существует на уровне домена (бизнес-уровне), как вы упомянули, который определяет контракт, который абстрагирует хранилище в модели домена.

Уровень обслуживания зависит от абстракции хранилища (ISomeObjectRepository) и ничего не знают о конкретной реализации.

Ответ на ваш вопрос о том, где внедрять конкретное хранилище, должен быть определен на более низком уровне, который можно назвать уровнем доступа к данным, или уровнем технического обслуживания, илиУровень сохраняемости, как бы вы это ни называли, важно, чтобы вы реализовали его в другом компоненте, этот компонент можно было заменить, не затрагивая все остальные уровни и не влияя на интерфейс хранилища.например, вы можете реализовать свои репозитории с помощью NHibernate, позже вы можете решить заменить его на реализацию Entity Framework, Ado или даже XML-файлы.

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

отметьте http://sellandbuy.codeplex.com/, чтобы получить пример реализации хранилища с использованием NHibernate на отдельном уровне.

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