Какие-либо шаблоны проектирования / методы кодирования для сложной логики? - PullRequest
2 голосов
/ 13 августа 2010

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

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

Шаблон стратегии , кажется, обладает наибольшим потенциалом, но мне кажется, что для этого мне потребуются стратегии, а не стратегии.

Я полагаю, что поле "Бизнес-логика" могло бы охватить это хотя бы частично, но поиски не выявили признаков использования каких-либо элегантных методов кодирования.

Ответы [ 5 ]

1 голос
/ 13 августа 2010

Я не уверен, что проблема такого рода решается с помощью шаблона или шаблонов как таковых. В некоторой степени это «просто дизайн» - вы строите дизайн и обнаруживаете связи и точки сгибания, в которых (например) помогают ОО-методы и в этот момент вступают в игру паттерны.

В течение многих лет я наблюдал множество попыток решить подобные проблемы с помощью «Не написания кода». То есть мы находим какой-то способ превратить бизнес-логику в нечто более податливое, чем код. Так что, возможно, вы просто выводите правила оплаты:

  Thinking 101  Standard $100   Alumni $50   Ex-Military $0
  Hard Sums     Standard $500   Alumni $100  Ex-Military $0

Теперь изменения в этих правилах - это изменение конфигурации, а не изменение кода. Этот вид управляемых данными appraoch, вероятно, лучше, чем код.

Затем вы хотите экстернализировать логику, и поэтому появляются правила.

И внешняя логика обработки и, следовательно, мы получаем BPEL.

Я вижу успех со всеми этими подходами, но ... фактически вы где-то вывели логику, поэтому остаются две проблемы:

  1. Насколько легко вы можете проверить эту логику? Вы, вероятно, не сократили объем необходимого тестирования.
  2. Насколько легко вы можете управлять жизненным циклом этой внешней логики? Можете ли вы опробовать его, возможно, для небольшого числа клиентов, откатить его обратно, если он окажется неправильным? Разрешить одновременное использование нескольких версий?

Это все еще программное обеспечение, это действительно замаскированный код.

1 голос
/ 13 августа 2010

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

Книга Фаулера Шаблоны архитектуры корпоративных приложений содержит хорошее объяснение всей этой области мышления о вашем приложении (он предлагает вам начать сэто и работает оттуда).

И, как уже говорили другие, модульное тестирование всегда помогает!

1 голос
/ 13 августа 2010

В качестве отправной точки вы сталкивались с модульным тестированием ?Быстрое модульное тестирование Google для PHP позволило получить http://www.phpunit.de/.

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

1 голос
/ 13 августа 2010

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

0 голосов
/ 13 августа 2010

Применение некоторых шаблонов проектирования не решит всех ваших проблем, хотя некоторые могут помочь лучше организовать код.Если вы хотите уменьшить количество ошибок, то внедрите какое-то автоматическое тестирование, посмотрите на методологии Test Driven Development и Continuous Integration.

...