Инструменты пользователя

Инструменты сайта


bb:redbook:304

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
bb:redbook:304 [2016/03/31 15:55]
prospero78 создано
bb:redbook:304 [2018/01/14 19:26]
иван_денисов
Строка 2: Строка 2:
  
 ==== 1. Что такое документ ==== ==== 1. Что такое документ ====
-Как только среднестатистический человек слышит слово "документ" -- ему представляется лист бумаги формата А4 с заголовком, подписями, реквизитами, и желательно -- большой круглой синей печатью. Ну правда, а какие ещё документы бывают? Немного подумав, можно обратиться в архив, и из хранилища можно извлечь что-то вроде "Повести временных лет". В кожанном переплёте, с металлическим окладом, с красивыми рисунками. Документ? Для историков ещё какой! Спросим следователя, что для него документ? Он тут же достанет специальный пакет, в котором хранится гипсовый слепок обуви преступника. Вот для него настоящий документ! Таким образом, понятие документ вовсе не ограничивается листом бумаги формата А4. [↑] +Как только среднестатистический человек слышит слово "документ" -- ему представляется лист бумаги формата А4 с заголовком, подписями, реквизитами, и желательно -- большой круглой синей печатью. Ну правда, а какие ещё документы бывают? Немного подумав, можно обратиться в архив, и из хранилища можно извлечь что-то вроде "Повести временных лет". В кожаном переплёте, с металлическим окладом, с красивыми рисунками. Документ? Для историков ещё какой! Спросим следователя, что для него документ? Он тут же достанет специальный пакет, в котором хранится гипсовый слепок обуви преступника. Вот для него настоящий документ! Таким образом, понятие документ вовсе не ограничивается листом бумаги формата А4. 
-  + 
- +
 ==== 2. Документ BlackBox ==== ==== 2. Документ BlackBox ====
