Arquitetura
Estrutura
Visando uma melhor modularização, o Demoiselle está dividido por funcionalidades. Isto significa que o framework
não é monolítico, no qual todas as suas funcionalidades estão contidas em um único pacote. Aliás, esta estratégia não é
a mais indicada, pois projetos com um propósito específico, que não necessitam de persistência ou interface Web, por
exemplo, teriam dependências desnecessárias. Assim, o Demoiselle é separado em Core, Extensões e Componentes.
O Core do Demoiselle contém aquelas funcionalidades comuns a todas as extensões e aplicações. O core é simples,
leve e formado majoritariamente por interfaces e poucas implementações. O Core é a base do framework, sem ele, as
extensões e a própria aplicação não funcionariam.
As Extensões, como o próprio nome sugere, estendem o Core com funcionalidades extras e bem específicas a um domínio ou
tecnologia. Neste contexto, caso sua aplicação necessite de persistência com JPA, o framework fornecerá facilidades
para você; contudo, estas funcionalidades não estão no Core. Para este propósito existem as extensões como a
demoiselle-jpa, por exemplo. Cabe destacar que as extensões não possuem vida própria,
pois estão diretamente ligadas ao núcleo do framework, inclusive o ciclo de vida das extensões está
totalmente acoplado ao do Core.
Já os Componentes são artefatos separados e que, portanto, não são dependentes diretamente do Core. Aliás, os
Componentes podem até mesmo existir sem referenciar o Core. Desta forma, o seu ciclo de vida é totalmente
independente do Core e Extensões. Um componente não precisa, necessariamente, estender o comportamento do Core, mas
permitir disponibilizar novas funcionalidades ao usuário. Outra diferença importante é que, diferente de Core e
Extensões, os Componentes não necessariamente são aderentes a alguma especificação. Um exemplo é o
demoiselle-validation.
Pacote Internal
As boas práticas de programação nos alertam para que nunca sejamos dependentes de implementações, mas sempre de
interfaces ou, como alguns costumam dizer, depender de contratos
.
Portanto a sua aplicação precisará apenas depender das interfaces que o Demoiselle provê. As implementações específicas
e internas do Framework serão injetadas automaticamente pelo CDI.
As classes do pacote internal nunca devem ser referenciadas pela sua aplicação!
Qual o motivo de toda esta explicação? Os programadores mais curiosos irão encontrar classes do framework que estão
inseridas no pacote br.gov.frameworkdemoiselle.internal.
As classes deste pacote não devem ser usadas diretamente pela sua aplicação, caso contrário você
estará acoplando-a com a implementação interna do Framework. A equipe do
Demoiselle possui atenção especial quanto às suas interfaces (contratos) e não irá modificá-las sem antes tornar
públicas as mudanças. Contudo, tudo que consta no pacote br.gov.frameworkdemoiselle.internal
pode sofrer mudanças repentinas. Se você referenciar tais classes internas, a sua aplicação pode deixar
de funcionar ao atualizar a versão do Demoiselle.
Arquitetura das aplicações
É importante reforçar que o Demoiselle não obriga nenhum tipo de arquitetura para as aplicações, que podem ser
constituídas por quantas camadas forem necessárias. Contudo, é prudente não exagerar! Para quem não sabe por onde
começar, sugerimos uma arquitetura e padrões largamente utilizados pelo mercado, de forma a facilitar a manutenção e
para melhor modularização de seu projeto.
Usualmente, as aplicações são constituídas por pelo menos três camadas, desta forma é comum separar as lógicas de
apresentação, regras de negócio e persistência. O Demoiselle já fornece estereótipos que visam tornar esta
separação mais clara, respectivamente:
@ViewController, @BusinessController e @PersistenceController.
Maiores detalhes sobre cada anotação serão dados no decorrer desta documentação.
Cabe destacar que estamos falando de uma macro-visão arquitetural. Cada camada pode ser organizada
internamente da melhor forma possível, ou conforme os padrões vigentes no mercado. Para uma aplicação Swing, por
exemplo, o padrão de projeto Presentation Model
é bastante indicado. Para aplicações Web, os frameworks
especialistas geralmente aplicam o padrão MVC (Model/View/Controller).