[quote=Paulo Silveira][quote=sergiotaborda]
É estranho. Esparava que fosse ao contrario (estranhar o uso de DTO e aceitar que DAO usa DTO)
DTO é estranho em DDD porque DDD é orientado ao dominio e DTO não é dominio, é infra. Usa-se porque é preciso, não porque é bonito ou desejável. Mas o principal é que DTO é um objeto só de dados, sem regras, e isso parece ir contra o conceito de Entity ( eu disse parece)
Uma implementação correta de DAO é reutilizável e independente do programa onde é usada. Para isso ser alcançado
ela não pode cuspir objetos de dominio nem aceitar objetos de dominio. Logo, ha que usar intermediários. o DAO cospe DTO e aceita QueryObject para pesquisa e DTO para edição. O DTO pode ser algo simples como um Map
[/quote]
mas isso nao eh horrendo? tem a entidade Entidade e vamos criar EntidadeDTO so porque o DAO nao deveria falar com Entidade?
[/quote]
Antes de mais, deixe-me esclarecer que estou-me atendo ao conceito de DAO e Repositorio passado no proprio artigo referido no inicio do thread.
Nesse contexto, não é horrendo porque simplesmente não existe. Vc está assumindo que tem que criar um EntidadeDTO e jogar ele no DAO. Ora, isso vai exactamente contra o conceito de que o DAO é independente do dominio.
Ora, se vc espera que o DAO receba um objeto que depende do dominio (EntidadeDTO depende do dominio porque Entidade depende do dominio) isso que vc tem ai não é um DAO.
A lógica é simples: Axioma: DAO é independente do dominio. Corolário: se é dependente não é um DAO.
Então o que é ?
O artigo responde a isso também. Se manipular entidades e servir para localização ele é um Repositorio. Se for apenas um transformador entre DTO e outra coisa (specification, entidade, VO ,etc…) então é um DomainDelegate.
[quote]
Voce mesmo falou Sergio um tempo atras, e eu concordei, que DTO eh pra voce acertar o tamanho da granularidade de requests/responses entre TIERS, nunca entre LAYERS.
De qualquer maneira, mesmo que voce concorde com isso, acho que ai o nome nao deveria chamar DTO, ja que esse padrao eh pra tier. E eu nao concordo com o uso de qualquer XO so pra separar o DAO de tocar entidades. Pra mim é o cumulo da arquitetura cebola.[/quote]
O problema com esta conversa é sempre o mesmo: nomenclatura e contexto. Ha uma dificuldade em seguir nomenclaturas dentro de um contexto. Neste topico o contexto é o artigo do cara.
O DTO do artigo não é só para Tiers !! 'das!!
Por outro lado, é impossivel algo passar entre tiers se não passar entre layers primeiro ( lembre-se do stack TCP por exemplo)
não me lembro de ter concordado consigo nisso, mas eu sempre defendi que eles são a mesma coisa
Mesmo que vc faça a destinção entre eles, isso se resume a se implementa Serializable ou não.
Ha uma variante que é um pouco mais diferente ( not really) que implica em comprimir a serialização. Isso sim é um DTO real. O nome DTO adveio dese padrão de compressão. Mas como num objeto so com atributos não ha o que comprimir o JEE COre Patterns passou a ideia de que o DTO era apenas um conjunto de atributos serializáveis e pronto. Não é apenas isso. O DTO original continha mecanismo de compressão (por exemplo, listas que nsó serializam os objetos realmente diferentes).
Hoje em dia DTO e TO são a mesma coisa. E não ha essa diferença tão destinta entre tier e layer. Aliás, se ler o JEE Core Patterns vai entender que eles usam os dois termos meio que indestintamente.
A destinção não é tão rigida como faz pensar.
Quer chamar outro nome ? blz. Qual nome ? Como se chamaria um objeto utilizado para o único propósito de transportar informação entre “regiões” diferentes do sistema ? eu acho “Transfer Objet” bem obvio, mas proponha um nome para a gente se entender da proxima vez… ma lembre-se que ninguem irá utilizá-lo e depois vai criar confusão…
Que tal TO ( tal como em WS) ? :lol: :lol: :lol:
Eu não estou propondo nada. Estou usando o que é comum, o que está escrito no artigo. ( é disso que trata o topico, não?)
Eu leio a mesma coisa que todo o mundo. Acho incrivel acharem que sou louco (ou estrupador) apenas porque meus conceitos coincidem com os dos caras que escreveram o que li. Se o meu conceito de que um DTO é algo que viaja em “regiões” da aplicação independentemente de serem Tiers ou Layers está errado , então o do Srini Penchikala ambém está, porque é o mesmo e eu sou culpado de ser coerente e entender o que leio. :shock: :?
Afinal qual é o vosso conceito de DTO. Alguma referencia confiável sobre a diferença ?
(Para quem não entendeu ainda: porque a diferença não existe é que eu coloquei em causa a confiabilidade de uma referencia que fala sobre a diferença)
Alguem perguntou o que havia de novo no artigo. Parece que o que ha de novo no artigo é entender o real conceito de DTO.