А почему только формирование полей? А мне понадобится расширить другой функционал, или не?
в общем, решения кроме обозначенного выше, нет ?
А в конце читаем про Observer.