#1, "Object Oriented structure should always map to well defined mental concepts in the problem domain," is a recipe for producing excessively complex code. You end up focusing on the parts themselves, instead of their interactions, which is actually the important part.
Comments
I'm not sure about #2. Is it really that good idea to extend types? Or to be precise — to extend non-abstract classes?
It leads to unintuitive behavior:
whereas also: not to mention: IMO this would be better, more flexible approach:#1, "Object Oriented structure should always map to well defined mental concepts in the problem domain," is a recipe for producing excessively complex code. You end up focusing on the parts themselves, instead of their interactions, which is actually the important part.
> You end up focusing on the parts themselves, instead of their interactions, which is actually the important part.
Aren't interactions on what CRC cards put emphasis?