จะใส่วิธีการที่ใช้ร่วมกันทั่วไปได้ที่ไหน


9

ฉันมีวิธีการมากมายที่ใช้กันทั่วไปทุกที่ ตอนนี้ codefile มีชื่อว่า globals เพื่อแสดงถึงความจริงที่ว่าพวกเขาเป็น ... ในความเป็นจริง ... ทั่วโลก

อย่างไรก็ตามฉันไม่ชอบสิ่งนี้

ฉันต้องการจัดกลุ่มสิ่งเหล่านี้เป็นคลาสและส่งผ่านอินเตอร์เฟส ฉันจะทำตัวอย่างเดียว แต่ฉันไม่ได้ตกหลุมพรางเดียวที่นี่

ก่อนอื่นฉันควรตั้งชื่อชั้นเรียนอย่างไร ฉันต้องการหลีกเลี่ยงชื่อกลมเพราะฉันกลัวว่าผู้ดูแลจะเข้าใจผิด

นอกจากนี้ฉันควรพิจารณาแยกชุดของวิธีการเพื่อให้พฤติกรรมสามารถเปลี่ยนแปลงและปรับได้อย่างไร

ชุดวิธีการประกอบด้วยสิ่งต่าง ๆ เช่น:

  • ตารางการแปลง
  • ปฏิสัมพันธ์ของคลิปบอร์ด
  • การจัดการแบบอักษรที่สร้างขึ้น
  • วิธีการวาดภาพทั่วไป
  • ให้ส่วนต่อประสานกับการเข้าถึงทรัพยากรที่ใช้บ่อย

นี่เป็นวิธีการบริสุทธิ์ที่ไม่ได้ช่วยรัฐหรือช่วยรัฐหรือเปล่า?
TheLQ

+1 สำหรับการไม่ตกหลุมพรางเดี่ยว
Caleb

@TheLQ พวกเขาไม่จำเป็นต้องบันทึกสถานะ แต่พวกเขาจะเก็บข้อมูล const (เช่นแผนภูมิการแปลง) เพื่อความสะดวก
Lee Louviere

คำตอบ:


4

เนมสเปซอาจเป็น [application].Common.Shared

คลาสสามารถตั้งชื่อได้:

ConversionLookup
ClipboardCommunication
FontManager
DrawingUtility

ฉันจะเลิกเรียนเพราะดูเหมือนว่าพวกเขาจะทำสิ่งที่แตกต่าง


1

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

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

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


1

ปกติฉันใส่สิ่งเหล่านี้ในชื่อชุดประกอบของตัวเองเช่น "foo.Common" ภายใต้เนมสเปซเช่น "foo.Common.Collections" หรือ "foo.common.UI" เป็นต้นจากนั้นฉันสามารถอ้างอิงแอสเซมบลีในโครงการใดก็ได้ ฉันต้องการพวกเขา.

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