-Документ BlackBox может иметь вид какой угодно. Этот текст -- самый настоящий документ БлэкБокс. Код программы на Компонетном Паскале в БлэкБокс -- такой же документ. Даже текст программы внутри текста этого учебника -- тоже документ (обратите внимание: документ внутри документа!). Причём, на страницах этого учебника встречались такие документы, которые содержат и текст, и код, и изображения. При этом БлэкБокс не сходит с ума, и прекрасно понимает, что к чему относится, и что с этим делать. Последние два подчёркивания особо отмечают то, что документ БлэкБокса имеет более сложную структуру, чем печатный текст. [↑]+Документ BlackBox может иметь вид какой угодно. Этот текст -- самый настоящий документ БлэкБокс. Код программы на Компонентном Паскале в БлэкБокс -- такой же документ. Даже текст программы внутри текста этого учебника -- тоже документ (обратите внимание: документ внутри документа!). Причём, на страницах этого учебника встречались такие документы, которые содержат и текст, и код, и изображения. При этом БлэкБокс не сходит с ума, и прекрасно понимает, что к чему относится, и что с этим делать. Последние два подчёркивания особо отмечают то, что документ БлэкБокса имеет более сложную структуру, чем печатный текст.
   
   
Строка 12: Строка 12:
 Для начала обратимся к аналогии в виде дорожно-транспортной системы. Она нужна для того, чтобы автомобили могли успешно перемещаться. Автомобили бывают разные: большие, маленькие, тяжёлые, красные -- миллионы их. И если большие автомобили ещё могут проехать по бездорожью, то маленькие нет. А ездить только на больших атомобилях экономически нецелесообразно. Нужно делать транспортную сеть. Такая сеть представлена: улицами, проспектами, шоссе, площадками. Теперь, когда все автомобили обрели твёрдую поверхность под колёсами, можно ездить как попало. Ан нет! Автомобили будут постоянно сталкиваться, и толку от них не будет. Нужна дорожная разметка! Нанесли разделительные полосы, поставили знаки/светофоры, кое-где информационные (но не обязательные) указатели, и вроде можно жить. И этого оказывается мало! Нужно разработать непротиворечивые объемлющие правила дорожного движения, и добиться их исполнения ото всех участников дорожного движения. И вот только тогда, действительно, можно жить. Автомобиль -- это текст. Или файл. Или объект. Носитель информации. И сам по себе он уже полезен, но роль у него исключительно пассивная, и в этом смысле -- что-либо с ним сделать нельзя, и в гараже его не видно. Гараж, как и улица, как и проспект -- это то, что может представить объект. То, что может представить объект, может это сделать по разному. Например, модель "гоночный автомобиль" лучше будет смотреться на скоростном треке, а на пашне будет бесполезен. Модель "танк" будет нелепо смотреться на центральных улицах города, а на поле боя -- превосходно! Таким образом, мы плавно приходим к мысли, что представление объекта задаётся его моделью. Но автомобиль, который едет по дороге, фактически, изменяет своё состояние. Например, гоночный автомобиль быстро разгоняется, и тем самым меняет свою скорость и кинетическую энергию. А танк может быть перекрашен, в зависимости от времени года. И изменения эти происходят не как попало, а задаются в соответствии с логикой внеших условий. Этот набор задающих внешних условий в программостроении принято называть контроллер. Например, знак на дороге вынуждает повернуть автомобиль. Конечно, автомобиль, может развернуться и уехать -- его право, но если захочет поехать дальше, то обязан подчиниться требованиям дорожной  разметки. Для начала обратимся к аналогии в виде дорожно-транспортной системы. Она нужна для того, чтобы автомобили могли успешно перемещаться. Автомобили бывают разные: большие, маленькие, тяжёлые, красные -- миллионы их. И если большие автомобили ещё могут проехать по бездорожью, то маленькие нет. А ездить только на больших атомобилях экономически нецелесообразно. Нужно делать транспортную сеть. Такая сеть представлена: улицами, проспектами, шоссе, площадками. Теперь, когда все автомобили обрели твёрдую поверхность под колёсами, можно ездить как попало. Ан нет! Автомобили будут постоянно сталкиваться, и толку от них не будет. Нужна дорожная разметка! Нанесли разделительные полосы, поставили знаки/светофоры, кое-где информационные (но не обязательные) указатели, и вроде можно жить. И этого оказывается мало! Нужно разработать непротиворечивые объемлющие правила дорожного движения, и добиться их исполнения ото всех участников дорожного движения. И вот только тогда, действительно, можно жить. Автомобиль -- это текст. Или файл. Или объект. Носитель информации. И сам по себе он уже полезен, но роль у него исключительно пассивная, и в этом смысле -- что-либо с ним сделать нельзя, и в гараже его не видно. Гараж, как и улица, как и проспект -- это то, что может представить объект. То, что может представить объект, может это сделать по разному. Например, модель "гоночный автомобиль" лучше будет смотреться на скоростном треке, а на пашне будет бесполезен. Модель "танк" будет нелепо смотреться на центральных улицах города, а на поле боя -- превосходно! Таким образом, мы плавно приходим к мысли, что представление объекта задаётся его моделью. Но автомобиль, который едет по дороге, фактически, изменяет своё состояние. Например, гоночный автомобиль быстро разгоняется, и тем самым меняет свою скорость и кинетическую энергию. А танк может быть перекрашен, в зависимости от времени года. И изменения эти происходят не как попало, а задаются в соответствии с логикой внеших условий. Этот набор задающих внешних условий в программостроении принято называть контроллер. Например, знак на дороге вынуждает повернуть автомобиль. Конечно, автомобиль, может развернуться и уехать -- его право, но если захочет поехать дальше, то обязан подчиниться требованиям дорожной  разметки.
  
-Итак, дорожно-транспортная сеть помогает успешно перемещаться автомобилям, но в тоже время, и ограничивает (для их же пользы) возможные варианты действий. Это каркас. И чтобы он (каркас) успешно функционировал нужно иметь три типовых элемента по отношению к заполняющим его (каркас) объектам: представление, модель, контроллер.  [↑]+Итак, дорожно-транспортная сеть помогает успешно перемещаться автомобилям, но в тоже время, и ограничивает (для их же пользы) возможные варианты действий. Это каркас. И чтобы он (каркас) успешно функционировал нужно иметь три типовых элемента по отношению к заполняющим его (каркас) объектам: представление, модель, контроллер.
   
   
Строка 26: Строка 26:
 Представление, обычно последний уровень в этой концепции. Обычно, представление, зависит от аппаратных средств. Например, это может быть цветной монитор, или чёрно-белый принтер, или цветной (и довольно грубый) плоттер. В каждом случае представление своё. Должен ли знать файл с текстом, в какой кодировке работает операционная система, как его выравнивают, подгоняют, с какой точностью отображают, и должен ли знать текстовый файл о том, какие существуют в мире модели принтеров, или будут существовать, чтобы правильно отобразить себя на всех доступных поверхностях? Представление, обычно последний уровень в этой концепции. Обычно, представление, зависит от аппаратных средств. Например, это может быть цветной монитор, или чёрно-белый принтер, или цветной (и довольно грубый) плоттер. В каждом случае представление своё. Должен ли знать файл с текстом, в какой кодировке работает операционная система, как его выравнивают, подгоняют, с какой точностью отображают, и должен ли знать текстовый файл о том, какие существуют в мире модели принтеров, или будут существовать, чтобы правильно отобразить себя на всех доступных поверхностях?
  
