มีผลข้างเคียงด้านลบของการแยกโมดูลขนาดใหญ่หรือไม่? [ปิด]


21

ฉันกำลังดูโครงการ github และพบโมดูลนี้ซึ่งมีมากกว่า 10,000 บรรทัด

เป็นเรื่องธรรมดาที่จะมีรหัสมากในโมดูลเดียวหรือไม่?

สำหรับฉันแล้วดูเหมือนว่าสิ่งนี้ควรจะแยกออกเป็นหลายโมดูล อาจเป็นหนึ่งสำหรับเครื่องยนต์ db แต่ละตัว

นักพัฒนาได้รับประโยชน์อะไรจากการสร้างโมดูลขนาดใหญ่หนึ่งเช่นนี้ (นอกเหนือจาก "มีทั้งหมดในที่เดียว") หรือมีข้อเสียอะไรจากการแยกมันออกมา (นอกเหนือจาก "ความซับซ้อน")


ไม่ใช่สาย 8k - แน่นอน!
BЈовић

4
ไม่ใช่ขนาดของโมดูลมันเป็นวิธีการใช้งานของคุณ ...
jmq

4
โปรแกรมมีวัตถุประสงค์เพื่อให้มนุษย์อ่านได้และมีเพียงคอมพิวเตอร์เท่านั้นที่สามารถดำเนินการได้ - Donald Knuth
Mahmoud Hossam

1
โมดูล / submodule ควรทำสิ่งใดสิ่งหนึ่งโดยเฉพาะ โมดูล (โง่) เพื่อเพิ่ม 2 ตัวเลขใน Python จะเป็น 2 บรรทัดเท่านั้น โมดูลที่จะทำสิ่งที่ซับซ้อนมากขึ้นจะใหญ่ขึ้นอย่างแน่นอน ฉันว่า จำกัด โมดูล / submodule เพียงหนึ่งฟังก์ชั่นเท่านั้น Kepp นั้นเป็นมาตรฐานของคุณ
c0da

จุดที่สำคัญยิ่งกว่าสำหรับโค้ดเชิงวัตถุก็คือการมีโครงสร้างคลาสที่มีการจัดระเบียบอย่างดีพร้อมการแยกความกังวลและความแห้งกร้านที่รุนแรง การแยกโมดูลนั้นเป็นส่วนที่ง่าย
คิวเมนตัส

คำตอบ:


14

สิ่งที่คุณพบคือสิ่งที่เรียกว่า " God object " เพราะมันทำทุกอย่างหรือรู้ทั้งหมด วิ่งหนีจากมัน (ถ้าคุณสามารถ)

ไม่มีจำนวน LOC ที่แน่นอนต่อโมดูล แต่ควรเป็นสิ่งที่ทำให้ง่ายต่อการเรียกดูรหัสและเข้าใจวิธีการที่กำลังทำอยู่ได้อย่างง่ายดาย จากประสบการณ์ส่วนตัวของฉันถ้าโมดูลของคุณเกินกว่า 1k บรรทัด*คุณกำลังทำอะไรผิดพลาด

* แม้แต่โมดูลบรรทัด 1k ก็มีขนาดใหญ่มาก


9
ตัวอย่างที่ให้มาไม่ใช่God Objectจริง ๆ แล้วมันเป็นลำดับชั้นของคลาสทั้งหมดรวมถึงdoctestที่เพิ่งเกิดขึ้นในไฟล์. py ไฟล์เดียว สิ่งนี้อาจไม่เหมาะ แต่มีเหตุผลในทางปฏิบัติที่คุณอาจต้องการทำเช่นนี้และตามที่BillThorแนะนำตัวรหัสนั้นมีโครงสร้างที่ดีพอสมควร แน่นอนว่ามันไม่เหมาะกับนิยามคลาสสิกของGod Objectเพียงอย่างเดียวที่มีงานที่ค่อนข้างซับซ้อนที่ต้องทำและจำเป็นต้องปรับให้เข้ากับสถานการณ์ที่แตกต่างกัน
Mark Booth

