MVC เป็นแบบฝึกหัดในการแยกความกังวลสถาปัตยกรรม UI มันเป็นวิธีการจับกุมซับซ้อนที่สามารถเกิดขึ้นได้ในอินเตอร์เฟซผู้ใช้เนื่องจากการที่นำเสนอไม่ได้ถูกแยกออกจากเนื้อหา
ในทางทฤษฎีวัตถุทั้งหมดสามารถมีพฤติกรรมที่ดำเนินการเกี่ยวกับข้อมูลที่พวกเขามีและว่าข้อมูลและพฤติกรรมยังคงห่อหุ้ม ในทางปฏิบัติวัตถุ OOP ที่กำหนดอาจมีหรือไม่มีตรรกะที่สอดคล้องกับข้อมูลหรืออาจไม่มีตรรกะใด ๆ เลยก็ได้ (เช่นData Transfer Object )
ใน MVC ตรรกะทางธุรกิจจะอยู่ในรูปแบบไม่ใช่ตัวควบคุม คอนโทรลเลอร์เป็นเพียงตัวเชื่อมต่อระหว่าง View และ the Model เข้าด้วยกัน ดังนั้นในโมเดลคุณสามารถมีข้อมูลและพฤติกรรมได้ในที่เดียวกัน
แต่ถึงกระนั้นการจัดการก็ไม่รับประกันว่าจะมีการผสมผสานข้อมูล / พฤติกรรมอย่างเข้มงวด วัตถุที่มีข้อมูลเท่านั้นสามารถดำเนินการได้โดยคลาสอื่นที่มีตรรกะเท่านั้นและนี่เป็นการใช้ OOP ที่ยอมรับได้อย่างสมบูรณ์
ฉันจะให้ตัวอย่างที่เฉพาะเจาะจงแก่คุณ นี่คือการประดิษฐ์เล็กน้อย แต่สมมุติว่าคุณมีCurrency
วัตถุและวัตถุนั้นมีความสามารถในการแสดงตัวเองในสกุลเงินใด ๆ ที่มีอยู่ซึ่งถูกตรึงไว้กับดอลลาร์ ดังนั้นคุณจะมีวิธีการเช่น:
public decimal Yen { get { return // dollars to yen; } }
public decimal Sterling { get { return // dollars to sterling; } }
public decimal Euro { get { return // dollars to euro; } }
... และพฤติกรรมนั้นจะถูกห่อหุ้มด้วยวัตถุสกุลเงิน
แต่ถ้าฉันต้องการโอนเงินจากบัญชีหนึ่งไปยังอีกบัญชีหนึ่งหรือฝากบางสกุลเงินล่ะ? พฤติกรรมนั้นจะถูกห่อหุ้มในวัตถุสกุลเงินด้วยหรือไม่ ไม่มันจะไม่ เงินในกระเป๋าเงินของคุณไม่สามารถโอนออกจากกระเป๋าเงินของคุณไปยังบัญชีธนาคารของคุณได้ คุณต้องการตัวแทนอย่างน้อยหนึ่งราย (พนักงานรับเงินหรือ ATM) เพื่อช่วยในการรับเงินนั้นเข้าสู่บัญชีของคุณ
ดังนั้นพฤติกรรมนั้นจะถูกห่อหุ้มอยู่ในTeller
วัตถุและมันจะยอมรับCurrency
และAccount
วัตถุเป็นอินพุต แต่มันจะไม่ประกอบด้วยข้อมูลใด ๆ เองยกเว้นอาจจะเป็นบิตของสถานะท้องถิ่น (หรืออาจเป็นTransaction
วัตถุ) เพื่อช่วยในการประมวลผลวัตถุอินพุต