http://www.objectmentor.com/resources/articles/srp.pdf
The SRP is one of the simplest of the principle, and one of the hardest to get right. Conjoining
responsibilities is something that we do naturally. Finding and separating those
responsibilities from one another is much of what software design is really about. Indeed,
the rest of the principles we will discuss come back to this issue in one way or another.