Vás bych z nevodně zvolené úrovně abstrakce nepodezříval. Neberte to proto osobně, opravdu se vám v praxi osvědčilo, abstrahovat takto? Jak to pak řešíte, když aplikaci je potřeba použít v jiném prostředí. Místo komínů servisovat třeba vysokou pec?
Ne zrovna vysokou, ale pec ano. Dlouhou. Když i v programovém menu jsou ty položky odděleny a parametry servisu obou objektů jsou zcela jiné, tak se vyplatí je mít ve dvou třídách místo jedné god-class, ve které by byla hromada rozboček jen kvůli tomu, že jsem tu třídu nerozdělil. Když jsem pak přidával sušárnu, která měla opět jiné parametry, tak jsem na předchozí dvě třídy ani nesáhl a napsal jsem třetí. Do menu jsem pak jen přidal další řádek a bylo vymalováno.
Dělám to takhle už dlouho. Třídy díky tomu vychází jednoduché, mají shodné rozhraní a proto mohu využívat polymorfismus. Uvnitř jsou samozřejmě specializované pro konkrétní účel. Pokud přijde změna zadání, změním jen tu třídu, které se to konkrétně týká nebo ji při brutální změně vyměním za novou - tedy při změně, která by mohla negativně ovlivnit chování aplikace u jiného zákazníka.