O problema principal
Vendo o bom apoio mais modernas plataformas de programação tem para gerenciamento de pacotes (pense gem
, npm
, pip
, etc), faz sentido para projetar um aplicativo ou sistema ser composto por pacotes desenvolvidos internamente, de modo a promover e criar uma arquitetura flexível?
Exemplo
Um exemplo disso seria criar pacotes para acesso ao banco de dados, bem como para autenticação e outros componentes do sistema. Naturalmente, eles também usam pacotes externos. Em seguida, seu sistema importa e usa esses pacotes - em vez de incluir o código em sua própria base de código.
Considerações
Para mim, parece que isso promoveria a dissociação de código e ajudaria a manutenção, quase do tipo de aplicativo baseado na Web versus aplicativo de desktop (as atualizações são aplicadas quase automaticamente, base de código única para funcionalidade única etc.).
Parece um conceito de design racional e são? Isso é realmente usado como uma maneira padrão de estruturar aplicativos hoje?
fonte
Esta é uma boa ideia, apesar de tudo. Você precisará pensar em configurar um repositório interno de pacotes (geralmente chamado de "repositório de artefatos" no mundo Java ou "servidor pypi" no mundo Python), para manter os pacotes que não deseja ou não pode ' t liberar como código aberto.
Como o @pdr observou, esteja preparado para ter sua própria dependência , onde uma alteração em um pacote requer primeiro outra em outro pacote, e isso significa não apenas alterar uma linha de código, mas testá-la, possivelmente obtendo as alterações aceitas, construindo um release e enviando o release para o repositório de pacotes mencionado acima. E depois mudar o que você pretendia mudar.
A única receita que posso fornecer da minha experiência para tentar minimizar isso: não confie apenas em abstrair conceitos comuns de seus pacotes em um pacote "comum" ou "estrutura" . Isso pode parecer algo muito objetivo, mas levará a um pacote de monstros que precisa de mudanças e lançamentos frequentes e possivelmente contraditórios. Muito melhor, pense nas funcionalidades do seu sistema e crie um pacote auxiliar para cada uma delas, conforme descrito na sua pergunta.
Além disso, o principal benefício que você obterá é que seus aplicativos são isolados de (muitas) dependências, para que você possa trocá-los sem problemas.
fonte
common
pacote uma opção, mas, como você diz, pude vê-lo se tornando uma decisão "razoável" no futuro. Minha intenção era mais na linha de componentes do que no código - então, idealmente, você não deve ter muitos trechos de código que façam a mesma coisa em pacotes diferentes, porque eles devem fazer coisas diferentes. Eu diria que, se houver pontos em comum entre pacotes, esse tipo de repetição não violaria os bons princípios de programação, já que os projetos são, por definição, separados.