ERP System

I have been plotting and scheming about the Enterprise Resource Planning application that I am considering as a project for Stick Figure Software to undertake.

My thinking is that I will build a database using SQLite then use the ADO.Net Entity Framework to create a database Object-to-Relational mapping layer for the lowest tier. Using the Entity Framework will make it seamless to change out the database layer to MS SQL Server or other higher transaction systems.

For the middle tier, I will need a solid service layer. I am planning to use WCF and the ADO.Net Data Services APIs to create a REST based service that exposes the database. I think I will have to add a little something extra to this service layer to implement the kind of security that I need in the ERP system. Out of the box, ADO.Net Data Services is somewhat anemic on authorization features. I will need to limit access not only to table, but also to specific entities within the tables.

for the Application Tier, I am planning to create a Silverlight client framework. This framework will implement a Model View Controller (MVC) pattern so that I can route the users to proper view for each entity, and so I can adequately test the controller code. Silverlight is an awesome new RIA client technology that will allow me to do some amazing UI even in a web application. Additionally, I intend to package the Silverlight client using an embedded web server so that I can host and run the client as if it where a windows application. This will essentially give me the best of both worlds - a client app and a server RIA all in one!

The RIA version of the application will simply run directly off of the server's MS SQL database. However the client version of the application will be different. Since the windows version of the client application could potentially run in a disconnected state, I will use the Microsoft Sync Framework to sync the server side MS SQL database to a client side SQLite database. This will essentially be a merge replication setup so that changes are bi-directional. The only difference between the server's MS SQL and the client's SQLite will be the scope of the data. I will configure the Sync Framework to only download content to the client that the specific user has access to. This increases security and decreases network consumption at the same time.Image