Здравствуйте, 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 слишком мал и пример выглядит странно, но представьте себе что у нас более сложные композитные данные.