Просто хотелось узнать, как другие слои их архитектуры. Скажем, у меня есть свои слои следующим образом:
Уровень домена
--Product
--Product Сервис (если imp войдет в этот слой?)
--IProductService
--IProductRepository
Уровень инфраструктуры
--Product Репозиторий (Imp IProductRepository в моем домене)
Теперь, когда создается новый продукт, у меня есть требование присвоить идентификатор продукта, вызвав метод ProductService.GetNextProductId().
Поскольку служба имеет зависимость от репозитория, я создал ProductService ctor с интерфейсом IProductRepository, который может быть введен позже. что-то вроде этого:
public class ProductService : IProductService
{
private IProductRepository _repository;
public ProductService(IProductRepository repository)
{
_repository = repository;
}
public long GetNextProductId()
{
return _repository.GetNextProductId();
}
}
Моя проблема в том, что когда я использую службу в классе продуктов, я делаю ссылку на репозиторий в ctor при создании нового класса ProductService. В DDD его большой нет нет, чтобы иметь такую ссылку. Я даже не уверен, правильно ли настроен класс домена продукта, чтобы позвонить в службу, может кто-то посоветует:
public class Product : Entity
{
private ProductService _svc;
private IProductRepository _repository;
public Product(string name, Address address) //It doesnt seem right to put parm for IProductRepository in the ctor?
: base(_svc.GetNextProductId) // This is where i pass the id
{
// where to create an instance of IProductRepository?
}
}
Как я могу элегантно решить эту проблему дизайна? Я открыт для предложений от опытных разработчиков DDD
РЕДАКТИРОВАТЬ:
Спасибо за ваши комментарии. Я также сомневался, следует ли вызывать службу из класса продукта. Я еще не использовал шаблон фабрики (пока), поскольку конструкция объекта все еще проста. Я не чувствую, что это оправдывает фабричный метод?
Я в замешательстве... Отложите ProductId в сторону, если моему классу Product нужны другие данные из Сервиса, например GetSystemDateTime() (я знаю, плохой пример, но пытаюсь продемонстрировать вызов non db), где будет вызван этот метод службы?
Службы в DDD - это логические дампы, где логика не является натурным для объекта домена, правильно? Итак, как он склеивается?