Edit page

Padrões de Aplicações Empresariais

Estes são alguns dos padrões utilizados no desenvolvimento de aplicações empresariais. Mais padrões podem ser encontrados no catálogo oficial Patterns of Enterprise Applications, sendo que estes estão explicados a fundo no livro.

Domain Logic Patterns

Transaction Script

Organiza a lógica de domínio em transações, em que cada transação está associada a um request do utilizador e trata de uma única apresentação.

Domain Module

Organiza a lógica de domínio numa abordagem orientada a objetos. É caraterizada por objetos de domínio que incorporam tanto lógica de negócio como dados.

Service Layer

Define limites da aplicação através de uma camada de serviços, que define um conjunto de operações/serviços que o utilizador pode executar, coordenando as respostas da aplicação para cada um desses serviços.

Data Source Architectural Patterns

Table Data Gateway

Objeto que serve de gateway para uma tabela da base de dados. Cada instância deste objeto está responsável pela interação com todas as linhas dessa tabela.

Row Data Gateway

Objeto que serve de gateway para uma linha numa tabela da base de dados. Cada instância deste objeto está responsável pela interação com uma única linha da tabela.

Active Record

Objeto que encapsula uma linha de uma tabela da base the dados, adicionando lógica de domínio a esses dados.

Data Mapper

Uma camada de mappers que associa objetos de domínio com a base de dados, o que promove a independência entre a estrutura do objeto de domínio e a representação deste na base de dados.

Object-Relational Behavioral Patterns

Unit of Work

Mantém uma lista de objetos afetados por uma transação, para coordenar a escrita das alterações da transação e resolver problemas de concorrência.

Identity Map

Mapa de identidade que garante que cada objeto só é carregado uma vez. Quando tenta aceder ao objeto, verifica se não foi já carregado para o mapa.

Lazy Load

Objetos que não contém toda a informação necessária, mas sabem como ir buscar, maioritariamente para melhorar a eficiência e evitar carregar objetos de largas dimensões a menos que necessário.

Existem múltiplas abordagens:

  • Lazy Initialization: verifica se campo é null quando acede, e se for null, carrega-o
  • Virtual Proxy: proxy do objeto real que delega responsabilidade para o objeto real quando algum dos seus campos é acedido
  • Value Holder: encapsula os campos do objeto real com métodos
  • Ghost: objeto real num estado parcial, que carrega todos os campos quando acessado

Object-Relational Structural Patterns

Identity Field

Guardar o ID do objeto na base de dados como um dos seus campos, para manter uma identidade entre o objeto em memória e na base de dados.

Foreign Key Mapping

Associa objetos através de uma foreign key que referencia a outra tabela da associação.

Association Table Mapping

Associa objetos criando uma nova tabela que guarda conjuntos de foreign keys, em que cada uma referencia uma tabela da associação.

Single Table Inheritance

Representa uma hierarquia de herança com uma única tabela, com colunas para todos os campos de todas as subclasses. Alguns objetos poderão ter colunas a null, associadas aos campos que não fazem parte da sua classe concreta.

Class Table Inheritance

Representa uma hierarquia de herança com uma tabela para cada classe. Uma classe concreta pode resultar dos joins das tabelas das várias classes que a compõem.

Concrete Table Inheritance

Representa uma hierarquia de herança com uma tabela para cada classe concreta.

Web Presentation Patterns

Model-View-Controller (MVC)

Divide a interface de utilizador em 3 componentes com as suas responsabilidades, o modelo, a vista, e o controlador. A vista apresenta os dados ao utilizador. O controlador atualiza o modelo e entrega os dados à vista apropriada. O modelo contém os dados.

O utilizador pede uma vista a um controlador. O controlador interage com o modelo, e pede os dados. O modelo devolve os dados ao controlador. O controlador entrega os dados à vista. A vista apresenta os dados ao utilizador.

Front Controller

Um controlador que trata de todos os requests.

Existe um handler que trata de todo o comportamento comum e chama comandos através de uma interface command.

Existem comandos concretos, que definem comportamento específico e herdam da interface command. Cada um destes comandos concretos é chamado pelo handler, executa o seu comando concreto e escolhe a vista apropriada para ser apresentada.

Distribution Patterns

Remote Façade

Fornece uma coarse-grained interface em fine-grained objects para aumentar a eficiência através de uma rede. É mais eficiente ter menos chamadas remotas mais grosseiras e depois retirar a informação necessária dentro do processo final do que fazer múltiplas chamadas remotas finas.

Data Transfer Object (DTO)

Objeto serializável que serve para transferir dados entre processos de forma prática e eficiente. É um objeto de dados, não é o próprio objeto.