Кстати, для расширения сознания и принципиально иного взгляда (и ощущения) на дизайн и арзитектуру приложения очень рекомендую хорошенько выучить и попрактиковать Haskell. Что б по хардкору, иначе чуда не произойдёт. Через его призму (pun intended для тех, кто в теме) многие "прописные истины" перестают выглядеть таковыми, и многое другое "щёлкает" в голове и встаёт на место.