title: How to pass objects between layers of abstaction in c#?
body: <p>So, I have an application structured with the following layers:</p>
  
  <p><img src="https://i.stack.imgur.com/Qrh3f.png" alt="Application layout">
  <p>
  As of now, I am not using any concept of Objects to get data from the bottom-most layer. I am simply using DataTables to get data out. I am not happy with this because it requires the Business Logic Layer to be aware of column names, etc.</p>
  
  <p>In my Business Logic layer I have objects that are loaded from those DataTables and the service layer works with those objects via Collections of those objects. </p>
  
  <p>Here's my question. If I wanted to have the Data Abstraction Layer accept and reply with Objects, how do I avoid referencing the DAL from the Service Layer? I've read that object factories are one way and also I've read I could build object transformation functions and so on.</p>
  
  <p>What is the best way you've successfully employed this? My ultimate goal is to provide pluggable DALs for different Database server vendors.</p>