title: Layer Encapsulation without Model Overload?
body: <p>I'm starting a new project, so it's time to re-evaluate how I do things.</p>
  
  <p>In the recent past I have created a 3 layer/tier project (UI, Domain, Data) with each tier with it's own separate model. The the DAL has it's data entities consumed by the Domain layer, which mapped them to domain models which were consumed by the UI which mapped them to ViewModels.</p>
  
  <p>This did allow for some differentiation at each level (especially UI) but the mapping was overwhelmingly tedious (Automapper helped a little) and the Domain and Data layers were basically 1:1, with the UI view models being the most useful.</p>
  
  <p>I'm trying to figure out how to simplify for my next project and I could use some suggestions.</p>
  
  <p><strong>Edit:</strong>
  As it is, I'm considering having a set of dto's shared between the Domain layer and Data layer. It locks me into the datbase structure more, but saves a lot of mapping between identical types.</p>