หากฉันไม่ต้องการเปิดเผยสถานะของวัตถุของฉัน แต่ฉันยังต้องแสดงมัน (ใน HTML, XML หรือ JSON สมมติว่า) ฉันจะทำสิ่งนั้นในสภาพแวดล้อม MVC ได้อย่างไร มันสมเหตุสมผลไหมที่จะมีวิธีการส่งออกที่ส่งออกวัตถุที่ไม่เปลี่ยนรูปที่ไม่เปลี่ยนรูป ("คลาสข้อมูล" หากคุณต้องการ) แล้วการเพิ่มวิธีการเรนเดอร์ที่พูดถึงอินเทอร์เฟซล่ะ? มีวิธีอื่นในการแก้ไขปัญหานี้หรือไม่?
ฉันสามารถใช้ mvc โดยไม่มี getters และ setters ได้หรือไม่
คำตอบ (2)
วิธีการเรนเดอร์มาใกล้กับสถานะที่ไม่เปิดเผยมากที่สุด อีกวิธีหนึ่ง (ผู้ใช้ Smarty รู้จักกันดี) คือการป้อนโครงสร้างข้อมูลที่ไม่ใช่ออบเจ็กต์ของมุมมองเพื่อใช้งาน
เป็นเรื่องที่ควรค่าแก่การถามว่าอะไรคือปัญหาที่นามธรรมและ/หรืออินเทอร์เฟซที่ซ่อนไว้ซึ่งพวกเขากำลังแก้ไขอยู่ หากคุณกำลังจะทำงานทั้งหมดนี้ IMO คุณควรตรวจสอบให้แน่ใจว่ามีงานบางอย่างที่ช่วยคุณประหยัดได้
ประเด็นของการห่อหุ้มคือการซ่อนการดำเนินการ มี "สถานะ" ที่วัตถุอื่นจำเป็นต้องรู้ บางครั้ง วัตถุประสงค์ ทั้งหมดของวัตถุก็บอกสถานะดังกล่าว
ตัวอย่างเช่น มันค่อนข้างไร้ประโยชน์ที่จะมีอ็อบเจ็กต์ Defined Finite Automata ซึ่งไม่มีตัวรับไม่ว่ามันจะอยู่ในสถานะสุดท้ายหรือไม่ก็ตาม แต่การสรุปวิธีการจัดเก็บข้อมูลนั้นไว้ภายในนั้นมีประโยชน์อย่างยิ่ง
ตอนนี้ เป้าหมายของ getters และ setters คือการจัดหาอินเทอร์เฟซให้กับ คุณสมบัติ ของสถานะของอ็อบเจ็กต์ ซึ่งอาจไม่เกี่ยวข้องกับวิธีการนำไปใช้จริง จริงอยู่ที่ว่าเวลาส่วนใหญ่คุณสมบัติเหล่านี้เป็นฟิลด์ในอ็อบเจ็กต์ และตัวรับและตัวตั้งค่าเป็นเพียงเชลล์ตื้น ในทางกลับกัน คุณมีอิสระในการเปลี่ยนแปลงการใช้งานภายใน เนื่องจาก getters และ setters จะรับรองความเข้ากันได้ของอินเทอร์เฟซ
อย่างไรก็ตาม หากคุณสมบัติเหล่านี้เกี่ยวข้องกับการใช้งานจริงมากเกินไปและไม่เกี่ยวข้องกับอ็อบเจ็กต์มากนัก คุณควรพิจารณาลบ getters และ setters ดังกล่าวออก
อย่างที่กล่าวไปแล้ว หากคุณต้องการแสดงบางสิ่งให้ผู้ใช้เห็น นี่คือคุณสมบัติที่อ็อบเจ็กต์อื่นจำเป็นต้องรู้ วัตถุไม่ควรเกี่ยวข้องกับวิธีการแสดงตัวเอง ด้วยเหตุผลหลายประการ หนึ่งในนั้นคือไม่สามารถรู้ว่าควรจะเรนเดอร์อย่างไรโดยไม่รู้ว่าแอปพลิเคชันใช้งานอย่างไร ซึ่งจะทำให้ไอทีรู้มากเกินไปเกี่ยวกับออบเจ็กต์อื่น ๆ