Li o .NET-Driven Design com C #: Problem - Design - Solution e notei que o autor criou um serviço de domínio para cada raiz agregada.
No entanto, os serviços de domínio eram apenas fachadas para o repositório correspondente. Por exemplo, este é um exemplo de código do aplicativo de seu livro
public static class CompanyService
{
private static ICompanyRepository repository;
private static IUnitOfWork unitOfWork;
static CompanyService()
{
CompanyService.unitOfWork = new UnitOfWork();
CompanyService.repository =
RepositoryFactory.GetRepository<ICompanyRepository,
Company>(CompanyService.unitOfWork);
}
public static IList<Company> GetOwners()
{
return CompanyService.GetAllCompanies();
}
public static IList<Company> GetAllCompanies()
{
return CompanyService.repository.FindAll();
}
public static void SaveCompany(Company company)
{
CompanyService.repository[company.Key] = company;
CompanyService.unitOfWork.Commit();
}
public static Company GetCompany(object companyKey)
{
return CompanyService.repository.FindBy(companyKey);
}
}
Como você vê, quase todas as chamadas para os serviços são wrappers para chamadas de repositório. Esse é um bom padrão ao criar serviços de domínio?
Devemos sempre envolver nossos repositórios em serviços de domínio? Existe uma abordagem melhor?
GetAllCompanies()envoltórios repository.FindAll(). No entanto, por que não posso simplesmente criar um método de repositório repository.GetAllCompanies()?!