MVC adalah latihan dalam Separation of Concerns , arsitektur UI. Ini adalah cara untuk menyelubungi kompleksitas yang dapat terjadi pada antarmuka pengguna karena presentasi tidak dipisahkan dari konten .
Secara teori, semua objek dapat memiliki perilaku yang beroperasi pada data yang dikandungnya, dan bahwa data dan perilaku tetap dienkapsulasi . Dalam praktiknya, objek OOP yang diberikan mungkin atau mungkin tidak memiliki logika yang sesuai dengan datanya, atau mungkin tidak memiliki logika sama sekali ( Objek Transfer Data , misalnya).
Dalam MVC, logika bisnis masuk dalam model, bukan pengontrol. Kontroler benar-benar hanya perantara untuk merekatkan View dan Model. Jadi dalam model, Anda dapat memiliki data dan perilaku di tempat yang sama.
Tetapi bahkan pengaturan itu tidak menjamin penyatuan data / perilaku yang ketat. Objek yang hanya berisi data dapat dioperasikan oleh kelas lain yang hanya mengandung logika, dan ini adalah penggunaan OOP yang bisa diterima.
Saya akan memberi Anda contoh spesifik. Ini agak dibuat-buat, tetapi katakanlah Anda memiliki Currency
objek, dan objek itu memiliki kemampuan untuk mewakili dirinya dalam mata uang apa pun yang tersedia, yang dipatok dengan dolar. Jadi Anda akan memiliki metode seperti:
public decimal Yen { get { return // dollars to yen; } }
public decimal Sterling { get { return // dollars to sterling; } }
public decimal Euro { get { return // dollars to euro; } }
... dan perilaku itu akan dienkapsulasi dengan objek Mata Uang.
Tetapi bagaimana jika saya ingin mentransfer mata uang dari satu akun ke akun lain, atau menyetor beberapa mata uang? Apakah perilaku itu juga akan dikemas dalam objek Mata Uang? Tidak, tidak akan. Uang di dompet Anda tidak dapat mentransfer sendiri dari dompet Anda ke rekening bank Anda; Anda memerlukan satu atau lebih agen (teller atau ATM) untuk membantu memasukkan uang itu ke akun Anda.
Sehingga perilaku itu akan dienkapsulasi menjadi Teller
objek, dan itu akan menerima Currency
dan Account
objek sebagai input, tetapi tidak akan berisi data apa pun itu sendiri, kecuali mungkin sedikit keadaan lokal (atau mungkin Transaction
objek) untuk membantu memproses objek input.