MVC, UI mimarisi olan Endişelerin Ayrılmasında bir alıştırmadır . Sunumun içerikten ayrılmaması nedeniyle kullanıcı arayüzlerinde meydana gelebilecek karmaşıklığı düzeltmenin bir yoludur .
Teoride, tüm nesneler içerdikleri veriler üzerinde çalışan davranışlara sahip olabilir ve bu veriler ve davranış kapsüllenmiş kalır . Uygulamada, belirli bir OOP nesnesi, verisine karşılık gelen bir mantığa sahip olabilir veya olmayabilir veya hiç bir mantığa sahip olmayabilir ( örneğin, bir Veri Aktarım Nesnesi ).
MVC'de iş mantığı denetleyiciye değil modeline gider. Kontrolör, Görünüm ile Modeli birbirine yapıştırmak için gerçekten sadece bir adımdır. Yani modelde aynı yerde veri ve davranış olabilir.
Ancak bu düzenleme bile katı veri / davranış kaynaşmasını garanti etmemektedir. Yalnızca veri içeren nesneler, yalnızca mantığı içeren diğer sınıflar tarafından çalıştırılabilir ve bu, OOP'nin tamamen kabul edilebilir bir kullanımıdır.
Size özel bir örnek vereceğim. Bu biraz tartışmalı, ancak diyelim ki bir Currency
nesneniz var ve bu nesnenin dolara sabitlenmiş herhangi bir para biriminde kendini temsil etme yeteneği var. Yani gibi yöntemler olurdu:
public decimal Yen { get { return // dollars to yen; } }
public decimal Sterling { get { return // dollars to sterling; } }
public decimal Euro { get { return // dollars to euro; } }
... ve bu davranış, Para birimi nesnesiyle kapsüllenir.
Ancak para bir hesaptan diğerine para transferi yapmak ya da biraz para yatırmak istersem ne olur? Bu davranış aynı zamanda Para Birimi nesnesinde de kapsanır mı? Hayır olmaz. Cüzdanınızdaki para, cüzdanınızdan banka hesabınıza geçemez; Bu parayı hesabınıza aktarmaya yardımcı olması için bir veya daha fazla acenteye (bir para çekme veya ATM) ihtiyacınız vardır.
Böylece bu davranış bir Teller
nesnenin içine alınacak Currency
ve Account
girişler olarak kabul edecek ve nesneleri kabul edecektir , ancak Transaction
giriş nesnelerinin işlenmesine yardımcı olmak için belki biraz yerel durum (veya bir nesne) dışında herhangi bir veri içermeyecekti .