Как сбалансировать принцип DRY с минимизацией зависимостей?

У меня проблема с принципом DRY (не повторяйтесь) и минимизацией зависимостей, которые вращаются вокруг механизмов правил Rete.

Механизмы правил в крупных ИТ-организациях, как правило, относятся к Enterprise (обратите внимание на заглавную букву «Е» — это серьезный бизнес). Все правила должны быть выражены один раз, красиво и СУХО, и централизованы в дорогостоящем механизме правил. Группа поддерживает механизм правил и является хранителем наборов правил.

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

Проблема, которая у меня есть с точки зрения дизайна, заключается в том, что централизация правил и обработки, безусловно, приятна и СУХА, но есть издержки:

  1. Дополнительные сетевые переходы для доступа к централизованной службе правил и возврата результатов;
  2. Дополнительная сложность, если механизм правил представлен как веб-служба SOAP — потребители должны упаковывать запросы SOAP и передавать ответ обратно в свой домен;
  3. Дополнительные интерфейсы между корпоративной группой, которая поддерживает механизм правил, бизнесом, который устанавливает и поддерживает правила, и разработчиками, которые их используют;
  4. Дополнительная сложность — иногда может быть достаточно решения на основе данных.
  5. Дополнительные зависимости — компоненты, которые не контролируют свои собственные правила, должны беспокоиться о внешних зависимостях от механизма правил для тестирования, развертывания, выпусков и т. д.

Эти проблемы возникают при использовании многих других корпоративных технологий (например, шлюзов B2B, ESB и т. д.).

Те же группы Enterprise также рекламируют SOA как основополагающий принцип. Но мое понимание правильного проектирования услуг состоит в том, что они должны разбивать бизнес-пространство на плитки и быть идемпотентными, независимыми и изолированными. Как сервис может быть независимым и изолированным, если его правила поддерживаются где-то еще?

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

Итак, мои вопросы:

  1. Как вы относитесь к аргументу централизации против независимости?
  2. Каков ваш опыт работы с корпоративными инструментами, такими как механизмы правил?
  3. Как я могу усилить аргумент в пользу изоляции?
  4. Если моя точка зрения неверна, какой аргумент вы бы привели в пользу централизации?

person duffymo    schedule 07.08.2009    source источник
comment
Может быть, это больше вопрос людей и организационной концентрации власти, чем вопрос архитектуры? Преуспевают как сильно централизованные, так и сильно децентрализованные организации. Мне интересно, что лучше всего подходит для организации?   -  person Oren Trutner    schedule 07.08.2009
comment
Ваши замечания об организации хороши, но это не решает проблему дизайна, с которой я сталкиваюсь.   -  person duffymo    schedule 08.08.2009


Ответы (2)


В долгосрочной перспективе простота обслуживания всего этого будет абсолютным требованием.

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

Также «независимый» отличается от «самостоятельного».

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

So

  1. Централизация > Независимость (по крайней мере, в той системе, которую вы описываете)
  2. Единая точка истины для механизмов правил (все на одной странице)
  3. Напомните им о стоимости обслуживания с годами
  4. Я нахожу вашу точку зрения правильной.
person kazanaki    schedule 15.09.2009
comment
Большое спасибо, что нашли время, Казански. Очень признателен. - person duffymo; 16.09.2009

Ваш вопрос очень специфичен для предприятия, и я больше увлекаюсь настольными компьютерами, поэтому я надеюсь, что этот ответ не слишком общий. Мне нравилась концепция Don't Repeat Yourself, пока я не узнал, как она систематизировалась и закостенела. Мне это понравилось, потому что оно согласовывалось со мной (да!) и с моими собственными идеями о том, как сделать код более удобным для сопровождения и менее подверженным ошибкам. По сути, я вижу, что большая ремонтопригодность требует большего обучения со стороны сопровождающего. Я не думаю, что есть простой способ обойти это. Вот пример того, как повысить удобство сопровождения с помощью хорошего фактора, но не без кривой обучения.

person Mike Dunlavey    schedule 24.11.2009
comment
Спасибо, Майк. Это довольно длинный пост, поэтому мне потребуется некоторое время, чтобы прочитать и переварить его. Я постараюсь отдать должное после того, как подумаю об этом. - person duffymo; 25.11.2009
comment
@duffymo: Кстати, я был мехом. Э. тоже и начал на Фортране. Возможно, это придает тонкий оттенок тому, как я смотрю на программное обеспечение. - person Mike Dunlavey; 25.11.2009