В DDD может ли уровень представления использовать классы Repository и Service? - PullRequest
2 голосов
/ 01 января 2011

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

Это кажется неправильным. Может кто-нибудь уточнить это для меня?

Ответы [ 2 ]

3 голосов
/ 02 января 2011

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

Прикладные услуги: фасады . Плохой фасад - это тот, который добавляет больше сложности, чем решает. Как то так:

public int Increment(int v){ v=v+1;return v;}

Если это не решает достаточно сложность или Вы явно хотите, чтобы все проходило через дополнительный слой, чтобы максимально разделить клиента - это бесполезно.

Лично я бы просто вставил эти вещи в контроллер (если используется шаблон MVC):

public ActionResult ViewBlogPost(int id){
  //I like to name repositories as collections
  var blog=_blogs.Find(id);

  blog.IsBeingViewedBy(_currentViewer); 
  return View(blog);
}
0 голосов
/ 02 января 2011

Для того, чтобы иметь «чистоту слоя» - да, это способ сделать это. Но вы можете легко избежать избыточного кода. Создайте BaseService, который определяет все распространенные методы (например, save(..), update(..), delete(..)). Другие, более сложные методы могут (и должны) потребовать некоторого взаимодействия с объектом домена.

Между прочим, иногда предполагается, что в DDD доступ к уровню хранилища осуществляется из объекта домена. Хотя я думаю, что это не так, иногда это так. Если это также ваш случай, то это service > domain object > repository, и "ярлыков" не может быть

...