Re[9]: Model-View-Controller в .Net
От: adontz Грузия http://adontz.wordpress.com/
Дата: 07.11.06 11:49
Оценка:
Здравствуйте, rsn81, Вы писали:

A>>Под интерфейсом я понимаю то что в .Net называется интерфейсом, так как примеры у тебя на C#. Если быть совсем уж точным, то конечно View должен мочь обновлятся. Другое дело как это сделать. В .Net модель может предоставлять набор XyzChanged событий, на которые все кому надо подпишутся. В каких-то других условиях возможно пришлось бы реализовать IView с методом UpdateXyz, но уж точно не стоит прегонять во View копию данных через SetXyz. Ещё повторюсь почему это плохо:

A>>
  • Мы вынуждены обощённо передавать во View все данные модели, либо реализовать систему оповещения какая часть данных нужна.
    A>>
  • Мы вынуждены извне поддерживать целостность данных во View.
    R>Так и не понял, в чем координальное различие оповещения из модели представления и оповещения из предъявителя представления? В любом варианте можно организовать оповещение об изменении любой части модели: в первом случае изменится интерфейс (или делегаты в C#) подписки представления на изменения модели, во втором случае интерфейс представления, по которому оно принимает события изменения модели от предъявителя.

    Простой пример, хотя и слегка надуманный.
    Пусть у нас в качестве данных двумерная точка (System.Drawing.Point если угодно). Так случилось, что меняются за раз обе её координаты. Пусть в начале координаты (3;7), а стали (5; 6). В MVC модель отшлёт виду оповещение CoordsChanged, вид прочтёт за раз обе координаты, и отрисует точку в новом положении. В MVP сложнее, оповещений нет. Но и сказать виду SetX(5); SetY(6) нельзя, потому что между этми вызовами вид отрисует точку по координатам (5;7). Надо делать BeginUpdate, SetX, SetY, EndUpdate. Кроме того виду может понадобится только X-координата. В MVC только она видом и считывается, в MVP информация о том что именно надо виду теряется и приходится перегонять туда обе координаты, даже если в этом нет необходимости.
    Понятно, что объект Point слишком мал и пример выглядит странно, но представьте себе что у нас более сложные композитные данные.
  • A journey of a thousand miles must begin with a single step © Lau Tsu
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.