Apakah ada efek samping negatif dari pemisahan modul besar? [Tutup]

21

Saya browsing proyek github dan menemukan modul ini yang memiliki lebih dari 10 ribu baris.

Apakah praktek umum untuk memiliki banyak kode dalam satu modul?

Menurut saya ini harus dibagi beberapa modul. Mungkin satu untuk setiap mesin db.

Apa manfaat yang didapat pengembang dari membuat satu modul besar seperti ini (selain "memiliki semuanya di satu tempat") atau kerugian apa yang ada dari membaginya (selain "kompleksitas")?

Mahmoud Hossam
sumber
Bukan 8k baris - pasti!
BЈовић
4
Ini bukan ukuran modul, melainkan bagaimana Anda menggunakannya ...
jmq
4
Program dimaksudkan untuk dibaca oleh manusia dan hanya untuk komputer yang dieksekusi - Donald Knuth.
Mahmoud Hossam
1
Modul / submodule seharusnya melakukan satu hal tertentu. Modul (konyol) untuk menambahkan 2 angka dalam Python akan menjadi 2 baris saja. Modul untuk melakukan sesuatu yang lebih rumit pasti akan lebih besar. Saya katakan membatasi modul / submodule hanya untuk satu fungsi. Kepp itu sebagai patokan Anda.
c0da
Sejauh ini poin yang lebih penting untuk kode berorientasi objek adalah memiliki struktur kelas yang terorganisir dengan baik dengan pemisahan kekhawatiran dan kekeringan ekstrim. Memisahkan modul adalah bagian yang mudah.
Acumenus

Jawaban:

14

Apa yang Anda temui adalah apa yang disebut " objek Dewa ", karena ia melakukan semua atau tahu semua. Lari darinya (jika bisa).

Tidak ada jumlah pasti LOC per modul, tetapi harus menjadi sesuatu yang membuatnya mudah untuk menelusuri kode dan dengan mudah memahami apa yang dilakukan metode. Dari pengalaman pribadi saya, jika modul Anda melampaui 1k baris * , Anda melakukan sesuatu yang salah.

* Bahkan modul garis 1k sangat besar.

BЈовић
sumber
9
Contoh yang diberikan bukan Obyek Tuhan , itu sebenarnya hierarki seluruh kelas, termasuk itu doctest , yang kebetulan berada dalam satu file .py. Ini mungkin tidak ideal, tetapi ada alasan pragmatis Anda mungkin ingin melakukan ini dan seperti yang BillThor sarankan, kode itu sendiri jika tidak cukup terstruktur dengan baik. Ini tentu saja tidak sesuai dengan definisi klasik dari Obyek Tuhan , hanya satu yang memiliki pekerjaan yang cukup rumit untuk dilakukan dan perlu disesuaikan dengan sejumlah skenario yang berbeda.
Mark Booth
6

Ini tampaknya merupakan modul di mana batas ukuran tipikal mungkin tidak berlaku. Mayoritas fungsi ada di baris 2k pertama dari kode dan komentar. Sisa file tampaknya banyak kelas adaptor dan kelas dukungan lainnya yang tampaknya tergabung erat dengan modul. Dalam bahasa lain, kelas-kelas akan berada dalam file terpisah dengan ukuran yang masuk akal.

Beberapa string dokumen lain mungkin berguna, tetapi mereka akan menambah ukuran modul yang sudah besar. Kode ini jelas dan cukup jelas dengan komentar yang sesuai jika diperlukan.

BillThor
sumber
5

Tentu saja "batas" aktual bervariasi menurut proyek Anda dan banyak faktor.

Tapi saya berpadu dengan aturan praktis: 200 baris Python yang layak. Artinya, tidak ada kode C atau Java yang ditulis dalam Python, tetapi Python yang baik dalam Python.

unperson325680
sumber
1

Wow.

Saya kira saya tidak tahu jawaban lengkap untuk yang satu ini, tapi saya suka berpikir sebagai jawaban untuk pertanyaan judul "Seberapa besar seharusnya modul Python?" sebagai konsep Parnas, menyembunyikan rahasia. Dalam hal ini modul tampaknya melakukan itu dengan benar (dan itu rahasia besar yang disembunyikannya).

Saya telah menggali ke dalam makalah kemudian yang banyak berbicara tentang kopling dan kohesi. Mungkin memiliki banyak modul db akan memaksa terlalu banyak panggilan antar modul sehingga meningkatkan apa yang dianggap praktik buruk, yaitu, kohesi yang lebih rendah dan kopling yang lebih tinggi?

Saya telah melihat data eksperimental berbicara tentang pemrogram memutuskan untuk mengorbankan praktik yang baik demi kesederhanaan dan pemahaman meskipun apa pun praktik yang baik menentukan. Bahkan, mungkin ada konflik antara praktik yang baik juga. Katakanlah, kinerja biasanya tidak membuat orang yang melakukan pemeliharaan bahagia nanti. Saya tidak begitu yakin bagaimana keterbacaan akan ditingkatkan dalam hal ini dengan modul sebesar itu.

Hal lain yang saya perhatikan adalah bahwa bagian dari kode dinyatakan sebagai generik dan sisa dbs diperluas darinya. Saya bukan programmer python, tapi mungkin ini bisa membenarkan sesuatu?

Jadi, saya tidak punya jawaban final, tapi saya harap seseorang juga menyoroti poin-poin ini!

Oeufcoque Penteano
sumber