6

ดูเหมือนว่าจะเป็นโมดูลที่อาจใช้ไม่ได้กับขนาดที่ จำกัด ฟังก์ชั่นส่วนใหญ่อยู่ในโค้ดและความคิดเห็น 2k บรรทัดแรก ส่วนที่เหลือของไฟล์ดูเหมือนจะเป็นคลาสอะแดปเตอร์จำนวนมากและคลาสการสนับสนุนอื่น ๆ ซึ่งดูเหมือนจะเชื่อมโยงกับโมดูลอย่างแน่นหนา ในภาษาอื่น ๆ ชั้นเรียนจะอยู่ในไฟล์แยกขนาดที่เหมาะสม

สตริงเอกสารเพิ่มเติมอาจมีประโยชน์ แต่จะเพิ่มขนาดของโมดูลที่มีขนาดใหญ่อยู่แล้ว รหัสมีความชัดเจนและอธิบายตนเองพร้อมความคิดเห็นที่เหมาะสมตามความจำเป็น


5

แน่นอนว่า "ขีด จำกัด " ที่แท้จริงนั้นแตกต่างกันไปตามโครงการของคุณและปัจจัยมากมาย

แต่ฉันพูดสอดด้วยกฎง่ายๆ: Python ที่เหมาะสม200 บรรทัด นั่นคือไม่มีรหัส C หรือ Java เขียนใน Python แต่ Python ที่ดีใน Python


1

ว้าว.

ฉันเดาว่าฉันไม่รู้คำตอบแบบเต็มสำหรับคำถามนี้ แต่ฉันชอบคิดว่าเป็นคำตอบของคำถามไตเติ้ลว่า "โมดูล Python ควรมีขนาดใหญ่แค่ไหน" ตามแนวคิดของ Parnas ซ่อนความลับ ในกรณีนี้โมดูลดูเหมือนว่าจะทำอย่างถูกต้อง (และนั่นเป็นความลับที่ยิ่งใหญ่มันซ่อน)

ฉันขุดลงไปในเอกสารที่พูดถึงเรื่องการมีเพศสัมพันธ์และการทำงานร่วมกันมากมาย บางทีการมีโมดูล db จำนวนมากจะบังคับให้มีการโทรมากเกินไประหว่างโมดูลที่นำไปสู่การเพิ่มสิ่งที่ถือว่าเป็นการปฏิบัติที่ไม่ดีนั่นคือการทำงานร่วมกันที่ต่ำกว่าและการมีเพศสัมพันธ์ที่สูงขึ้น?

ฉันเคยเห็นข้อมูลเชิงทดลองเกี่ยวกับโปรแกรมเมอร์ที่ตัดสินใจเสียสละการปฏิบัติที่ดีเพื่อความเรียบง่ายและความเข้าใจแม้จะมีการฝึกฝนที่ดีก็ตาม ในความเป็นจริงอาจมีความขัดแย้งระหว่างการปฏิบัติที่ดีเช่นกัน บอกเด็ก ๆ ว่าการแสดงไม่ได้ทำให้คนที่บำรุงรักษามีความสุขในภายหลัง ฉันไม่แน่ใจว่าการปรับปรุงความชัดเจนในกรณีนี้ด้วยโมดูลขนาดใหญ่จะเป็นอย่างไร

อีกสิ่งหนึ่งที่ฉันสังเกตเห็นคือส่วนหนึ่งของรหัสระบุว่าเป็นแบบทั่วไปและส่วนที่เหลือของ dbs จะถูกขยายออกไปจากมัน ฉันไม่ได้เป็นโปรแกรมเมอร์ของงูหลาม แต่บางทีนี่อาจเป็นสิ่งที่สมเหตุสมผล

ดังนั้นฉันยังไม่มีคำตอบสุดท้าย แต่ฉันหวังว่าจะมีใครบางคนชี้ประเด็นเหล่านี้ด้วย!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.