จำนวนคลาสในเนมสเปซ - กลิ่นรหัส?


11

ฉันมีไลบรารี C # ที่ใช้งานได้หลายอย่าง มีเนมสเปซอยู่สองสามอันในห้องสมุดและฉันเพิ่งสังเกตว่าหนึ่งเนมสเปซมีคลาสค่อนข้างน้อย ฉันมักจะหลีกเลี่ยงการมีคลาสมากเกินไปในเนมสเปซเดียวเนื่องจากการจัดหมวดหมู่และเนื่องจากจิตใต้สำนึกฉันคิดว่ามันดู "สวยกว่า" เพื่อมีลำดับชั้นของเนมสเปซลึกกว่า

คำถามของฉันคือ: ไม่มีใครคิดว่ามันเป็น "กลิ่นรหัส" เมื่อ namespace มีหลายชั้น - แม้ว่าชั้นเรียนที่เกี่ยวข้องกับแต่ละอื่น ๆ ? คุณจะใช้ความพยายามอย่างมากในการค้นหาความแตกต่างในคลาสที่อนุญาตให้มีการจัดหมวดหมู่ย่อยหรือไม่?


8
ถ้าคลาสอยู่ใน namespace ที่กล่าวว่าไม่มี การออกแบบขึ้นอยู่กับธรรมชาติของมันดังนั้นมันยากที่จะพูดจริง ๆ และเป็นเรื่องของความชอบมากกว่าที่คุณได้ระบุไว้แล้ว
คริส

Whatecer StyleCop กล่าวว่าเป็นกฎหมาย ฉันเดิมพันมันจะไม่ชอบมัน
งาน

2
กำหนด "ค่อนข้างน้อย" 10? 100? 1000?
Eric King

คำตอบ:


7

ไม่จำเป็น. ถ้าคลาสทั้งหมดเป็นของประเภทที่กำหนดโดยเนมสเปซมันก็ใช้ได้

สิ่งที่คุณสามารถทำได้คือดูที่คลาสและสะท้อนความเป็นไปได้ของการรวมบางอย่างเข้าด้วยกัน อาจเป็นกลุ่มเล็ก ๆ ของคลาสเหล่านั้นที่สนับสนุนฟังก์ชัน "ครอบครัว" แต่มีการใช้งานแยกกันด้วยเหตุผลทางประวัติศาสตร์บางอย่าง ตอนนี้เมื่อผ่านไประยะเวลาที่เพียงพอแล้วก็อาจจะมีองค์ประกอบที่ดีกว่า


6

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

วิธีที่ง่ายที่สุดในการส่งต่อคือการใส่คลาสหลักทั้งหมดไว้ในเนมสเปซเดียวโดยซ่อนคลาสของสถานการณ์จำลองขั้นสูงไว้ใน sub-namespaces .NET Framework ทำเช่นนี้ตลอดเวลาดูSystem.CollectionsและSystem.Collections.Specializedเป็นตัวอย่างที่ดีของการปฏิบัตินี้

ด้วยเนมสเปซระดับแรกเพียงหนึ่งหรือสองรหัสของคุณจะง่ายขึ้นมากโดยมีคลาสขั้นสูงหรือแบบพิเศษซ่อนอยู่จนกว่าโปรแกรมเมอร์จะพร้อมที่จะค้นหา


3

ตราบใดที่พวกเขาอยู่ด้วยกันและเกี่ยวข้องซึ่งกันและกันไม่มีปัญหากับการมีคลาสมากเกินไปในเนมสเปซ

ไม่ว่าจะเป็นหรือไม่เป็นของชั้นในเป็นของตัวเองที่แยกต่างหาก namespace เป็นเรื่องของการตั้งค่าส่วนตัว

สิ่งที่ดูเป็นธรรมชาติมากขึ้น?

Parsers.XML.XmlParser.cs
Parsers.XmlParser.cs

ขึ้นอยู่กับว่าคุณชอบดูและเรียกใช้รหัสของคุณอย่างไร

โดยส่วนตัวฉันชอบเนมสเปซที่แยกจากกันเฉพาะเมื่อฉันรู้ว่าจะมีมากกว่าคลาสเดียวที่เป็นของมัน


0

นี่เป็นเรื่องปกติ เหตุผลหลักที่จะมีเนมสเปซคือการหลีกเลี่ยงการชนชื่อและหลังจากนี้เราควรคิดถึงขอบเขตตรรกะซึ่งเป็นเรื่องของการเลือกส่วนตัวมากกว่ากฎ แน่นอนว่ายินดีต้อนรับกฎบางอย่างที่เหมาะสม ไม่มีใครอยากเลื่อนดูคลาส 3k ~ 4k ในเนมสเปซเดียว

ตัวอย่างที่ดีคือstd namespace ใน C ++ Standard Library ซึ่งช่วยให้คุณสามารถแยกอัลกอริทึมของคุณเองออกจากมาตรฐาน


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