ฉันสามารถใช้ mvc โดยไม่มี getters และ setters ได้หรือไม่

หากฉันไม่ต้องการเปิดเผยสถานะของวัตถุของฉัน แต่ฉันยังต้องแสดงมัน (ใน HTML, XML หรือ JSON สมมติว่า) ฉันจะทำสิ่งนั้นในสภาพแวดล้อม MVC ได้อย่างไร มันสมเหตุสมผลไหมที่จะมีวิธีการส่งออกที่ส่งออกวัตถุที่ไม่เปลี่ยนรูปที่ไม่เปลี่ยนรูป ("คลาสข้อมูล" หากคุณต้องการ) แล้วการเพิ่มวิธีการเรนเดอร์ที่พูดถึงอินเทอร์เฟซล่ะ? มีวิธีอื่นในการแก้ไขปัญหานี้หรือไม่?


person blockhead    schedule 26.07.2009    source แหล่งที่มา


คำตอบ (2)


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

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

person chaos    schedule 26.07.2009
comment
คำถามไม่ได้เกี่ยวกับการบันทึกงาน ในทุกสิ่งย่อมมีการแลกเปลี่ยน ฉันเชื่อว่าจะต้องมีข้อแลกเปลี่ยนระหว่างกรอบงาน RAD และระบบที่ออกแบบมาอย่างดีเสมอ กรอบงาน RAD จะไม่สร้างโค้ดที่สามารถบำรุงรักษาได้ดี แต่จะทำให้งานเสร็จเร็ว ฉันแค่พยายามแก้ไขปัญหาในรูปแบบที่บริสุทธิ์ โดยพยายามยึดติดกับหลักการ OO ให้มากที่สุดเพราะฉันเชื่อว่านั่นคือวิธีที่ดีที่สุดในการสร้างระบบที่บำรุงรักษาได้ - person blockhead; 26.07.2009
comment
เหตุผลในการสร้างระบบที่สามารถบำรุงรักษาได้ก็เพื่อประหยัดงานในการบำรุงรักษา หากคุณปล่อยให้ความบริสุทธิ์หลุดลอยไปจากแรงจูงใจในการช่วยงาน คุณจะจบลงด้วยระบบที่บริสุทธิ์อย่างน่าพิศวงซึ่งใช้งานได้อย่างน่าสยดสยอง มันเกิดขึ้นตลอดเวลา - person chaos; 26.07.2009

ประเด็นของการห่อหุ้มคือการซ่อนการดำเนินการ มี "สถานะ" ที่วัตถุอื่นจำเป็นต้องรู้ บางครั้ง วัตถุประสงค์ ทั้งหมดของวัตถุก็บอกสถานะดังกล่าว

ตัวอย่างเช่น มันค่อนข้างไร้ประโยชน์ที่จะมีอ็อบเจ็กต์ Defined Finite Automata ซึ่งไม่มีตัวรับไม่ว่ามันจะอยู่ในสถานะสุดท้ายหรือไม่ก็ตาม แต่การสรุปวิธีการจัดเก็บข้อมูลนั้นไว้ภายในนั้นมีประโยชน์อย่างยิ่ง

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

อย่างไรก็ตาม หากคุณสมบัติเหล่านี้เกี่ยวข้องกับการใช้งานจริงมากเกินไปและไม่เกี่ยวข้องกับอ็อบเจ็กต์มากนัก คุณควรพิจารณาลบ getters และ setters ดังกล่าวออก

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

person Daniel C. Sobral    schedule 26.07.2009
comment
สำหรับจุดสุดท้ายนั้น อินเทอร์เฟซจะดูแลวิธีการเรนเดอร์ วัตถุจะไม่ทราบอะไรไปมากกว่านั้นว่ามันมอบสถานะบางส่วนให้กับตัวเรนเดอร์ แต่ไม่รู้ว่าการเรนเดอร์กำลังทำอะไรกับมัน คำถามที่แท้จริงคือ ถือว่ามีการมีเพศสัมพันธ์มากเกินไป (บางทีวัตถุไม่ควรรู้ด้วยซ้ำว่าจำเป็นต้องแสดงผล) หรือฉันแค่บ้า - person blockhead; 26.07.2009