[quote=marvinla][quote=mochuara][quote=marvinla]Aproveitando a discução:
imaginem um caso, onde é necessário buscar todos os quartos que estarão disponíveis para uso em um período futuro.
Com certeza esta busca teria um certo grau de complexidade que, inevitavelmente, iria colocar lógica de negocio no repositorio. Se o repositório não tiver acesso a nem isso da lógica de negócio, seria necessário trazer todos os quartos, todas as reservas e o que mais fosse necessário, fazer um processamento via linguagem de programação, o que geraria um overhead grande.
Neste caso, o que é recomendado?
Abraços[/quote]
Nao tem nada de complexo, mas o que vc chama de regra de negocio na verdade é apenas um criterio de busca. O exemplo é ruim pra explicar DDD porque vc esta criando repositorios pensando em requisitos do ponto de vista do usuario. Mas ninguem precisa criar domain model pra fazer uma visualizacao do banco de dados. DDD nao é uma nova maneira de fazer relatorios ou CRUD.
Mas o que fazer se o domain model precisa confirmar uma reserva e pra isso precisa checar se os quartos estaos disponiveis? Bom, parece mais facil agora ne?[/quote]
Pra mim este é o ponto mais critico de entender: no caso eu teria um metodo acessível pelo menu domain model: quartosDisponiveis(DataInicial, DataFinal). Este método acessaria a fonte de dados atravéz do DAO, WS, o que for para trazer as reservas do período e verificaria quais quartos não estão na lista, estes serão os disponíveis.
Ou, poderia ser feito atravez de uma única instrução SQL, ou mesmo HQL ou Criteria do Hibernate, porém a lógica de verificar quais quartos estão disponíveis estaria sendo codificada na camada de infra.
Isso afetaria a performance, visto que, se fizesse do primeiro modo, teria que, realizar 1 acesso à fonte de dados para buscar TODOS os quartos, 1 acesso para buscar TODAS as reservas do período, e ainda verificar quarto a quarto qual está disponível.
Neste exemplo pode ser banal, mas em um ambiente com um grande volume de dados, isso pode fazer a diferença.[/quote]
Não é um problema de persistencia, mas de design. Se trata de um sistema real vc deve primeiro saber distinguir regras de negocio de estado essencial, estado acidental, logica e validacoes existentes. E sim, saber o que esta fazendo faz toda a diferenca!