Software projects often start with such innocence. A developer creates the basic functionality and then extends the functionality with various rules of domain logic. Project classes grow larger and more complex to accommodate all these changes. The classes gain a lot...