-Таким образом, если схематчно представить эту концепцию подчинённости, то она будет выглядеть примерно  так: +Таким образом, если схематчно представить эту концепцию подчинённости, то она будет выглядеть примерно  так [1]
- Контроллер + 
-   Модель > < Представление +{{ :bb:redbook:mvc.png?nolink&600 |}}
- Объект >+
  
 Если модель ещё можно отнести к объекту (модель способна к изменениям), то представление изменить невозможно. В итоге, контроллер оказывается между молотом и наковальней, все кому не лень диктуют свои условия контроллеру, и он вынужден разруливать взаимные требования. Если текущий контроллер не может выполнить требования объекта, модели или представления, значит такой контроллер не сможет обеспечить представление объекта по модели и потребуется более подходящий контроллер. Если модель ещё можно отнести к объекту (модель способна к изменениям), то представление изменить невозможно. В итоге, контроллер оказывается между молотом и наковальней, все кому не лень диктуют свои условия контроллеру, и он вынужден разруливать взаимные требования. Если текущий контроллер не может выполнить требования объекта, модели или представления, значит такой контроллер не сможет обеспечить представление объекта по модели и потребуется более подходящий контроллер.
  
 Собственно, вот так и работает документ БлэкБокс. Документ содержит объект (например текст, код, картинку) с необходимыми атрибутами для успешного использования объекта (по сути, элементы модели), модели задают правила представления объекта (например, красный цвет заголовка, или жирный текст кнопки), контроллер документа подгоняет его под требования представления (окна, кнопки, меню и т. д.). Изменятся глобальные настройки системы -- контроллер опять подгонит объект по правилам модели к новому представлению. Собственно, вот так и работает документ БлэкБокс. Документ содержит объект (например текст, код, картинку) с необходимыми атрибутами для успешного использования объекта (по сути, элементы модели), модели задают правила представления объекта (например, красный цвет заголовка, или жирный текст кнопки), контроллер документа подгоняет его под требования представления (окна, кнопки, меню и т. д.). Изменятся глобальные настройки системы -- контроллер опять подгонит объект по правилам модели к новому представлению.
-FIXME --- //[[prospero.78.su@gmail.com|Валерий Шипков]] 2016/03/31 15:53//(* здесь бы добавить мысль про то, что контроллер яляется главным в системе *) [↑] +FIXME --- //[[prospero.78.su@gmail.com|Валерий Шипков]] 2016/03/31 15:53//(* здесь бы добавить мысль про то, что контроллер является главным в системе *) 
-  + 
- + 
 ==== 5. Выводы ==== ==== 5. Выводы ====
 Каркас обеспечивает существенные возможности для документов. Каркас вносит свою сложность в создаваемую систему. Но эта сложность многократно компенсируется тем, что каркас берёт ещё большую сложность на себя. В частности, документы БлэкБокса помогают программисту единообразно работать с текстами, переносить код между системами, организует работу наиболее рациональным способом. Локально снижаемая сложность приводит к более эффективной работе с объемлющими сложностями. [↑] Каркас обеспечивает существенные возможности для документов. Каркас вносит свою сложность в создаваемую систему. Но эта сложность многократно компенсируется тем, что каркас берёт ещё большую сложность на себя. В частности, документы БлэкБокса помогают программисту единообразно работать с текстами, переносить код между системами, организует работу наиболее рациональным способом. Локально снижаемая сложность приводит к более эффективной работе с объемлющими сложностями. [↑]
- + 
 + 
 +[1] Фримен Э. и др. Паттерны проектирования. Санкт-Петербург: Питер, 2011. 656 c. 
 [ ← Назад ] [ Вверх ↑ ] [ Далее → ]  [ ← Назад ] [ Вверх ↑ ] [ Далее → ]
bb/redbook/304.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)