Existem efeitos colaterais negativos da divisão de módulos grandes? [fechadas]

21

Eu estava navegando em um projeto do github e encontrei este módulo com mais de 10 mil linhas.

É uma prática comum ter tanto código em um único módulo?

Parece-me que isso deve ser dividido em vários módulos. Talvez um para cada mecanismo de banco de dados.

Qual o benefício que o desenvolvedor obtém ao criar um módulo enorme como este (exceto "ter tudo em um só lugar") ou que desvantagem existe em dividi-lo (além de "complexidade")?

Mahmoud Hossam
fonte
Não são 8k linhas - com certeza!
22312
4
Não é o tamanho do módulo, é como você usá-lo ...
JMQ
4
Os programas são feitos para serem lidos por humanos e somente para serem executados por computadores - Donald Knuth.
Mahmoud Hossam
1
Um módulo / submódulo deve fazer uma coisa específica. Um módulo (bobo) para adicionar 2 números no Python seria de apenas 2 linhas. Um módulo para fazer algo mais complicado será definitivamente maior. Eu digo restringir o módulo / submódulo a apenas uma função. Kepp isso como sua referência.
C0da
De longe, o ponto mais importante para o código orientado a objetos é ter uma estrutura de classe bem organizada, com separação de preocupações e extrema secura. Dividir o módulo é a parte mais fácil.
Acumenus

Respostas:

14

O que você encontrou é o chamado " objeto de Deus ", porque faz tudo ou sabe tudo. Fuja dele (se você puder).

Não há um número definido de LOC por módulo, mas deve ser algo que facilite a navegação no código e a compreensão do que os métodos estão fazendo. Da minha experiência pessoal, se o seu módulo ultrapassa 1k linhas * , você está fazendo algo errado.

* Mesmo um módulo de linha de 1k é muito grande.

BЈовић
fonte
9
O exemplo dado não é um Objeto Divino , na verdade é uma hierarquia de classe inteira, incluindo o doctest , que acontece em um único arquivo .py. Isso pode não ser o ideal, mas existem razões pragmáticas para você fazer isso e, como sugere BillThor , o código em si é razoavelmente bem estruturado. Certamente não se encaixa na definição clássica de um Objeto Divino , apenas uma que tem um trabalho bastante complexo a ser feito e precisa ser adaptável a vários cenários diferentes.
Mark Booth
6

Este parece ser um módulo em que limites de tamanho típicos podem não se aplicar. A maioria das funcionalidades está nas primeiras 2k linhas de código e comentários. O restante do arquivo parece conter muitas classes de adaptadores e outras classes de suporte que parecem estar fortemente acopladas ao módulo. Em outros idiomas, as classes estariam em arquivos separados de tamanho razoável.

Mais algumas seqüências de documentos podem ser úteis, mas aumentariam o tamanho de um módulo já grande. O código é claro e autoexplicativo, com comentários apropriados, quando necessário.

BillThor
fonte
5

É claro que o "limite" real varia de acordo com o seu projeto e com vários fatores.

Mas eu concordo com uma regra prática: 200 linhas de Python decente. Ou seja, nenhum código C ou Java escrito em Python, mas um bom Python em Python.

unperson325680
fonte
1

Uau.

Acho que não sei a resposta completa para essa, mas gosto de pensar como resposta à pergunta do título "Qual o tamanho de um módulo Python?" como o conceito de Parnas, escondendo um segredo. Nesse caso, o módulo parece fazer isso corretamente (e esse é um grande segredo que oculta).

Mais tarde, estive pesquisando documentos que falam muito sobre acoplamento e coesão. Talvez o fato de ter muitos módulos de banco de dados force muitas chamadas entre os módulos, aumentando o que é considerado uma prática ruim, ou seja, menor coesão e maior acoplamento?

Eu já vi dados experimentais falando sobre programadores que decidem sacrificar as boas práticas por uma questão de simplicidade e compreensão, apesar do que as boas práticas determinam. De fato, também pode haver um conflito entre boas práticas. Digamos, o desempenho geralmente não deixa as pessoas que fazem manutenção felizes mais tarde. Não tenho muita certeza de como a legibilidade seria melhorada neste caso com um módulo tão grande.

Outra coisa que notei é que parte do código é declarada como genérica e o restante dos dbs são estendidos. Eu não sou um programador python, mas talvez isso justifique alguma coisa?

Portanto, não tenho uma resposta final, mas espero que alguém destaque esses pontos também!

Oeufcoque Penteano
fonte