Вопрос подразумевает, что достаточно клиентского кода, использующего этот объект, что изменение вызовов в другом месте, если объект разбит на части, является обременительным. В этом случае трактуйте существующий объект как Facade - это объект, который обеспечивает унифицированный интерфейс с иерархией базового класса.
Способ создания иерархии заключается в определении тех функций, которые должны идти вместе. Всякий раз, когда я сталкиваюсь с этой проблемой, функции обычно не разделяют никакого состояния, скорее они похожи на static
java-методы, но если есть функции, которые разделяют состояние, они являются хорошим кандидатом для этой группировки. В противном случае обычно это функции, которые используют одни и те же входные параметры или имеют одинаковое словосочетание в названии (то есть saveMyData
, loadMyData
и т. Д.).
Учитывая этот пример, скопируйте эти функции в новый CFC (например, MyData
) - в этот момент вы можете изменить имена функций, чтобы исключить повторение или улучшить их ясность (например, MyData.load()
). Вернувшись к исходному объекту (т. Е. BigCFC
), удалите реализацию этих функций и вместо этого делегируйте вызов вновь созданному CFC (вы можете рассмотреть возможность включения нового CFC в состав старой). Так это будет выглядеть примерно так:
<cffunction name="loadMyData">
<cfargument name="id" type="numeric"/>
<cfreturn variables.myData.load(arguments.id)/>
</cffunction>
Где variables.myData
будет установлено как часть инициализации CFC.
Использование этого подхода означает, что изменения не влияют на ваш существующий клиентский код, но все же разбивает все на логические группировки и позиционирует новый код для использования более детальных CFC.