Компонентный подход в программировании


         

Разработка и оценка архитектуры на основе сценариев


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

  1. Выделение компонентов

    • Выбирается набор "основных" сценариев использования — наиболее существенных и выполняемых чаще других.
    • Исходя из опыта проектировщиков, выбранного архитектурного стиля (см. следующую лекцию) и требований к переносимости и удобству сопровождения системы определяются компоненты, отвечающие за определенные действия в рамках этих сценариев, т.е. за решение определенных подзадач.
    • Каждый сценарий использования системы представляется в виде последовательности обмена сообщениями между полученными компонентами.
    • При возникновении дополнительных хорошо выделенных подзадач добавляются новые компоненты, и сценарии уточняются.
  2. Определение интерфейсов компонентов

    • Для каждого компонента в результате выделяется его интерфейс — набор сообщений, которые он принимает от других компонентов и посылает им.
    • Рассматриваются "неосновные" сценарии, которые так же разбиваются на последовательности обмена сообщениями с использованием, по возможности, уже определенных интерфейсов.
    • Если интерфейсы недостаточны, они расширяются.
    • Если интерфейс компонента слишком велик, или компонент отвечает за слишком многое, он разбивается на более мелкие.
  3. Уточнение набора компонентов

    • Там, где это необходимо в силу требований эффективности или удобства сопровождения, несколько компонентов могут быть объединены в один.
    • Там, где это необходимо для удобства сопровождения или надежности, один компонент может быть разделен на несколько.
  4. Достижение нужных свойств.

    Все это делается до тех пор, пока не выполнятся следующие условия:

    • Все сценарии использования реализуются в виде последовательностей обмена сообщениями между компонентами в рамках их интерфейсов.
    • Набор компонентов достаточен для обеспечения всей нужной функциональности, удобен для сопровождения или портирования на другие платформы и не вызывает заметных проблем производительности.
    • Каждый компонент имеет небольшой и четко очерченный круг решаемых задач и строго определенный, сбалансированный по размеру интерфейс.



Содержание  Назад  Вперед