We are building an enterprise application in which we will incorporate multiple platforms for user interfaces (i.e. ASP.net webapp, Windows Application, and someday, Mobile Apps) and multiple platforms for back-end databases (i.e. SQL Server, XML, Oracle). An additional neccesity is that these back-end DBs either be centralized and accessed via the web or localized on the client computer and occasionally synchronized to the central server.
Can anyone give advice on how we can abstract the user-interface layer & the data layer so that we can more simply create plug-and-play adaptability between the various UIs and the various choices for DBs? For example: in one case, we may have a web-app running on a centralized server via the internet, and we may have remote machines running localized copies via a windows app. At scheduled intervals, we'd want all machines synchronized so that they can all have near-real-time data.
We also need advice on handling the various connection strings involved so that the only setting that would need changing on any one app would be "local" or "remote", which would then determine the necessary connection string.