Sorry in advance for the wall of text!
Scenario:
We're looking at what technology to choose for a LOB app that needs to support a "stand-alone" model (frontend + backend running on desktop machine), but also local server mode (backend installed on a local server), as well as Software as a Service via the internet (backend installed on a hosted server).
We want to minimize the development work, which is why we chose the Silverlight frontend. We intend to re-use the same codebase for all 3 models.
The LOB app is heavy on data inputs and will do some math work on the backend. We will have a large amount of views. And we will have a database with 80+ tables. We currently have our own DAL that enables us to use MSSQL, MySQL and Oracle as DBMS's.
The current vision is to use an Agile TDD Silverlight 4.0 MVVM app as frontend in C# with the Caliburn framework. And to have a WCF (RIA?) service as backend (Non Silverlight, plain .NET 4.0). This fits the different models well, since it's just a matter of where the backend is installed. For the SAAS model, we have a server on the internet where the backend could reside.
Questions:
Does this sound viable at all, or is it whishfull thinking that we could have the same codebase for the different models?
With regards to the backend, we are looking into WCF RIA Services, but would like to have "Message Security", which does not seem to be possible in the Silverlight implementation of WCF. Is WCF RIA a valid choice? Or is plain WCF "better" with regards to security in any way?
With regards to the different DBMS's we need to support. Is this viable to do with WCF RIA Services? Or are we better off creating our own BLL/DAL and expose that ourselves via plain WCF?
Does anyone have experience with a multiple DBMS setup using no inline SQL, just Stored Procedures? The original app is heavy on inline SQL, but we are wondering how maintainable this app would be with only Stored Procedures in the different DBMS's.
Final question, with regards to MVVM and security, we would like to "hide" as much of our logic in the backend for security/code protection reasons. What would be a logic thing to do for this? We need to do TDD, so we need to be able to mock-out the Model, which means it needs to be available in the frontend. But we need all the logic to be in the backend. Should we just use a "wrapper" in the frontend that "links" the "real model" in the backend? Kind of a dummy model that fits 1-on-1 with the backend model. Or is there a "better" way to do this?
Thanks in advance for any help you can give us in any of these subjects!
Huron.