Patterns of Enterprise Application Architecture
Catálogo pessoal baseado no Catalog of Patterns of Enterprise Application Architecture, de Martin Fowler. Cada padrão tem descrição, problemas que resolve, quando usar, trade-offs, etiquetas (objetivos de design), um diagrama Mermaid e um exemplo de código.
Total: 51 padrões em 10 grupos. Etiquetas: Objetivo de design.
Grupos
- Domain Logic (4)
- Data Source Architectural (4)
- Object-Relational Behavioral (3)
- Object-Relational Structural (10)
- Object-Relational Metadata Mapping (3)
- Web Presentation (7)
- Distribution (2)
- Offline Concurrency (4)
- Session State (3)
- Base (11)
Domain Logic (4)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Transaction Script | O Transaction Script organiza a lógica de negócio como procedimentos, com um procedimento para cada requisição vinda da camada de apresentação. | Simplicity Performance |
| Domain Model | O Domain Model é um modelo de objetos do domínio de negócio que incorpora tanto o comportamento quanto os dados. | Extensibility Testability |
| Table Module | O Table Module é uma única instância que trata a lógica de negócio de todas as linhas de uma tabela ou view do banco de dados. | Simplicity Performance |
| Service Layer | O Service Layer define a fronteira de uma aplicação como um conjunto de serviços que expõem as operações disponíveis e coordenam as respostas. | Decoupling Consistency Testability |
Data Source Architectural (4)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Table Data Gateway | O Table Data Gateway é um objeto que atua como gateway para uma tabela (ou view) do banco de dados. | Decoupling Simplicity |
| Row Data Gateway | O Row Data Gateway é um objeto que atua como gateway para um único registro de uma fonte de dados, com uma instância por linha. | Decoupling Testability |
| Active Record | O Active Record é um objeto que envolve uma linha de uma tabela ou view, encapsula o acesso ao banco e adiciona lógica de domínio sobre esses dados. | Simplicity |
| Data Mapper | O Data Mapper é uma camada de acesso a dados que transfere dados entre objetos em memória e o banco, mantendo ambos independentes entre si e do próprio mapper. | Decoupling Testability Extensibility |
Object-Relational Behavioral (3)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Unit of Work | O Unit of Work mantém uma lista dos objetos afetados por uma transação de negócio e coordena a escrita das mudanças no banco de dados, além da resolução de problemas de concorrência. | Consistency Performance |
| Identity Map | O Identity Map garante que cada objeto seja carregado do banco de dados uma única vez por sessão, mantendo um mapa de objetos já lidos indexado pela chave primária. | Consistency Performance |
| Lazy Load | O Lazy Load é um objeto que não contém todos os dados de que precisa, mas sabe como obtê-los quando forem necessários. | Performance Decoupling |
Object-Relational Structural (10)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Identity Field | O Identity Field guarda no objeto a chave primária da linha do banco de dados, para manter a identidade entre o objeto em memória e a linha correspondente. | Consistency |
| Inheritance Mappers | O Inheritance Mappers organiza os mapeadores de uma hierarquia de herança para que a lógica de mapeamento comum fique em um lugar e a específica de cada classe em outro. | Extensibility Decoupling |
| Foreign Key Mapping | O Foreign Key Mapping mapeia uma associação entre objetos para uma chave estrangeira entre tabelas. | Consistency Simplicity |
| Association Table Mapping | O Association Table Mapping salva uma associação como uma tabela com chaves estrangeiras para as tabelas ligadas pela associação. | Consistency |
| Dependent Mapping | O Dependent Mapping faz uma classe ser responsável por salvar e carregar os filhos que dependem dela. | Simplicity Decoupling |
| Embedded Value | O Embedded Value mapeia um objeto para vários campos da tabela de outro objeto. | Simplicity Performance |
| Serialized LOB | O Serialized LOB salva um grafo de objetos serializando-o e gravando o resultado em um campo grande (LOB) de uma única coluna. | Simplicity Performance |
| Single Table Inheritance | O Single Table Inheritance representa uma hierarquia de classes como uma única tabela, com colunas para todos os campos de todas as classes. | Simplicity Performance |
| Class Table Inheritance | O Class Table Inheritance representa uma hierarquia de herança com uma tabela por classe. | Consistency Extensibility |
| Concrete Table Inheritance | O Concrete Table Inheritance representa uma hierarquia com uma tabela por classe concreta. | Performance Simplicity |
Object-Relational Metadata Mapping (3)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Metadata Mapping | O Metadata Mapping mantém os detalhes do mapeamento objeto-relacional em metadados, em vez de espalhá-los em código escrito à mão. | Simplicity Extensibility |
| Query Object | O Query Object é um objeto que representa uma consulta ao banco de dados. | Decoupling Extensibility |
| Repository | O Repository fica entre o domínio e a camada de mapeamento de dados e apresenta os objetos persistidos por meio de uma interface semelhante à de uma coleção em memória. | Decoupling Testability |
Web Presentation (7)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Model View Controller | O Model View Controller (MVC) divide a interação com o usuário em três papéis. | Decoupling Testability Extensibility |
| Page Controller | O Page Controller é um objeto que trata a requisição de uma página ou ação específica de um site. | Simplicity Testability |
| Front Controller | O Front Controller é um único controller que trata todas as requisições de um site. | Consistency Extensibility Decoupling |
| Template View | O Template View renderiza informação em HTML incorporando marcadores em uma página estática. | Simplicity Decoupling |
| Transform View | O Transform View é uma view que processa dados de domínio elemento por elemento e os transforma em HTML (ou outro formato). | Testability Decoupling |
| Two Step View | O Two Step View transforma dados de domínio em HTML em duas etapas. | Consistency Extensibility |
| Application Controller | O Application Controller é um ponto central para tratar a navegação entre telas e o fluxo da aplicação. | Decoupling Extensibility Testability |
Distribution (2)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Remote Facade | O Remote Facade oferece uma interface de granularidade grossa sobre objetos de granularidade fina, para tornar eficiente o acesso por rede. | Performance Decoupling Simplicity |
| Data Transfer Object | O Data Transfer Object (DTO) é um objeto que carrega dados entre processos para reduzir o número de chamadas. | Performance Decoupling |
Offline Concurrency (4)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Optimistic Offline Lock | O Optimistic Offline Lock evita conflitos entre transações de negócio concorrentes validando, no momento do commit, que ninguém alterou os dados que a sessão leu. | Consistency Performance |
| Pessimistic Offline Lock | O Pessimistic Offline Lock previne conflitos entre transações de negócio concorrentes permitindo que apenas uma sessão por vez edite um dado. | Consistency |
| Coarse-Grained Lock | O Coarse-Grained Lock bloqueia um conjunto de objetos relacionados com um único bloqueio. | Consistency Simplicity |
| Implicit Lock | O Implicit Lock permite que código de framework ou de um supertipo de camada adquira bloqueios offline automaticamente, em vez de depender de o desenvolvedor lembrar de fazê-lo em cada ponto de uso. | Consistency Decoupling |
Session State (3)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Client Session State | O Client Session State armazena o estado da sessão no cliente. | Decoupling Simplicity |
| Server Session State | O Server Session State mantém o estado da sessão no servidor, em forma serializada ou como objetos em memória. | Simplicity Performance |
| Database Session State | O Database Session State armazena os dados da sessão como dados confirmados (committed) no banco de dados. | Consistency Decoupling |
Base (11)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Gateway | O Gateway é um objeto que encapsula o acesso a um sistema ou recurso externo, como um banco de dados, um serviço de pagamento, uma fila ou um arquivo XML. | Decoupling Testability |
| Service Stub | O Service Stub remove a dependência de serviços problemáticos durante os testes. | Testability Decoupling |
| Record Set | O Record Set é uma representação em memória de dados tabulares. | Simplicity Performance |
| Mapper | O Mapper é um objeto que estabelece a comunicação entre dois objetos ou subsistemas independentes. | Decoupling Extensibility |
| Layer Supertype | O Layer Supertype é um tipo que atua como supertipo de todos os tipos de uma camada. | Simplicity Consistency |
| Separated Interface | O Separated Interface coloca uma interface em um pacote diferente do pacote da sua implementação. | Decoupling Testability |
| Registry | O Registry é um objeto bem conhecido que outros objetos usam para encontrar objetos e serviços comuns. | Simplicity Testability |
| Value Object | O Value Object é um objeto pequeno e simples, como um valor monetário ou um intervalo de datas, cuja igualdade não se baseia em identidade. | Consistency Simplicity Testability |
| Money | O Money representa um valor monetário. | Consistency Simplicity |
| Special Case | O Special Case é uma subclasse que fornece comportamento especial para casos particulares. | Simplicity Testability |
| Plugin | O Plugin liga classes durante a configuração, e não durante a compilação. | Extensibility Decoupling Testability |
Por etiqueta
Decoupling (24)
Service Layer, Table Data Gateway, Row Data Gateway, Data Mapper, Lazy Load, Inheritance Mappers, Dependent Mapping, Query Object, Repository, Model View Controller, Front Controller, Template View, Transform View, Application Controller, Remote Facade, Data Transfer Object, Implicit Lock, Client Session State, Database Session State, Gateway, Service Stub, Mapper, Separated Interface, Plugin
Simplicity (23)
Transaction Script, Table Module, Table Data Gateway, Active Record, Foreign Key Mapping, Dependent Mapping, Embedded Value, Serialized LOB, Single Table Inheritance, Concrete Table Inheritance, Metadata Mapping, Page Controller, Template View, Remote Facade, Coarse-Grained Lock, Client Session State, Server Session State, Record Set, Layer Supertype, Registry, Value Object, Money, Special Case
Extensibility (12)
Domain Model, Data Mapper, Inheritance Mappers, Class Table Inheritance, Metadata Mapping, Query Object, Model View Controller, Front Controller, Two Step View, Application Controller, Mapper, Plugin
Performance (14)
Transaction Script, Table Module, Unit of Work, Identity Map, Lazy Load, Embedded Value, Serialized LOB, Single Table Inheritance, Concrete Table Inheritance, Remote Facade, Data Transfer Object, Optimistic Offline Lock, Server Session State, Record Set
Consistency (17)
Service Layer, Unit of Work, Identity Map, Identity Field, Foreign Key Mapping, Association Table Mapping, Class Table Inheritance, Front Controller, Two Step View, Optimistic Offline Lock, Pessimistic Offline Lock, Coarse-Grained Lock, Implicit Lock, Database Session State, Layer Supertype, Value Object, Money
Testability (16)
Domain Model, Service Layer, Row Data Gateway, Data Mapper, Repository, Model View Controller, Page Controller, Transform View, Application Controller, Gateway, Service Stub, Separated Interface, Registry, Value Object, Special Case, Plugin