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()
?!