ผมอยู่ในขั้นตอนของการพยายามที่จะโท C # ดังนั้นฉันอ่านรหัสผ่าน Adaptive C #โดยแกรี่แมคลีนฮอลล์
เขาเขียนเกี่ยวกับรูปแบบและรูปแบบการต่อต้าน ในการใช้งานกับส่วนต่อประสานเขาเขียนต่อไปนี้:
นักพัฒนาที่ยังใหม่กับแนวคิดของการเขียนโปรแกรมไปยังอินเทอร์เฟซมักมีปัญหาในการปล่อยสิ่งที่อยู่เบื้องหลังอินเทอร์เฟซ
ณ เวลารวบรวมไคลเอนต์ของอินเทอร์เฟซใด ๆ ควรมีความคิดที่ไม่มีการใช้งานของอินเทอร์เฟซที่ใช้ ความรู้ดังกล่าวสามารถนำไปสู่ข้อสันนิษฐานที่ไม่ถูกต้องซึ่งทำให้คู่ลูกค้าใช้งานอินเทอร์เฟซเฉพาะ
ลองนึกภาพตัวอย่างทั่วไปที่คลาสต้องการบันทึกเรกคอร์ดในที่เก็บข้อมูลถาวร ในการทำเช่นนั้นจะมอบสิทธิ์อย่างถูกต้องให้กับส่วนต่อประสานซึ่งซ่อนรายละเอียดของกลไกการจัดเก็บข้อมูลถาวรที่ใช้ อย่างไรก็ตามมันจะไม่ถูกต้องที่จะตั้งสมมติฐานใด ๆ เกี่ยวกับการใช้งานของอินเตอร์เฟซที่ถูกใช้ในเวลาทำงาน ยกตัวอย่างเช่นการหล่ออ้างอิงอินเตอร์เฟซในการดำเนินการใด ๆ ที่เป็นเสมอความคิดที่ดี
อาจเป็นกำแพงภาษาหรือการขาดประสบการณ์ของฉัน แต่ฉันไม่เข้าใจความหมาย นี่คือสิ่งที่ฉันเข้าใจ:
ฉันมีโครงการสนุก ๆ เพื่อฝึก C # ที่นั่นฉันมีชั้นเรียน:
public class SomeClass...
คลาสนี้ถูกใช้ในหลายสถานที่ ในขณะที่เรียนรู้ C # ฉันอ่านว่ามันเป็นนามธรรมที่ดีกว่าด้วยส่วนต่อประสานดังนั้นฉันจึงทำสิ่งต่อไปนี้
public interface ISomeClass <- Here I made a "contract" of all the public methods and properties SomeClass needs to have.
public class SomeClass : ISomeClass <- Same as before. All implementation here.
ดังนั้นฉันจึงไปอ้างอิงคลาสทั้งหมดและแทนที่ด้วย ISomeClass
ยกเว้นในการก่อสร้างที่ฉันเขียน:
ISomeClass myClass = new SomeClass();
ฉันเข้าใจถูกต้องไหมว่านี่ผิด ถ้าใช่ทำไมเป็นเช่นนั้นและฉันควรทำอย่างไร
ISomeClass myClass = new SomeClass();
ถ้าคุณหมายถึงจริงๆนั่นคือการเรียกซ้ำในคอนสตรัคเตอร์ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการหวังว่าคุณหมายถึงใน" การก่อสร้าง "นั่นคือการจัดสรรบางทีอาจจะไม่ใช่ ?
ISomeClass
) แต่ก็ยังง่ายที่จะทำให้การเชื่อมต่อที่กว้างเกินไปซึ่งมันเป็นไปไม่ได้ที่จะเขียนโค้ดที่เป็นประโยชน์กับจุดที่ตัวเลือกเท่านั้น คือการคิดใหม่อินเทอร์เฟซและเขียนรหัสใหม่หรือดาวน์ไลท์