Чи є якісь негативні побічні ефекти розщеплення великих модулів? [зачинено]


21

Я переглядав проект github і знайшов цей модуль, який налічує понад 10 тисяч рядків.

Чи поширена практика мати стільки коду в одному модулі?

Мені здається, що це слід розділити на кілька модулів. Можливо, по одному на кожен db двигун.

Яку вигоду отримує розробник від створення такого величезного модуля (окрім як "мати все це в одному місці") або який недолік від його розщеплення (крім "складності")?


Не 8k рядків - точно!
BЈовић

4
Це не розмір модуля, це те, як ви його використовуєте ...
jmq

4
Програми призначені для читання людьми і лише випадково для виконання комп'ютерів - Дональд Кнут.
Махмуд Хоссам

1
Модуль / підмодуль повинен робити одну конкретну справу. (Дурний) модуль для додавання 2 чисел у Python був би лише 2 рядками. Модуль зробити щось складніше, безумовно, буде більше. Я кажу, обмежте модуль / підмодуль лише однією функцією. Kepp це як ваш орієнтир.
c0da

Набагато важливіший момент для об'єктно-орієнтованого коду - це добре організована структура класу з розділенням проблем і надзвичайною сухістю. Розщеплення модуля - це найпростіша частина.
Акумен

Відповіді:


14

Що ви зіткнулися - це так званий " Бог об'єкт ", тому що він робить все або все знає. Біжіть від нього (якщо можете).

Існує не визначена кількість LOC на модуль, але це має бути щось, що полегшує перегляд коду та легко зрозуміти, що роблять методи. З мого особистого досвіду, якщо ваш модуль виходить за рамки 1k * , ви робите щось не так.

* Навіть лінійний модуль 1 к дуже великий.


9
Наведений приклад - це не Бог-об’єкт , це насправді ціла ієрархія класів, включаючи його doctest , що просто буває в одному файлі .py. Це може бути не ідеально, але є прагматичні причини, які ви можете зробити це, і як пропонує БілТор , сам код в іншому випадку досить добре структурований. Це, звичайно, не відповідає класичному визначенню об'єкта Бога , просто такого, який має досить складну роботу і має бути адаптованим до ряду різних сценаріїв.
Марк Бут

6

Це здається модулем, де типові обмеження розміру можуть не застосовуватися. Більшість функціональних можливостей у перших 2-х рядках коду та коментарів. У решті файлу, як видається, багато класів адаптерів та інших класів підтримки, які, здається, тісно пов'язані з модулем. В інших мовах класи будуть в окремих файлах розумного розміру.

Деякі рядки doc можуть бути корисними, але вони збільшать розмір і без того великого модуля. Код зрозумілий і зрозумілий з відповідними коментарями, де це необхідно.


5

Звичайно, фактичний "ліміт" залежить від вашого проекту та безлічі факторів.

Але я задзвонююсь з великим правилом: 200 рядків гідного Python. Тобто, жоден C або Java-код, написаний на Python, але хороший Python в Python.


1

Ого.

Я думаю, я не знаю повної відповіді на цю, але мені подобається думати як відповідь на заголовок "Наскільки великим повинен бути модуль Python?" як концепція Парнаса, що приховує таємницю. У цьому випадку модуль, здається, робить це належним чином (і ось такий великий секрет він ховає).

Пізніше я розкопував документи, які багато говорять про зв'язок та згуртованість. Можливо, наявність багато модулів db змусить занадто багато дзвінків між модулями, що призводить до збільшення того, що вважається поганою практикою, тобто меншої згуртованості та вищої зв'язку?

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

Ще одна річ, яку я помітив, - це те, що частина коду вказана як загальна, а решта dbs поширюється з неї. Я не програміст пітона, але, можливо, це могло б щось виправдати?

Отже, я не маю остаточної відповіді, але сподіваюся, що хтось також підкреслить ці моменти!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.