Czy są jakieś negatywne skutki uboczne podziału dużych modułów? [Zamknięte]

21

Przeglądałem projekt github i znalazłem ten moduł, który ma ponad 10 tysięcy linii.

Czy powszechną praktyką jest posiadanie tak dużej ilości kodu w jednym module?

Wydaje mi się, że należy to podzielić na wiele modułów. Może jeden na każdy silnik db.

Jakie korzyści czerpie programista tworząc jeden taki ogromny moduł (inny niż „posiadanie wszystkiego w jednym miejscu”) lub jakie są wady jego podziału (innego niż „złożoność”)?

Mahmoud Hossam
źródło
Na pewno nie 8k linii!
BЈовић
4
To nie jest rozmiar modułu, to sposób, w jaki go używasz ...
jmq
4
Programy mają być odczytywane przez ludzi i tylko przypadkowo do uruchomienia przez komputery - Donald Knuth.
Mahmoud Hossam,
1
Moduł / submoduł powinien wykonywać jedną konkretną rzecz. (Głupiutki) moduł dodawania 2 liczb w Pythonie miałby tylko 2 linie. Moduł do zrobienia czegoś bardziej skomplikowanego na pewno będzie większy. Mówię, że ogranicz moduł / submoduł tylko do jednej funkcji. Kepp to jako twój punkt odniesienia.
c0da,
Zdecydowanie ważniejszym punktem dla kodu zorientowanego obiektowo jest posiadanie dobrze zorganizowanej struktury klas z oddzieleniem problemów i ekstremalną suchością. Podział modułu jest więc łatwą częścią.
Acumenus

Odpowiedzi:

14

To, co spotkałeś, to tak zwany „ obiekt Boga ”, ponieważ robi wszystko lub wie wszystko. Uciekaj od tego (jeśli możesz).

Nie ma określonej liczby LOC na moduł, ale powinno to być coś, co ułatwia przeglądanie kodu i łatwe zrozumienie, co robią metody. Z mojego osobistego doświadczenia, jeśli twój moduł wykracza poza 1k linii * , robisz coś złego.

* Nawet moduł liniowy 1k jest bardzo duży.

BЈовић
źródło
9
Podany przykład nie jest Boskim Obiektem , w rzeczywistości jest to hierarchia całej klasy, w tym jego doctest , który akurat znajduje się w jednym pliku .py. Może to nie być idealne, ale istnieją pragmatyczne powody, dla których warto to zrobić, a jak sugeruje BillThor , sam kod jest w inny sposób dość dobrze skonstruowany. Z pewnością nie pasuje do klasycznej definicji Boskiego obiektu , tylko takiej, która ma dość skomplikowane zadanie do wykonania i musi być przystosowana do wielu różnych scenariuszy.
Mark Booth
6

Wygląda na to, że jest to moduł, w którym typowe ograniczenia wielkości mogą nie mieć zastosowania. Większość funkcji znajduje się w pierwszych 2k wierszach kodu i komentarzy. Reszta pliku wydaje się zawierać wiele klas adapterów i innych klas wsparcia, które wydają się być ściśle powiązane z modułem. W innych językach klasy byłyby w osobnych plikach o rozsądnej wielkości.

Przydałoby się jeszcze kilka ciągów dokumentów, ale zwiększyłyby one rozmiar już dużego modułu. Kod jest przejrzysty i zrozumiały, z odpowiednimi komentarzami w razie potrzeby.

BillThor
źródło
5

Oczywiście rzeczywisty „limit” różni się w zależności od projektu i wielu czynników.

Ale wtrącam się z regułą: 200 linii przyzwoitego Pythona. Oznacza to, że nie napisano kodu C ani Java w Pythonie, ale dobry Python w Pythonie.

unperson325680
źródło
1

Łał.

Chyba nie znam pełnej odpowiedzi na to pytanie, ale lubię myśleć jako odpowiedź na tytułowe pytanie „Jak duży powinien być moduł Python?” jako koncepcja Parnasa, ukrywającego tajemnicę. W tym przypadku moduł wydaje się robić to poprawnie (i to taki wielki sekret, który ukrywa).

Później zajmuję się artykułami, które mówią dużo o sprzężeniu i spójności. Być może posiadanie wielu modułów db wymusiłoby zbyt wiele wywołań między modułami, co doprowadziłoby do zwiększenia tego, co uważane jest za złą praktykę, tj. Niższej spójności i wyższego sprzężenia?

Widziałem dane eksperymentalne mówiące o programistach decydujących się poświęcić dobre praktyki ze względu na prostotę i zrozumienie, niezależnie od tego, co nakazuje dobra praktyka. W rzeczywistości może również wystąpić konflikt między dobrymi praktykami. Powiedzmy, że wydajność zwykle nie uszczęśliwia ludzi, którzy później zajmują się konserwacją. Nie jestem pewien, jak poprawiłaby się czytelność w tym przypadku z tak dużym modułem.

Zauważyłem też, że część kodu jest określona jako ogólna, a reszta dbs jest z niego rozszerzona. Nie jestem programistą python, ale może to coś uzasadnia?

Nie mam więc ostatecznej odpowiedzi, ale mam nadzieję, że ktoś też podkreśli te kwestie!

Oeufcoque Penteano
źródło