Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по циклу лабораторных работ Технологии разработки программного обеспечения .doc
Скачиваний:
204
Добавлен:
06.03.2016
Размер:
3.8 Mб
Скачать

Преимущества

  1. Улучшение условий для повторного использования компонентов. Применение этого шаблона обеспечивает обработку процессов предметной области на уровне реализации объектов, а не на уровне интерфейса. Обязанности контроллера могут быть технически реализованы в объектах интерфейса, однако в этом случае программный код и логические решения, относящиеся к процессам предметной области, будут жестко связаны с элементами интерфейса, например с окнами. При этом снижается эффективность повторного использования компонентов в других приложениях, поскольку процессы предметной области ограничены рамками интерфейса (например, связаны с оконным объектом), что может оказаться неприемлемым в других приложениях. Делегирование выполнения системных операций специальному контроллеру облегчает повторное использование логики обработки подобных процессов в последующих приложениях.

  2. Контроль состояния прецедента. Иногда необходимо удостовериться, что системные операции выполняются в некоторой определенной последовательности. Например, необходимо гарантировать, чтобы операция makePayment выполнялась только после операции endSale, для чего необходимо накапливать информацию о последовательности событий. Для этой цели удобно использовать контроллер, особенно контроллер прецедента.

    1. Применение шаблонаInformationExpert

Шаблон информационный эксперт отвечает на вопрос, какой класс должен отвечать за ту или иную функциональность. Ответом на этот вопрос является то, что класс должен отвечать за ту или иную функциональность, в случае если у него есть достаточно данных для решения задач функциональности.

В примере из лабораторной работы №6 у нас есть два объекта взаимодействующих между собой это Студенты и Книги. Очевидно, что у них есть определенная функциональность, эти объекты должны уметь хранить данные о себе, создаваться, изменяться и удаляться. Согласно шаблону InformationExpertмы создаем эти классы (TSudents,TBook) и определяем эту функциональность. Теперь возьмем процесс выдачи книг и возврата их от студентов. Нам необходимо отображать список книг выданных студенту, если мы добавим эту функциональность классуTStudentsили классуTBookто тогда мы их нагрузим лишними функциями. Оптимальным решением данной проблемы является созданием нового классаTStudentBook, в функциональность которого входит эти функции.

    1. Применение шаблонаCreator

Шаблон Creatorотвечает на вопрос, кто должен создавать экземпляр нового объекта. Класс должен создавать экземпляр нового объекта, если выполняется одно или несколько условий:

  • Класс В агрегирует объекты А.

  • Класс В содержит объекты А.

  • Класс В активно использует объекты А.

  • Класс В обладает данными инициализации, которые будут передаваться объектам А при их создании (т.е. при создании объектов А класс В является экспертом).

  • Класс В – создатель объектов А.

В качестве примера возьмем базовый класс для слоя бизнес-логики класс TDataPrepare. Наследники этого класса должны обращаться к классу слоя объектно-реляционного отображенияTExecuteObjectдля выполненияSQLзапросов. Существуют два вида запросов: возвращающие данные и не возвращающие данные. Запросы, возвращающие данные используются для отображения одного или несколько объектов из реляционной таблицы. Запросы, не возвращающие данные используются для модификации данных в реляционных таблицах. Таким образом, у нас есть проблема, кто должен создавать объект классаTExecuteObject. Поскольку разные объекты отображают данные из различных таблиц БД, то получается, что каждому объекту классаTDataPrepareнеобходимо иметь по одному экземпляру объектаTExecuteObject. Но тут появляется другая проблема при выполнении запросов, не возвращающих данные текущий набор данных закрывается и при попытке другого запроса текущий набор данных закроется и его необходимо будет заново открыть, что увеличит объем данных передаваемых по сети. Тогда ответим на другой вопрос: «Кто должен отвечать за создание и удаления объекта выполняющего такие запросы»? Существуют два варианта: классTDataPrepareили другой – новый класс. Решение данной проблемы зависит от того, могут ли быть отправлены одновременно два и более таких запросов. Если да то тогда необходимо чтобы этот объект создавал классTDataPrepare, если нет, то тогда необходимо создать новый класс, обладающий такой функциональностью.