I know the world is about to change in April when VS2010 goes live, however, we are still using VS2008 and will be for at least a few more weeks. In the hopes that this walk-through provides some insight to someone, even if it is just me, here goes.
We are creating a Silverlight application for several reasons:
- Web development is not nearly complex enough, so we sought out a unique challenge involving the newest, least documented, voted most-likely-to-be-completely-re-done-in-the-next-version technology (excepting WWF, I mean, WF, which will probably hold that distinction for years to come).
- Our users do everything in Excel, meaning that much of the data entry UI for this app needs to be as Excel-ish as possible, including the dreaded Multi-Add (adding multiple rows between saves) and Multi-Edit (editing multiple rows between saves). [FYI: It turns out that none(?) of the OTC Grids are actually designed for this. You can make it work with Telerik if you want to try hard. See postings like this one in Telerik's forums for more info. They have come a long way since that posting.]
- Management is opposed to fat client or virtualization, so the app has to be web-based.
- After much trial-and-error, and trial-and-failure, and trial-and-compromise, we deployed an ASP/Ajax solution that was less than satisfactory and not-at-all Excel-ish, so we had to find a “better way”.
- None of us had ANY desire to explore Flex.
- We are a Microsoft shop, so building a Java app was not really an option.
- Silverlight 3 was coming and promised enough features for us to begin writing an Enterprise app. (It turns out that we jumped the gun on this, but we were not alone and SL4 promises to remedy many of the “it’s-not-ready-for-the-enterprise” issues.)
We are using DevForce and the Entity Framework because:
- Having worked with Hibernate, NHibernate, and SubSonic (which I preferred over NHibernate), I was convinced that a Data Layer / ORM would make our application specific code much easier to write and would provide more and better infrastructure/plumbing than we ever could.
- Having been told: “No Open Source” and given 3 weeks to pull SubSonic out of a working project and replace it with a roll-my-own ORM, I knew that many features we needed (Concurrency and caching, to name just two) were going to be a HUGE effort to write myself, and that if this was a Make or Buy decision, that Buy was clearly the better choice. (Check out Davy Brion’s Build Your Own Data Access Layer Series for a deeper examination of the Make option.)
- Having been exposed to DevForce Classic a few years ago, I knew their product provided much of what we needed, and they were on the cusp of releasing a Silverlight version of their WPF framework. As an added bonus, their documentation, and Ward Bell’s blog, are highly readable and provide excellent project guidance and design philosophy.
- DevForce sits on top of Entity Framework, which does not support Oracle, but as this was about to kill the deal, we found that DevArt’s Oracle drivers were finally supporting EF properly.
- If you’re gonna do this thing, you might as well go all in.
- Having worked with CAB for a Windows App, I understood the potential of a component based application framework — or at least imagined I understood it, can anyone really understand anything PnP publishes?
- After dabbling in the Java world for a few months, I had developed an appreciation for Spring, Dependency Injection, configuration over coding and convention over configuration.
- I am unrepentant about preferring Agile development practices, and many of the “best practices” prescribed by PnP and implemented in Prism, represent many Agile coding principles in action. Both VersionOne and RallyDev have Agile 101 documentation on-line. Mike Cohn has written several excellent books introducing teams to Agile practices.
So we ended up with the following technology stack:
- Prism 2 for its Modular framework
- Unity for Dependency Injection
- Microsoft Silverlight 3 for the UI
- Telerik for Silverlight for several of its UI components (alas, we still have to do far too much ourselves in this area though)
- IdeaBlade DevForce for Silverlight for its Silverlight friendly Business Entity model and asynchronous client-server communication layer
- DevArt dotConnect for Oracle drivers for its support of the MS Entity Framework and it’s excellent Entity Developer tool
- Microsoft Entity Framework for the server-side Entity Model and database connectivity