В общем случае правило для определения границ набора данных и функциональных возможностей, которые должны быть перемещены в собственный класс, является принципом единственной ответственности .
В превосходном Мартине Фаулере рефакторинг блики вы найдете множество шаблонов для перемещения обязанностей, данных и функций между классами (очевидный Извлечение класса , конечно, но с мощной помощью Метод извлечения и, в вашем случае, Encapsulate Collection , возможно).
TDD - это хороший способ наметить дизайн очень рано. Обычно «легко проверить» приводит к «разъединению» и, следовательно, к разделению интересов.
Использование обоих этих подходов вместе (TDD + рефакторинг) может помочь вам в переходе от дизайна к другому: все должно пройти более гладко.
И еще одно замечательное указание: DIYDI (сделайте это самостоятельно, добавьте зависимости).
Кроме того: вы собираетесь здесь для генерации кода или анализа времени выполнения?
В первом случае вас могут заинтересовать движки шаблонов , которые могут сэкономить вам много работы на этапе постобработки.
Во втором случае вы можете использовать Аспектно-ориентированное программирование и / или Отражение для проверки классов и выяснения, какие методы у них есть.