Если пишете консольное приложение, начните с готовой обертки, например,
Symfony Console. Это даст хорошую отправную точку, от которой уже можно плясать, пробуя разные подходы.
Если веб-приложение, возьмите готовый фреймворк (Symfony, Yii, Laravel, Blues, еще что-нибудь свежее и поддерживаеме) и используйте предложенную архитектуру.