Model-View-Controller и Carrier-Rider-Mapper
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 07.06.06 11:01
Оценка:
Здравствуйте, 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. Сколько раз подряд нужно рухнуть с дуба, чтобы эти паттерны перепутать?
  •  
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.