Extracting Conditional Logic to Explicit Classes
In the previous section, we looked at extracting conditional logic as new methods on a user object.
Sometimes, though, we end up doing this refactoring over and over.
What we are left with is a User
class that is filled with tons of these kinds of methods.
Note
This can be an issue that is best solved by actually modeling your classes using a domain-driven design approach.
While being beyond what this book covers, you might be interested in looking into the concept of bounded contexts (https://www.martinfowler.com/bliki/BoundedContext.html).
Let's Get Classy
Imagine that our User
class looked something like this now:
class User { isAdmin(): boolean { /* Code */ } isActive(): boolean { /* Code */ } canEdit(): boolean { /* Code */ } isActiveAdmin(): boolean { /* Code */ } isActiveAdminThatCanEdit(): boolean { /* Code */ } // And dozens of more methods... }
You can tell that this...