I definitely hate solution number 2.<p>One major problem I find with OOP is that it is often requiring refactoring. Every time you shove something into an object you actually take away from it.<p>One thing that greatly inspires me from Haskell is that it does have design patterns, but they are based on category theory. Math is the ultimate tool. I don&#x27;t think we can accidentally &quot;create&quot; something as richly descriptive for describing the benefits and problems for using a certain pattern.