Diretriz: Padrão Entidade-Controle-Fronteira
Esta diretriz descreve uma forma rápida para construir um design que seja robusto o suficiente para realizar os requisitos funcionais.
Relacionamentos
Descrição Principal

Quando da identificação dos elementos para um cenário de comportamento do sistema, você pode alinhar cada elemento participante a uma das três principais perspectivas: Entidade, Controle ou Fronteira. Embora as especificidades das linguagens, frameworks e heurísticas de design de qualidade, eles irão conduzir o design final, um primeiro corte que cubra o comportamento necessário do sistema pode sempre ser montado com elementos destas três perspectivas.

Este padrão é semelhante ao padrão Modelo Visão Controle (descrito em [BUS96] e em [WIKP-MVC], dentre outros lugares), mas o Padrão Entidade Controle Fronteira (ECF) não é apenas adequado para lidar com interfaces de usuário, e dá ao Controle um papel um pouco diferente a desempenhar.

Exemplo do padrão ECF

Elementos entidade

Uma entidade é um elemento passivo de longa duração, que é responsável por algumas partes significativas da informação. Não que dizer que as entidades são "dados", enquanto outros elementos de design são "funções". As entidades executam o comportamento organizado em torno de alguma quantidade coesa de dados.

Um exemplo de uma entidade para um aplicativo de serviço ao cliente é uma entidade Cliente que gerencie todas as informações sobre um cliente. Um elemento de design para esta entidade deverá incluir dados sobre o cliente, comportamento para gerenciar os dados, comportamento para validar as informações do cliente e para executar outros cálculos de negócio, tal como "Este cliente está habilitado a comprar o produto x?"

A identificação das entidades como parte deste padrão pode ser feita muitas vezes em diferentes níveis de abstração do código, em diferentes níveis de quantidade e, a partir da perspectiva de diferentes contextos. Por exemplo, você pode fazer uma verificação de análise em um cenário de criação de uma campanha de marketing e identificar o elemento cliente com vários elementos de dados do cliente, tais como nome e endereço, bem como vários comportamentos necessários, tais como a gestão dos dados de nome e endereço e a capacidade de avaliar o cliente baseado em algum algoritmo (uma aplicação deste padrão poderia estar abstraída do código, ser genérica e não ter nenhum contexto específico). Mais tarde, você poderia fazer uma verificação no mesmo cenário, aplicando um mecanismo arquitetural para acesso a banco de dados que divide o endereço fora do seu próprio elemento, mova a responsabilidade de armazenar e recuperar clientes para um novo elemento de controle, e identifique decisões específicas de banco de dados, tais como o uso de chaves primárias nas entidades. (Uma aplicação deste padrão poderia estar próxima ao código, ser detalhada e alinhada com um contexto de banco de dados).

Elementos de controle

Um elemento de controle gerencia o fluxo de interação do cenário. Um elemento de controle poderia gerenciar todo o comportamento de um cenário. Ou poderia gerenciar as interações entre um subconjunto dos elementos. O comportamento e as regras de negócios relativas às informações relevantes para o cenário devem ser atribuídos às entidades; os elementos de controlo são responsáveis apenas pelo fluxo do cenário.

CriarCampanhaDeMarketing é um exemplo de um elemento de controle para uma aplicação de serviço ao cliente. Este elemento de design responderia a certos elementos de fronteira do front-end e colaboraria com outras entidades, elementos de controle e elementos de fronteira de back-end para suportar a criação de uma campanha de marketing.

Assim como este exemplo de entidade, podem ser necessárias várias verificações para a identificação de elementos de controle. Uma primeira verificação poderia ser uma verificação de análise que identifica um elemento de controle para um cenário, com comportamento para se certificar que o design pode suportar o fluxo de eventos. Uma verificação posterior poderia encontrar controles para gerenciar colaborações reutilizáveis de elementos de baixo nível que irão se associar a uma unidade de código específica a ser escrita.

Elementos de fronteira

Um elemento de fronteira está na periferia de um sistema ou subsistema, mas pertence a ele. Para qualquer cenário sendo considerado, em todo o sistema ou em um subsistema, alguns elementos de fronteira serão elementos "front-end" que aceitam entradas de fora da área que está sendo projetada, e outros elementos serão "back-end", que gerenciam a comunicação para suportar elementos que estejam fora do sistema ou subsistema.

Dois exemplos de elementos de fronteira para um aplicativo de serviço ao cliente podem ser o front-end FormulárioDeCampanhaDeMarketing e o back-end SistemaDeOrçamento. O FormulárioDeCampanhaDeMarketing gerenciaria a troca de informações entre o usuário e o sistema, e o SistemaDeOrçamento gerenciaria a troca de informações entre o sistema e um sistema externo que gerencie orçamentos.

Uma verificação de análise poderia identificar um elemento de fronteira para cada parte externa relevante a um cenário. Posteriormente, elas poderiam ser subdivididas em vários elementos de fronteira ou pequenas comunidades compostas por elementos colaboradores de todos os três estereótipos.

Percorrendo o cenário

Você pode percorrer um cenário iniciado por algo fora dos limites do sistema ou subsistema que está sendo projetado e distribuir a responsabilidade para executar o comportamento suportando o cenário para os elementos identificados de cada tipo. Os elementos de design apropriados, responsáveis por cada ação no cenário, estarão de acordo com o que foi descrito na definição de cada tipo de elemento descrito aqui anteriormente.

Além de identificar o comportamento necessário para executar o cenário, a iniciação deste comportamento de elementos de design para elementos de design identifica os relacionamentos necessários. Existem certos relacionamentos adequados entre os elementos participantes. Um elemento pode comunicar-se com outros elementos do mesmo tipo. Os elementos de controle podem se comunicar com cada um dos outros dois tipos, mas os elementos entidade e fronteira não devem se comunicar diretamente.

Esta tabela mostra as ligações adequadas entre os elementos de design.

Entidade
Fronteira
Controle
Entidade
X
X
Fronteira
X
Controle
X
X
X

Ao aplicar este padrão, você pode criar um design robusto que identifica os elementos, o comportamento e os relacionamentos necessários para suportar um cenário.