The domain layer holds sObject manipulation methods and trigger methods. The aim is to keep all sObject logic centralised and deduplicated. Domain classes can be seen as a finer "Service classes" with a sole focus on single object manipulation.
NOTE: persistance of the Domain objects should not be handled here. Passing a
UnitOfWorkproperty to Domain methods to append their work to is best practice.
Domain classes should be given a plural name of the sObject to highlight the bulk nature. They are given a generic name as they should only appear once in your application (in most cases).