Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
|
Я тут придумал ситуацию которая сможет меня заставить поламать свой "правильный MVC". Надеюсь знатоки подскжут, как этого избежать.
Итак, предположим, что у нас есть ТаверДефенс. Каждой башне присваивается трофей за убиение противника (скальп, уши, зубы). В конце уровня все трофеи обналичиваются. Происходить это должно так: открывается окно, в котором все задействованые башни строятся в ряд, а перед ними ставится сундук с казной. Далее с каждой башни по очереди сыпится в сундук столько монет, сколько стоят ее трофеи, а потом звучит какая нибуть фраза типа "Гуд джоб!", "Вел доне!" или "Ух, блоод моней...". Когда все башны подоены появляется кнопка закрытия окна.
Лично мне на ум приходит умная самостоятельная вьюшка, которая принимает от модели текущее количество денег в казне и массив, с количеством элементов, равным количеству башен и каждый элемент обозначает количество заработаных башней денег. Таким образом модель занимается только важной работой (наблюдает за башнями и во время обналички трофеев расказывает кто сколько заработал). Что вид будет делать с этими данными ее не колышет. А вид действует по своему сценарию - сгребает монеты с башни и благодарит ее фразй, потом переходит к следующей. Завтра я передумаю и буду сгребать монеты со всех башен одновременно и это никак не отобразится на модели. Зато модель не знает сколько вся эта сценка должна длиться. И даже если посчитать сколько времени уйдет на сгребание всех монет, то все равно модели не извесно сколько длится звучание благодарственной фразы. По этому ей прийдется глубоко вдохнуть и ждать разрешения выдохнуть кнопку закрытия окна.
В результате мы имеем изящную, но зависимую модель и умный вид, который может легко и без вреда для окружающих менять свое поведение.
Если же следовать заветам MVC и делать модельку самостоятельной, тогда для реализации данной идеи ей прийдется обзавестись таймером; сделать себе шпаргалку с длительностью звуков благодарения; расчитать положение башен и сундука; расчитывать движение монеток от каждой башни к сундуку; решать каой же фразой поблагодарить солдат из башни за проделаную работу; требовать, чтобы кто нибуть произнес эту фразу, а самой в это время ждать с секундомером в руках, пока фраза будет произнесена (в надеже, что ее вообще хоть кто нибудь взялся озвучить). По завершению всех этих епилептических подергиваний модель, с чувством выполненого долга сможет потребовать кнопку закрытия окна. Печальная картина... Но зато теперь претензии к вьюшке минимальны. Ей вообще теперь не о чем думать - расказывай, что от модели услышала и все дела. Даже начального образования не нужно...
И на счет изменения в сценарии получения денег, теперь нам однозначно прийдется менять модель, а добавляя новые фичи получаем необходимость и вьюху кромсать.
А теперь очень жду, что мне подскажут, почему мой MVC такой некрасивый, а если он у вссех такой, то почему от него так тащатся?
|