Pular para o conteúdo principal

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)​

PadrãoResumoEtiquetas
Transaction ScriptO 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 ModelO Domain Model é um modelo de objetos do domínio de negócio que incorpora tanto o comportamento quanto os dados.Extensibility Testability
Table ModuleO 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 LayerO 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ãoResumoEtiquetas
Table Data GatewayO Table Data Gateway é um objeto que atua como gateway para uma tabela (ou view) do banco de dados.Decoupling Simplicity
Row Data GatewayO 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 RecordO 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 MapperO 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ãoResumoEtiquetas
Unit of WorkO 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 MapO 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 LoadO 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ãoResumoEtiquetas
Identity FieldO 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 MappersO 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 MappingO Foreign Key Mapping mapeia uma associação entre objetos para uma chave estrangeira entre tabelas.Consistency Simplicity
Association Table MappingO Association Table Mapping salva uma associação como uma tabela com chaves estrangeiras para as tabelas ligadas pela associação.Consistency
Dependent MappingO Dependent Mapping faz uma classe ser responsável por salvar e carregar os filhos que dependem dela.Simplicity Decoupling
Embedded ValueO Embedded Value mapeia um objeto para vários campos da tabela de outro objeto.Simplicity Performance
Serialized LOBO 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 InheritanceO 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 InheritanceO Class Table Inheritance representa uma hierarquia de herança com uma tabela por classe.Consistency Extensibility
Concrete Table InheritanceO Concrete Table Inheritance representa uma hierarquia com uma tabela por classe concreta.Performance Simplicity

Object-Relational Metadata Mapping (3)​

PadrãoResumoEtiquetas
Metadata MappingO 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 ObjectO Query Object é um objeto que representa uma consulta ao banco de dados.Decoupling Extensibility
RepositoryO 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ãoResumoEtiquetas
Model View ControllerO Model View Controller (MVC) divide a interação com o usuário em três papéis.Decoupling Testability Extensibility
Page ControllerO Page Controller é um objeto que trata a requisição de uma página ou ação específica de um site.Simplicity Testability
Front ControllerO Front Controller é um único controller que trata todas as requisições de um site.Consistency Extensibility Decoupling
Template ViewO Template View renderiza informação em HTML incorporando marcadores em uma página estática.Simplicity Decoupling
Transform ViewO 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 ViewO Two Step View transforma dados de domínio em HTML em duas etapas.Consistency Extensibility
Application ControllerO Application Controller é um ponto central para tratar a navegação entre telas e o fluxo da aplicação.Decoupling Extensibility Testability

Distribution (2)​

PadrãoResumoEtiquetas
Remote FacadeO 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 ObjectO Data Transfer Object (DTO) é um objeto que carrega dados entre processos para reduzir o número de chamadas.Performance Decoupling

Offline Concurrency (4)​

PadrãoResumoEtiquetas
Optimistic Offline LockO 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 LockO 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 LockO Coarse-Grained Lock bloqueia um conjunto de objetos relacionados com um único bloqueio.Consistency Simplicity
Implicit LockO 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ãoResumoEtiquetas
Client Session StateO Client Session State armazena o estado da sessão no cliente.Decoupling Simplicity
Server Session StateO 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 StateO Database Session State armazena os dados da sessão como dados confirmados (committed) no banco de dados.Consistency Decoupling

Base (11)​

PadrãoResumoEtiquetas
GatewayO 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 StubO Service Stub remove a dependência de serviços problemáticos durante os testes.Testability Decoupling
Record SetO Record Set é uma representação em memória de dados tabulares.Simplicity Performance
MapperO Mapper é um objeto que estabelece a comunicação entre dois objetos ou subsistemas independentes.Decoupling Extensibility
Layer SupertypeO Layer Supertype é um tipo que atua como supertipo de todos os tipos de uma camada.Simplicity Consistency
Separated InterfaceO Separated Interface coloca uma interface em um pacote diferente do pacote da sua implementação.Decoupling Testability
RegistryO Registry é um objeto bem conhecido que outros objetos usam para encontrar objetos e serviços comuns.Simplicity Testability
Value ObjectO 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
MoneyO Money representa um valor monetário.Consistency Simplicity
Special CaseO Special Case é uma subclasse que fornece comportamento especial para casos particulares.Simplicity Testability
PluginO 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