Принципы GRASP содержат рекомендации по распределению ответственности за классы и объекты в объектно-ориентированном проектировании.Например, шаблон Creator предлагает: В общем случае класс B должен отвечать за создание экземпляров класса A, если применяется одно или, предпочтительно, несколько из следующих элементов:
- Экземпляры B содержат или составно агрегируют экземпляры A
- Экземпляры B регистрируют экземпляры A
- Экземпляры B тесно используют экземпляры A
- Экземпляры B имеют информацию инициализациидля экземпляров A и передать его при создании.
В вашем примере у вас есть сложный и развивающийся код для применения правил к данным.Это предполагает использование Factory Pattern .
Ввод кода в Results противопоказан, потому что 1) результаты не создают результаты, и 2) результаты не являются информационным экспертом (т.е. они не обладают большей частью необходимых знаний).
Короче говоря, ResultFactory кажется разумным местом для концентрации знаний о том, как подать заявку правила до данные для генерации результатов .Если бы вы попытались внедрить всю эту логику в конструкторы классов для Результатов или Правил, это привело бы к сильной связи и потере сцепления.