[quote=sergiotaborda][quote=MrDataFlex]Boa noite senhores,
Estou fazendo o design de uma aplicação, estou tendendo ao DDD. Esta aplicação, possui uma classe de dominio, meramente ilustrativa “Empresa”, supomos também que esta classe Empresa possui três campos:
funcionarios
clientes
acionistas
Digamos que, cada um destes campos é provido por uma TIER diferente, exemplo:
funcionarios = webservice
clientes = Banco de dados
acionistas = arquivo
Então, tenho minha interface EmpresaRepository:
listFuncionariosById..
listClientesByExample..
listAcionistasByNameOrderByAmont..
Logo, minha classe Empresa, receberia uma instancia de uma implementacao de repositorio pelo construtor, e teria seus getters invocando estes métodos… (lazy strategy)
[color=red]dúvida:
É errado eu implementar esta interface “usando” uma classe só? Por exemplo, um método faria chamada a um webservice enquanto outro a um banco de dados… isso me parece um tanto estranho (não muiito coeso a nivel de implementacao), existe uma maneira mais elegante?
[/color]
[/quote]
Não use cores dessa forma.
O seu pensamento está correto. O repositorio irá comunicar com 3 diferentes serviços de aplicação para responder aqueles métodos.
Repositorio não é uma interface. Vc cria um objeto EmpresaRepositorio. Apenas um. Esse objeto recebe implementações de três serviços
que mediam essas três formas de comunicação/dados DO ponto de vista do objeto repositorio ele não sabe onde os dados estão.
A unica coisa errada na sua estrutura é colocar o repositorio sendo usado pela entidade empresa. Não faça isso.
[/quote]
Sergio, obrigado pela resposta. Deixe-me entender. Pq não programo voltado a interface neste caso? E se eu não colocar a responsabilidade de invocar dentro do objeto empresa, terei que fazer algo como:
x = new Empresa()..
x.setFuncionario(repositorio.getFuncionarios()) ...
para todos os atributos… sendo que eu poderia controlar isso por demanda dentro do objeto… tem um approach melhor?
Teria como representar em draft code a sua idéia ?
Valeu!