title: How would you architect a desktop application in C# 3.0
body: <p>I've created a simple desktop application in C# 3.0 to learn some C#, wpf and .Net 3.5.
  My application essentially reads data from a csv file and stores it in a SQL server CE database. I use sqlmetal to generate the ORM code for the database.
  My first iteration of this app is ugly as hell and I'm in the process of refactoring it.</p>
  
  <p>Which brings me to my question. How would you architect a desktop database app in C#?
  What are the best practices?</p>
  
  <p>Do you create a Database Abstraction Layer (DAL) which uses the sqlmetal generated code? Or is the generated code enough of an abstraction?</p>
  
  <p>If you use DAL pattern, do you make it a singleton or a static member?
  Do you use the View-Model-ModelView pattern with the DAL pattern?</p>
  
  <p>Apologies if this seems like a long open ended question, but I have been giving this a lot of thought recently.
  I see a lot of examples on how to architect an enterprise n-tier app in C# but not that many on architecting standalone desktop apps.</p>