การพึ่งพามากเกินไปอาจบ่งบอกว่าคลาสตัวเองกำลังทำมากเกินไป เพื่อตรวจสอบว่ามันไม่ได้ทำมากเกินไป:
IDbContextFactory - สร้างบริบทสำหรับฐานข้อมูล
ตกลงเราอาจอยู่ในเลเยอร์ธุรกิจที่คลาสมีปฏิสัมพันธ์กับเลเยอร์การเข้าถึงข้อมูล ดูดี
IMapper - การแมปจากเอนทิตีกับโมเดลโดเมน
มันยากที่จะบอกอะไรโดยไม่มีภาพรวม อาจเป็นไปได้ว่าสถาปัตยกรรมผิดและควรทำการแมปโดยตรงจาก data access layer หรืออาจเป็นไปได้ว่าสถาปัตยกรรมนั้นสมบูรณ์แบบที่สุด ในทุกกรณีมันสมเหตุสมผลที่จะมีการพึ่งพาที่นี่
อีกทางเลือกหนึ่งคือการแบ่งชั้นเรียนออกเป็นสองชั้น: ด้านหนึ่งจัดการกับการจับคู่ส่วนอีกด้านหนึ่งจัดการกับตรรกะทางธุรกิจจริง สิ่งนี้จะสร้างชั้น de พฤตินัยซึ่งจะแยก BL เพิ่มเติมจาก DAL หากการแมปมีความซับซ้อนอาจเป็นความคิดที่ดี ในกรณีส่วนใหญ่มันจะเพิ่มความซับซ้อนที่ไร้ประโยชน์
IClock - บทคัดย่อ DateTime ตอนนี้จะช่วยในการทดสอบหน่วย
มันอาจจะไม่มีประโยชน์มากที่จะมีส่วนต่อประสาน (และคลาส) แยกต่างหากเพื่อให้ได้เวลาปัจจุบัน ฉันเพียงแค่ส่งผ่านDateTime.Now
ไปยังวิธีการที่ต้องการเวลาปัจจุบัน
ชั้นเรียนที่แยกต่างหากอาจสมเหตุสมผลถ้ามีข้อมูลอื่น ๆ เช่นเขตเวลาหรือช่วงวันที่เป็นต้น
IPerformanceFactory - วัดเวลาดำเนินการสำหรับวิธีการเฉพาะ
ดูประเด็นต่อไป
ILog - Log4net สำหรับการบันทึก
ฟังก์ชันการทำงานของ transcendant ดังกล่าวควรเป็นของเฟรมเวิร์กและไลบรารี่ที่แท้จริงควรสามารถใช้แทนกันได้และสามารถกำหนดค่าได้ที่รันไทม์ (เช่นผ่าน app.config ใน. NET)
น่าเสียดายที่นี่ไม่ใช่กรณี (ซึ่งยัง) ซึ่งให้คุณเลือกไลบรารีและติดกับมันหรือสร้างเลเยอร์นามธรรมเพื่อให้สามารถสลับไลบรารีได้ในภายหลังหากจำเป็น หากความตั้งใจของคุณโดยเฉพาะอย่างยิ่งที่จะเป็นอิสระจากการเลือกของห้องสมุดไปหามัน หากคุณค่อนข้างแน่ใจว่าคุณจะใช้ห้องสมุดต่อไปอีกหลายปีอย่าเพิ่มสิ่งที่เป็นนามธรรม
หากห้องสมุดมีความซับซ้อนเกินกว่าที่จะใช้รูปแบบซุ้มทำให้รู้สึก
ICollectionWrapperFactory - สร้างคอลเลกชัน (ที่ขยาย IEnumerable)
ฉันจะสมมติว่าสิ่งนี้สร้างโครงสร้างข้อมูลที่เฉพาะเจาะจงซึ่งใช้โดยตรรกะโดเมน ดูเหมือนว่าคลาสยูทิลิตี้ ให้ใช้หนึ่งคลาสต่อโครงสร้างข้อมูลด้วยตัวสร้างที่เกี่ยวข้องแทน หากตรรกะการเริ่มต้นซับซ้อนเล็กน้อยเพื่อให้พอดีกับตัวสร้างใช้วิธีการคงที่จากโรงงาน หากตรรกะมีความซับซ้อนมากขึ้นให้ใช้รูปแบบโรงงานหรือตัวสร้าง
IQueryFilterFactory - สร้างเคียวรีตามอินพุตที่จะเคียวรี db
ทำไมจึงไม่อยู่ในชั้นการเข้าถึงข้อมูล ทำไมถึงมีFilter
ชื่อ?
IIdentityHelper - ดึงผู้ใช้ที่เข้าสู่ระบบ
ฉันไม่แน่ใจว่าทำไมมีHelper
คำต่อท้าย ในทุกกรณีส่วนต่อท้ายอื่น ๆ จะไม่ชัดเจนเป็นพิเศษเช่นกัน ( IIdentityManager
?)
อย่างไรก็ตามมันเหมาะสมอย่างยิ่งที่จะมีการพึ่งพาที่นี่
IFaultFactory - สร้าง FaultExceptions ที่แตกต่างกัน (ฉันใช้ WCF)
ตรรกะนั้นซับซ้อนจนต้องใช้รูปแบบจากโรงงานหรือไม่? เหตุใดจึงต้องใช้การฉีดอ้างอิงถึง คุณจะสลับการสร้างข้อยกเว้นระหว่างรหัสการผลิตและการทดสอบหรือไม่ ทำไม?
ฉันจะพยายามที่จะ refactor throw new FaultException(...)
ที่เป็นที่เรียบง่าย หากข้อมูลทั่วโลกบางส่วนควรถูกเพิ่มลงในข้อยกเว้นทั้งหมดก่อนที่จะเผยแพร่ไปยังไคลเอนต์ WCF อาจมีกลไกที่คุณตรวจจับข้อยกเว้นที่ไม่สามารถจัดการได้และสามารถเปลี่ยนแปลงได้
การวัดคุณภาพโดยตัวเลขมักจะไม่ดีเท่าการชำระเงินด้วยบรรทัดของรหัสที่คุณเขียนต่อเดือน คุณอาจมีการพึ่งพาจำนวนมากในคลาสที่ออกแบบมาอย่างดีเนื่องจากคุณสามารถมีคลาสเส็งเคร็งโดยใช้การพึ่งพาเพียงเล็กน้อย
การพึ่งพาจำนวนมากทำให้ตรรกะยากขึ้น ถ้าลอจิกยากที่จะติดตามคลาสอาจทำมากเกินไปและควรแยก