Здравствуйте, WolfHound, Вы писали:
http://www.rsdn.ru/Forum/Message.aspx?mid=1938682&only=1Автор: WolfHound
Дата: 05.06.06
WH>>> Ну давай объясни мне чем Model-View-Controller отличается от Carrier-Rider-Mapper?
Т>> А что у них общего, кроме магического числа 3?
WH> А в чем разница?
Здравствуйте, Sinclair, Вы писали:
http://www.rsdn.ru/Forum/Message.aspx?mid=1931206&only=1Автор: Sinclair
Дата: 01.06.06
S>...они придумали "паттерн". Им было очень обидно, что паттерн MVC изобрели не они.
Не знаю
как можно спутать паттерны Model-View-Controller и Carrier-Rider-Mapper.
Model-View-Controller
Сама модель о вьюхах ничего не знает. Сущность паттерна MVC заключена в существовании некой обобщённой транспортной шины передачи сообщений от моделей к вьюхам. Тот кто изменил модель отправляет по этой транспортной шине broadcast сообщение о том, что он изменил такую-то модель и тот кто заинтересован пусть примет меры. Транспортная шина (сеть) знает какие вьюхи с какими моделями связаны и передаёт это сообщение кому следует.
Спускаясь на уровень синтаксического мышления:
DEFINITION Models;
TYPE
Model = POINTER TO ABSTRACT RECORD ... END;
Message = ABSTRACT RECORD ... END;
UpdateMsg = EXTENSIBLE RECORD (Message) END;
PROCEDURE Broadcast (model: Model; VAR msg: Message);
END Models.
Изменил модель model — вызови процедуру Models.Broadcast(model, myMsg) и сообщение myMsg будет доставлено тем вьюхам, которые связаны с model.
Carrier-Rider-Mapper
Carrier — это носитель (любой) информации (например: File, Socket, Document, Form, ... Server), которая может предоставляться одновременно нескольким клиентам.
Rider(ы) — это Reader или Writer — объекты считывающие или записывающие информацию в носитель. Носитель информации предоставляет доступ к хранимой внутри себя информации только посредством Rider-ов и ни как иначе. Rider-ы — это интерфейсы доступа к информации.
Mapper(ы) — это Scanner или Formatter — обёртки над Reader или Writer соответственно. Они осуществляют преобразование форматов потоков информации в удобные для клиентов форматы.
Спускаясь на уровень синтаксического мышления:
TYPE
Reader = POINTER TO ABSTRACT RECORD ... END;
Writer = POINTER TO ABSTRACT RECORD ... END;
Carrier = POINTER TO ABSTRACT RECORD
...
(c: Carrier) NewReader (): Reader, NEW, ABSTRACT;
(c: Carrier) NewWriter (): Writer, NEW, ABSTRACT;
...
END;
P. S. Сколько раз подряд нужно рухнуть с дуба, чтобы эти паттерны перепутать?