Nhibernate + DDD

1. Introdução

Um framework é um conjunto de ferramentas reunidas para facilitar o desenvolvimento de aplicações, uma Framework ORM (Object/ Relational Mapping, em outras palavras Mapeamento Objeto/Relacional) tem o objetivo de tentar compatibilizar o mundo dos bancos de dados relacional e as linguagens orientado a objetos, através desse mapeamento é possíve associar uma propriedade de uma classe a um campo de uma tabela no banco de dados ou seja as classes representam tabelas no banco de dados.

Não só as novas tecnologias têm contribuído na facilitação do desenvolvimento de aplicações, a forma como se pensa o software a definição das prioridades também pode acelerar esse processo, principalmente para softwares de Domínio Complexo, com isso uma nova filosofia se desenvolveu: Domain Driven Design (Modelo Orientado ao Domínio), não é uma tecnologia, e sim um conjunto de práticas e maneira de pensar visando acelerar os projetos com domínios complexos.

2. O que è Nhibernate?

É uma Framework ORM da tecnologia .NET baseada na Framework Hibernate que é uma ferramenta de persistência de dados do Java. Nhibernate faz a persistência dos objetos .NET em uma base de dados relacional subjacente, pode ser feita a partir de uma descrição XML de suas entidades e relacionamentos, o NHibernate gera automaticamente o SQL para carregar e guardar os objetos, não sendo mais necessário escrever os códigos SQL dentro e fora do database, a própria ferramenta criará os comandos SELECTs, INSERTs, UPDATEs e DELETEs em tempo de execução.

3. Como Funciona?

Funciona como uma camada entre o modelo de classes e o modelo relacional, obtém informações em tempo de execução e suas configurações como tipo de banco e string de conexão são definidas em um arquivo XML chamado nhibernate.cfg.xml. Veja Figura 1 um diagrama do funcionamento do NHibernate.

Fig1.jpg

4. Vantagens

Economia de tempo, já que não será mais necessário escrever códigos SQL na aplicação;
Portabilidade, caso seja necessário mudar de banco de dados basta informar ao framework (NHibernate) o novo tipo de banco de dados que será utilizado: Oracle, SQL Server , Sybase etc;
Gerenciamento de transações; paginação de resultados entre outros.

5. O que é DDD?

Domain Driven Design (DESIGN DIRIGIDO A DOMÍNIO) não é uma tecnologia nem mesmo uma metodologia. É uma maneira diferente de pensar a organização de seus aplicativos e a estrutura de código. DDD reúne um conjunto e princípios com ênfase no domínio e na lógica a fim de criar um modelo de domínio, ou seja, programar com foco no domínio.

5.1. Terminologia

Entidade: Um objeto que tem uma identidade distinta. Por exemplo, uma entidade usuário tem uma identidade distinta, com um ID.
Valor Objeto: Um objeto que não tem identidade própria, como números e datas. Por exemplo, se dois usuários têm a mesma data de nascimento, você pode ter várias cópias de um objeto que representa a data de 01/01/2000.
Fábrica: Usado para criar entidades. Por exemplo, você pode usar uma Fábrica para criar uma entidade de perfil de uma entidade Usuário.
Repositório: Utilizado para armazenar, recuperar e excluir objetos de domínio de implementações de armazenamento diferentes. Por exemplo, você pode usar um repositório para armazenar o perfil de sua fábrica criada.
Serviço: Quando uma operação não pertence conceitualmente a qualquer objeto.

5.2. Pré-requisitos para uso

O modelo de domínio deverá centrar-se em um domínio específico de negócio operacional. Ele deve se alinhar com o modelo de negócio, estratégias e processos de negócio.
Ele deve ser isolado de outros domínios na empresa, bem como de outras camadas da arquitetura do aplicativo.
Deve ser reutilizáveis para evitar qualquer duplicação de modelos e implementação dos mesmos elementos centrais do domínio do negócio.
O modelo deve ser projetado com baixo acoplamento com outras camadas da aplicação, o que significa nenhuma dependência nas camadas de cada lado da camada de domínio.
Deve ser uma camada abstrata e claramente separada permitindo fácil manutenção, testes e controle de versão. As classes de domínio devem ser aptas a teste de unidade fora do recipiente e de dentro da IDE.
Deve ser construída utilizando um modelo de programação POJO sem qualquer tecnologia ou dependências quadro.
O modelo de domínio deve ser independente de detalhes de implementação de persistência, embora a tecnologia não coloca algumas restrições sobre o modelo.
Deve ter dependências mínimas em qualquer infra-estrutura de quadros, porque ele vai sobreviver neste contexto.

6. Nhibernate + DDD

Um dos princípios fundamentais do DDD é que o domínio não sabe como os dados irão ser armazenados, com isso e preciso definir uma ferramenta ORM para persistencia dos dados no banco, Nhibernate é a ferramente que pode ser utilizada perfeitamente para esse fim, pois ela permite ter um modelo desacoplado do mecanismo de persistência de dados, desta forma a aplicação se torna completamente isolada do banco de dados e esta é uma das premissa da modelagem com DDD, o coração da aplicação deve se manter isolado não só do banco de dados mas do mecanismo de persistência e da camada de apresentação, isso permite por exemplo: se o domínio for matindo intacto o Nhibernate pode ser substituido por outra ORM como a ADO.Net Entity sem nenhuma abalo na aplicação

7. Conclusão

O DDD pode ser utilizado como um guia de boas praticas no desenvolvimento de uma aplicação, mas ele é mais do que isso, mais detalhes pode ser conferido no site do Eric Evans (http://domaindrivendesign.org/resources/what_is_ddd), que escreveu o livro: Domain-Driven Design: Tackling Complexity in the Heart of Software (Atacando as Complexidades no Coração do Software)

ddd_livro.jpg

Veja também:

capaOnline_NET72.jpg

8. Referências

http://www.infoq.com/articles/ddd-in-practice
http://www.caelum.com.br/curso/ws-46-domain-driven-design/
http://www.fedecarg.com/wiki/zfdomain/
http://www.slideshare.net/rponte/entendendo-domaindriven-design
http://en.wikipedia.org/wiki/Domain-driven_design
http://books.google.com/books?id=7dlaMs0SECsC&printsec=frontcover#v=onepage&q&f=false
http://altabooks.tempsite.ws/product_info.php?products_id=361
(http://domaindrivendesign.org/resources/what_is_ddd)
http://www.nhibernate.org/

Revista .net magazine Ano 6 72ª Edição - ISSN 1980-3931

Equipe UCSAL 2010.1:

Fábio Henrique
Gustavo Santiago
Jocival Veloso

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License