Eu sou novo em conceitos como DAO, DAL e Domain Driven Design. No final, quero dissociar a camada de persistência (banco de dados mysql) dos meus objetos de negócios e lógica em um aplicativo da web. Gostei do conceito DAO, mas fiquei preso ao implementá-lo quando quero criar um Objeto de Negócios a partir do banco de dados que tenha outras entidades associadas a ele (representadas por chave estrangeira na tabela db).
- Como essas referências (agregações) são tratadas usando o padrão DAO? Todo exemplo de DAO online é simples e mostra a criação apenas de Objetos de Negócios semelhantes a objetos de valor (sem referenciar outras entidades ou objetos de valor). Isso é feito usando a Injeção de Dependências e, em caso afirmativo, onde é criada a dependência?
- Ao ler mais , acho que o padrão de Repositório do DDD oferece a possibilidade de talvez usar DAOs nos bastidores e manipular agregações de objetos. Pelo que entendi, ele apenas fornece a chamada raiz (Entidade com todas as referências carregadas ou carregadas com preguiça) para o mundo exterior, o que parece uma boa abordagem para mim. É recomendado o Repositório ao usar o DAO ou os próprios DAOs podem fornecer essa funcionalidade, mantendo a Ignorância de Persistência nos Objetos de Negócios.
Não estou usando uma ferramenta ORM e não quero, pois gosto de explorar esses padrões básicos diretamente
repository
entity
dao
Michbeckable
fonte
fonte
Respostas:
Há duas preocupações com as quais lidar - ortogonais entre si:
1) O limite inferior da persistência
É aqui que você precisa lidar com conexões , consultas , conjuntos de resultados e similares. Geralmente, você usa uma ou outra estrutura que fornece uma fachada - padrão à mão, que abstrai as coisas sujas, para que você só diga o que deseja saber (Resultset from Query) e onde a estrutura pode encontrá-las ( Consulta e Conexão). O que você faz com o conjunto de resultados é com você.
Quando seu paradigma é OOP, há uma etapa adicional envolvida: montar o conjunto de resultados em objetos. Você faz isso manualmente ou tem um mapeador de objeto-relacional fazendo o trabalho para você.
2) A abstração no seu aplicativo No topo dessa camada de baixo nível, está a abstração com a qual o seu aplicativo lida. Existe o DataAccessObject (DAO) -Layer ou o Repository -Layer. Ambos geram objetos para o seu aplicativo trabalhar.
Qual deles você está usando não afeta a resposta da sua pergunta.
Sua pergunta, por um lado, é sobre modelagem ( »Como lidar com relacionamentos entre objetos« Resposta: via Composição / Agregação ) e sobre como preencher o objeto (e suas dependências) com dados.
Este é o caminho a percorrer. Existem duas maneiras:
1) Você torna o DI explícito e define um construtor. Ao criar o Objeto, você pode criar todas as dependências primeiro e injetá-las por injeção de construtor ou setter
2) Você usa uma estrutura que faz a mágica para você. Muitas vezes, a reflexão está envolvida, ou seja, existem possibilidades em algumas línguas para examinar e manipular objetos em tempo real. A injeção é feita de forma transparente para o usuário pela estrutura.
Isso é independente do padrão DAO / Repository.
Essa é uma abordagem nobre, mas nem sempre produtiva. Na maioria das vezes, você quer fazer as coisas. Para fins educacionais, você pode seguir esse caminho. Mas eu não recomendaria.
Procure um ORM-Framework flexível, que oferece uma ajuda quando necessário, sem forçar você de uma maneira ou de outra. Nem sempre a consulta gerada ootB é eficaz. Uma boa estrutura permite que você use SQL quando necessário e cuida apenas da peça de montagem .
fonte
É aqui que o ORM (mapeamento objeto-relacional) é útil. Existem bibliotecas para muitas linguagens de programação que fornecem esse tipo de técnicas de programação. Por exemplo, para Java, há o Hibernate . O Hibernate funciona com anotações Java. Aqui está um exemplo simples para um relacionamento muitos para um a partir da documentação oficial :
fonte