Como devo incluir modelos de terceiros no meu modelo de domínio?

5

Atualmente, estou tentando projetar um pequeno aplicativo usando o Design dirigido por domínio, mas infelizmente ainda não entendi o conceito. Deixe-me tentar explicar isso da forma mais clara possível.

public interface IMyDomainRepository
{
    void Add(IAnInterfaceFromAThirdParty element);
}

A interface acima é definida no meu modelo de domínio e isso será usado em um projeto diferente chamado ThirdPartyImplementionVersionX .

Agora, IAnInterfaceFromAThirdParty não está definido no meu modelo de domínio, mas vem da minha biblioteca de terceiros.

Eu poderia criar uma classe / interface no meu modelo de domínio que implementa as mesmas propriedades e métodos da interface IAnInterfaceFromAThirdParty , mas essa interface tem 20 métodos definidos, tornando difícil a implementação da mesma lógica.

Este é o caminho a percorrer ou estou faltando alguma coisa?

    
por thomasvdb 05.02.2012 / 13:48
fonte

2 respostas

6

Um componente de terceiros tem seu próprio modelo expresso em seu próprio idioma. Além disso, geralmente o componente de terceiros trata de um problema de propósito geral que normalmente é uma parte do problema mais específico do contexto que você está tentando resolver.

A primeira coisa a fazer é estar ciente de que seu modelo e o terceiro são diferentes e formam dois contextos limitados . Depois de esclarecer isso, você pode escolher a estratégia que deseja aplicar ao lidar com o componente de terceiros:

  • Proteja seu modelo com uma camada anticorrupção , mantendo assim seu modelo fisicamente separado do terceiro, colocando uma estrutura semelhante a um adaptador no meio. Isso permite uma modelagem sofisticada em seu domínio sem comprometer o modelo externo.
  • Adira ao modelo externo (o padrão aqui é conhecido como conformist ): modelagem não muito sofisticada, mas que ainda pode ser viável uma decisão consciente, em partes não essenciais do sistema.

Não tente fazer as duas coisas: se você está procurando uma modelagem sofisticada, precisa proteger as bordas do seu domínio, sem vazar de domínios externos. Em outras palavras, a camada anticorrupção tende a ser a escolha preferida.

No exemplo que você está trazendo, isso provavelmente acabaria na definição de interfaces em termos do idioma do seu domínio e dependeria das funcionalidades fornecidas pelo componente de terceiros somente no nível da implementação.

    
por 07.02.2012 / 12:17
fonte
1

Quando estou trabalhando com modelos de terceiros, geralmente, eu uso um adaptador e meus próprios modelos. O adaptador deve mapear os itens do terceiro para os meus modelos.

O problema por trás disso é que um assembly de terceiros ou algo assim poderia mudar. O que você está fazendo quando muda de a para b?!? Considerando todas as linhas em que você implementou o modelo do produto de terceiros?

    
por 07.02.2012 / 13:02
fonte