MVC to ćwiczenie w zakresie separacji problemów , architektura interfejsu użytkownika. Jest to sposób na wyrównanie złożoności, która może wystąpić w interfejsach użytkownika, ponieważ prezentacja nie jest oddzielona od treści .
Teoretycznie wszystkie obiekty mogą mieć zachowanie, które działa na danych w nich zawartych , a dane i zachowanie pozostają zamknięte . W praktyce dany obiekt OOP może, ale nie musi mieć logiki odpowiadającej jego danym, lub może nie mieć żadnej logiki ( na przykład Obiekt Transferu Danych ).
W MVC logika biznesowa wchodzi w model, a nie w kontroler. Kontroler jest naprawdę tylko pośrednikiem, aby skleić widok i model. Tak więc w modelu możesz mieć dane i zachowanie w tym samym miejscu.
Ale nawet takie rozwiązanie nie gwarantuje ścisłego połączenia danych / zachowań. Obiekty zawierające tylko dane mogą być obsługiwane przez inne klasy zawierające tylko logikę, i jest to całkowicie dopuszczalne użycie OOP.
Dam ci konkretny przykład. Jest to nieco wymyślone, ale powiedzmy, że masz Currency
obiekt, który może reprezentować się w dowolnej dostępnej walucie powiązanej z dolarem. Więc masz metody takie jak:
public decimal Yen { get { return // dollars to yen; } }
public decimal Sterling { get { return // dollars to sterling; } }
public decimal Euro { get { return // dollars to euro; } }
... i takie zachowanie byłoby zawarte w obiekcie Currency.
Ale co, jeśli chcę przelać walutę z jednego konta na drugie lub wpłacić jakąś walutę? Czy takie zachowanie byłoby również zawarte w obiekcie Currency? Nie zrobiłby tego. Pieniądze z twojego portfela nie mogą przelać się z twojego portfela na twoje konto bankowe; potrzebujesz jednego lub więcej agentów (bankomat lub bankomat), aby pomóc w uzyskaniu tych pieniędzy na swoje konto.
Tak że zachowanie będzie zamknięta do Teller
obiektu, a byłoby to zaakceptować Currency
i Account
obiektów jak wejść, ale nie zawiera żadnych same dane, z wyjątkiem może trochę stanu miejscowego (a może Transaction
obiektowego), aby pomóc przetwarzać obiekty wejściowe.