Есть ли негативные побочные эффекты от разделения больших модулей? [закрыто]

21

Я просматривал проект GitHub и нашел этот модуль, который имеет более 10 тысяч строк.

Является ли обычной практикой иметь столько кода в одном модуле?

Мне кажется, что это должно быть разделено на несколько модулей. Может быть один для каждого двигателя дб.

Какую выгоду получает разработчик от создания такого огромного модуля, как этот (кроме «все в одном месте»), или какой минус от его разделения (кроме «сложности»)?

Махмуд Хоссам
источник
Не 8к строк - точно!
BЈовић
4
Это не размер модуля, а то, как вы его используете ...
jmq
4
Программы предназначены для чтения людьми и только для запуска компьютеров - Дональд Кнут.
Махмуд Хоссам
1
Модуль / подмодуль должен делать одну конкретную вещь. (Глупый) модуль для добавления 2 чисел в Python будет состоять только из 2 строк. Модуль для выполнения чего-то более сложного определенно будет больше. Я говорю ограничить модуль / субмодуль только одной функцией. Kepp это как ваш ориентир.
c0da
Безусловно, более важным моментом для объектно-ориентированного кода является хорошо организованная структура классов с разделением задач и чрезвычайной сухостью. Разделение модуля является легкой частью.
Acumenus

Ответы:

14

Вы столкнулись с так называемым « объектом Бога », потому что он делает все или знает все. Убегайте от него (если сможете).

Для каждого модуля не существует определенного числа LOC, но это должно быть то, что облегчает просмотр кода и позволяет легко понять, что делают методы. Исходя из моего личного опыта, если ваш модуль выходит за рамки 1 КБ * , вы делаете что-то не так.

* Даже линейный модуль 1 КБ очень большой.

BЈовић
источник
9
Приведенный пример - это не объект God , это фактически целая иерархия классов, в том числе и doctest , которая просто находится в одном файле .py. Это не может быть идеальным, но есть прагматичные причины, по которым вы можете захотеть сделать это, и, как предлагает BillThor , сам код достаточно хорошо структурирован. Это, конечно, не соответствует классическому определению Божественного Объекта , просто тот, который выполняет довольно сложную работу и должен быть адаптирован к ряду различных сценариев.
Марк Бут
6

Похоже, это модуль, где типичные ограничения по размеру могут не применяться. Большая часть функциональности находится в первых 2 тысячах строк кода и комментариев. Остальная часть файла, по-видимому, содержит множество классов адаптеров и других классов поддержки, которые, по-видимому, тесно связаны с модулем. На других языках классы будут в отдельных файлах разумного размера.

Еще несколько строк документации могут быть полезны, но они увеличат размер и без того большого модуля. Код ясен и понятен с соответствующими комментариями, где это необходимо.

BillThor
источник
5

Конечно, фактический «предел» зависит от вашего проекта и множества факторов.

Но я согласен с эмпирическим правилом: 200 строк приличного Python. То есть, нет кода C или Java, написанного на Python, но хороший Python на Python.

unperson325680
источник
1

Вау.

Думаю, я не знаю полного ответа на этот вопрос, но мне нравится думать как ответ на заглавный вопрос "Насколько большим должен быть модуль Python?" как понятие парны, скрывающее секрет. В этом случае модуль, кажется, делает это правильно (и это такой большой секрет, который он скрывает).

Позже я копался в бумагах, в которых много говорится о связях и сплоченности. Может быть, наличие большого количества модулей БД вызовет слишком много вызовов между модулями, что приведет к увеличению того, что считается плохой практикой, то есть к снижению когезии и повышению связи?

Я видел экспериментальные данные, говорящие о том, что программисты решили пожертвовать хорошей практикой ради простоты и понимания, несмотря на то, что диктует хорошая практика. На самом деле, между хорошей практикой также может возникнуть конфликт. Скажем, производительность обычно не делает людей, которые занимаются техническим обслуживанием, счастливыми позже. Я не совсем уверен, как будет улучшена разборчивость в этом случае с таким большим модулем.

Еще одна вещь, которую я заметил, заключается в том, что часть кода указана как общая, а остальные базы данных расширены. Я не программист на Python, но, возможно, это могло бы чем-то оправдать?

Итак, у меня нет окончательного ответа, но я надеюсь, что кто-то также выделит эти моменты!

Oeufcoque Penteano
источник