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.