ตาม SOLID ไม่เพียง แต่คุณควรสร้างส่วนต่อประสานและไม่เพียง แต่ควรอยู่ในไฟล์ที่แตกต่าง แต่ควรอยู่ในชุดประกอบอื่น
ทำไม? เนื่องจากการเปลี่ยนแปลงใด ๆ กับไฟล์ต้นฉบับที่คอมไพล์ในแอสเซมบลีต้องมีการคอมไพล์ใหม่ของแอสเซมบลีและการเปลี่ยนแปลงใด ๆ ในแอสเซมบลีต้อง recompilation ของแอสเซมบลีใด ๆ ดังนั้นหากเป้าหมายของคุณที่มีพื้นฐานมาจาก SOLID นั้นจะสามารถแทนที่การใช้งาน A ด้วยการนำไปใช้ B ได้ในขณะที่คลาส C ขึ้นอยู่กับส่วนต่อประสานที่ฉันไม่จำเป็นต้องทราบถึงความแตกต่าง ในมันไม่เปลี่ยนแปลงดังนั้นปกป้องประเพณี
"แต่มันก็แค่คอมไพล์ใหม่" ฉันได้ยินคุณประท้วง อาจเป็นไปได้ แต่ในแอพสมาร์ทโฟนซึ่งง่ายต่อแบนด์วิดธ์ข้อมูลของผู้ใช้ ดาวน์โหลดหนึ่งไบนารีที่เปลี่ยนแปลงหรือดาวน์โหลดไบนารีนั้นและอีกห้ารายการด้วยรหัสที่ขึ้นอยู่กับมัน ไม่ใช่ทุกโปรแกรมที่เขียนขึ้นเพื่อใช้งานโดยคอมพิวเตอร์เดสก์ท็อปบน LAN แม้ในกรณีที่แบนด์วิดท์และหน่วยความจำราคาถูกแพทช์รุ่นเล็กสามารถมีค่าเพราะมันสำคัญที่จะผลักดันให้ LAN ทั้งหมดผ่าน Active Directory หรือเลเยอร์การจัดการโดเมนที่คล้ายกัน ผู้ใช้ของคุณจะรอเพียงไม่กี่วินาทีเพื่อนำไปใช้ในครั้งถัดไปที่พวกเขาลงชื่อเข้าใช้แทนที่จะใช้เวลาสองสามนาทีเพื่อให้ติดตั้งใหม่ทั้งหมด ไม่ต้องพูดถึงว่าชุดประกอบที่น้อยลงที่ต้องทำการคอมไพล์ใหม่เมื่อสร้างโปรเจ็กต์ยิ่งสร้างได้เร็วขึ้นเท่านั้น
ตอนนี้ข้อจำกัดความรับผิดชอบ: นี่เป็นไปไม่ได้หรือเป็นไปได้ที่จะทำ วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการสร้างโครงการ "อินเทอร์เฟซ" แบบรวมศูนย์ สิ่งนี้มีข้อเสียของตัวเอง รหัสจะสามารถนำกลับมาใช้ใหม่ได้น้อยลงเนื่องจากโครงการอินเทอร์เฟซและโครงการติดตั้งจะต้องมีการอ้างอิงในแอปอื่น ๆ ที่ใช้เลเยอร์การคงอยู่หรือส่วนประกอบสำคัญอื่น ๆ ของแอปของคุณ คุณสามารถเอาชนะปัญหานั้นได้โดยแยกอินเทอร์เฟซเป็นแอสเซมบลีที่เชื่อมโยงกันอย่างแน่นหนามากขึ้น แต่จากนั้นคุณก็มีโครงการมากขึ้นในแอปของคุณซึ่งทำให้การสร้างแบบเต็มนั้นเจ็บปวดมาก กุญแจสำคัญคือความสมดุลและการบำรุงรักษาการออกแบบที่ควบคู่ โดยปกติคุณสามารถย้ายไฟล์ไปมาได้ตามต้องการดังนั้นเมื่อคุณเห็นว่าคลาสจะต้องมีการเปลี่ยนแปลงมากมายหรือการใช้งานอินเทอร์เฟซใหม่นั้นจำเป็นต้องมีเป็นประจำ (อาจจะเป็นการเชื่อมต่อกับซอฟต์แวร์รุ่นอื่นที่รองรับใหม่