OK - I understand that this is a bit subjective - but you're the best community forum I've got!
So, we are talking about starting a fresh customisation for ArcGIS or a Windows app using Engine. I often become a little perplexed when trying to create nice clean layers of abstraction between my GUI, business objects and data access layer (geodatabase access).
It often works out like something below:
- The PresentationLayer makes calls in BusinessLayer to get data from database and give back wrapped up in some form of business object - it is never a ValueObject straight fresh from the database.
- In BusinessLayer - I have all my business logic that accesses DataLayer for data from the geodatabase (it gets back data from the geodatabase via ValueObjects - DataLayer also uses this assembly).
- In ValueObjects assembly, this is just a set of objects that map directly to SDE tables and do nothing else.
- Core is where the program starts and shows forms etc.
- Common is just a place to put things that are useful to use here and there, usually static methods etc.
Does this look sane? How do you structure your solutions?