Слой репозитория в DDD - PullRequest
       2

Слой репозитория в DDD

0 голосов
/ 18 февраля 2012

Я прочитал эту статью, и у меня есть вопрос по этому поводу.

Шаблон репозитория - это Фасад, который абстрагирует вашу настойчивость от вашего домена. С одной стороны он притворяется коллекцией - на другой он имеет дело с техническими проблемами вашей настойчивости осуществление.

Означает ли это, что вы называете методы в хранилище так же, как если бы вы создали коллекцию. Например:

addDomainModel(...)
getDomainModel(...)

и так далее? Или вы бы назвали методы:

saveDomainModel(...)
fetchDomainModel(...)

Что было бы лучше или наиболее правильно? И я должен иметь имена методов, говорящие о том, что он добавляет, или просто:

add(...)
get(...)

как было бы в обычной коллекции?

http://devlicio.us/blogs/casey/archive/2009/02/20/ddd-the-repository-pattern.aspx

Ответы [ 2 ]

1 голос
/ 19 февраля 2012

Для этого нет никаких требований. Вы называете методы наиболее естественным для использования способом. Обычно мой репозиторий выглядит так (код C #)

public interface ImCommandRepository
{
    Entity Get(int id);
    Entity Get(string name);
    void Save(Entity value);
    void Delete(int id);
}

public interface ImQueryRepository
{
    PaginatedResult<ViewModel> GetEntitiesA(int skip,int take);
    PaginatedResult<ViewModel> SearchEntitiesB(string keyword,int skip,int take);
}

Как вы видите, я использую разные репозитории для обновления персистентности и для запроса персистентности. В то время как первый имеет довольно распространенные методы CRUD для связи с объектами, которые будут созданы / обновлены / удалены, другой просто перечисляет или ищет в БД и возвращает модель, подходящую для представлений. Вы можете добавлять или называть методы в зависимости от использования, вы НЕ ДОЛЖНЫ реализовывать хранилище как коллекцию (то есть реализовывать предопределенный интерфейс), просто относитесь к нему как к одному. Важно сохранить независимость домена от постоянной реализации.

0 голосов
/ 20 февраля 2012

Одной из целей DDD является то, что эксперты домена могут ПРОЧИТАТЬ код. Поэтому вы должны назвать свои методы, чтобы сделать ваш код более читабельным. С этой точки зрения, на мой взгляд, itemRepository.add (item) или даже items.add (item) более понятен, чем, например, itemRepository.saveItem (пункт). Посмотрите на это:

Как написать репозиторий

...