Housed in this repo is a wiki that goes over how to implement Separation of Concerns in Salesforce. It explains the three layers in Salesforce that you should separate your concerns into (Service, Domain and Selector) and how to leverage the Apex Common Library to make implementing Separation of Concerns in your org considerably easier.
There is also some example code showing you how an application (in this case a help desk app) in a Salesforce org might separate its concerns. If you reference the code while reading the wiki it should aide considerably in learning how to leverage the Apex Common Library to implement Separation of Concerns in your Salesforce org.
If you believe there is any information missing from this guide or that it needs more info in certain places, please submit an issue on this repo here and I'll add it ASAP!