Ser capaz de reutilizar a funcionalidade sob diferentes interfaces (por exemplo, GUI vs CLI vs REST) nem sempre é necessário, mas é bom ter e ativar reutilização serendipitous para um sistema, como outras pessoas encontram novas maneiras de interagir com ele.
Isso tem algumas desvantagens que precisam ser ponderadas:
- Isso exigirá camadas adicionais de abstração (às vezes até camadas). Embora ter essas camadas seja uma boa prática de engenharia, elas têm um custo adicional no desenvolvimento, entendendo que isso pode não reduzir o esforço em outras áreas (por exemplo, manutenção, reutilização, testes), portanto vale a pena refletir um pouco sobre isso.
- O fluxo ideal para um meio pode ser horrível para os outros. Se a funcionalidade foi projetada para suportar uma GUI, ela pode ser muito falante para a web . Nem todas as funcionalidades valem a pena em todos os meios.
- Há uma armadilha na tentativa de definir um conversor genérico entre serviços e interface do usuário, para que se possa definir o contrato de serviço e derivar automaticamente (ou tanto quanto possível) a interface do usuário para todas as mídias. Muitos projetos perderam muito esforço tentando criar essas estruturas e adicionando todas as personalizações possíveis à medida que os requisitos mudavam.
Dito isto, na minha experiência, implementar essas camadas sempre acabava pagando o esforço. Em alguns casos, consegui implantar sistemas a tempo, pois acabávamos tendo que trocar a mídia (por exemplo, da integração dos Serviços Web para a interface do usuário) algumas semanas antes da data de vencimento.