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


         

Обе архитектуры не поддерживают этот


  • Сценарий b.

    Обе архитектуры не поддерживают этот сценарий.

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

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

  • Сценарий c.

    Этот сценарий также требует изменений в обеих архитектурах.

    Однако в обоих случаях эти изменения одинаковы — достаточно добавить дополнительный компонент, декодирующий архивы, если они подаются на вход.

  • Сценарий d.

    Этот сценарий также не поддерживается обеими архитектурами.

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

    Таким образом, требуется, как и во втором случае, изменить или добавить один компонент в первой архитектуре и изменить один и добавить новый — во второй.

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

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



    Таблица 6.1. Итоги оценки двух вариантов архитектуры индексатора.АрхитектураСценарий aСценарий bСценарий cСценарий d
    Каналы и фильтры- -+ + *+ + *+ + *
    Репозиторий+ + + ++ + - + * + + + + *+ + - + *


    + обозначает возможность не изменять компонент, - — необходимость изменения компонента,

    * — необходимость добавления одного компонента

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

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




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