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ść”)?
python
code-quality
modules
Mahmoud Hossam
źródło
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło
Ł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!
źródło