Divide and ConquerStrive for High Cohesiveness in each module ==> focus on a single activity.
Public processing model should be simple even though there may be complex internal details.Strive for loose coupling ==> refer to abstractions, not implementations.
Use Interfaces to support plug-in instances of any class derived from the interface.
It supports cohesiveness by hiding complex character manipulations in a private helper functions.