Background - I'm looking to create a reusable library that allows one to work with a topology map of data. That is data that consists of nodes and relationships between them. The API's would include methods such as "find all children" for which the method would have to "walk the tree" and find all the nodes under this one etc. The assumption is the data will be in a relational database such as SQLite or SQL Server.

Q1 - What would be the best approach to abstract such a library from the business logic/UI code? I was thinking of using (a) class library in VS2010, with (b) interface & implementation, and then (c) use of IOC container such as NInject to then to make use of the library within a business logic class.

Q2 - Within this library, how should I separate the method code (e.g. walking the tree etc) with the pure Data Access class. This is where I'm a little lost. The litmus test here would be ease of migration from SQLite initially to SQL Server later.