Re: Организационные нормы
Возможно, я зря ввязываюсь в дискуссию, потому что для объяснений "на пальцах" преимуществ "регистров правил" может не хватить временных ресурсов. Поэтому заранее прошу прощения за сумбурность.
Возможно, мы по-разному понимаем "назначение" программистов. Для меня программист - это тот, кто кодирует поведение системы, но не настраивает конкретные параметры системы. Настройкой поведения системы занимается ее администратор (или кто еще), а не программист.
Поэтому обычно программистам не рекомендуется использовать понятия прикладного уровня в текстах программ. Но программист (точнее программа) должен предоставить пользователю возможность самостоятельного использования понятий прикладного уровня. В том числе для формулировки бизнес-правил.
К системе можно подойти с точки зрения стратификация данных (понятий и значений). Согласно принципу стратификации можно выделить системый уровень, служебный и пользовательский. На системном уровне как понятия, так и значения понятий задаются программистом (системой). На служебном система определяет понятия, но предоставляет пользователю возможность управления значениями понятий. На пользовательском уровне как понятия, так и их значения определяются пользователем.
В примере со скидкой понятия прикладного (пользовательского) уровня используются на системном (в программном коде). Это плохой стиль.
Вариант с регистром правил заданной структуры - это служебный уровень. Тоже имеет минусы,- у разных клиентов (пользователей) могут быть свои переменные, влиюящие на скидку.
Оптимальный (с точки зрения гибкости) вариант - сделать структуру регистра настраиваемой пользователем (администратором) при сохранении семантики корня (значение скидки).