I’ve been tasked at coming up with a standard architecture for us to apply to our future projects. Yeah, I know, there’s no blanket answer for everything, but given the requirements I expect, I think a single architecture can handle 95% of what we’ll be doing and we can deviate/improve as necessary for the other 5%.
Ultimately I don’t yet know what this is going to look like but this is the direction I’m leaning in:
- SQL Server 2008 (R2 later this year) database (our schema with lots of data already exists for much of this)
- Some sort of code generation with customizable extensions for our DAL (be it Entity Framework, OpenAccess, nHibernate, or anything else) – I just don’t want to write it. Since our db already exists and we traditionally make db changes before code changes, this will be generated from our db instead of vice versa.
- SOA implementation abstracting away our DAL via WCF
- DDD-based business tier
- SOA implementation abstracting away our business logic via WCF
- Various clients consuming our business logic:
- Various different web applications (some web forms, some MVC, who knows what else) consuming similar business objects but for different audiences.
- RIA services that will be publicly exposed for Silverlight clients and perhaps more later
Other things that I think I’m going to do with this architecture:
- For authentication, I think we’re going to use Active Directory Lightweight Directory Services (AD LDS), formerly called Active Directory Application Mode (ADAM) in Windows Server 2003. LDAP is a bit of a heavy protocol for web authentication but there are reasons for this mostly driven by some systems that will be existing outside of this architecture. Also, we don’t expect to have an overwhelmingly large number of users so this should be manageable as well.
- I want us to have a library to include in our code that provides standard extension methods off of the IIDentity interface to help us with authentication and authorization initiatives. This will be usable within our code and possibly within WCF as well. This will allow maximum code reusability across various environments (WinForms, WebForms, Services, etc.).
- SOA-based abstraction for various other services (sending email, third-party services that we consume, etc.) via WCF wrappers. This will allow us to have several tiny service applications that have little-to-no dependencies upon anything. Also, at some point in the future I think I want to put in some kind of enterprise service bus in here to handle the various disconnected systems and this will help facilitate that when the time comes.
- TDD – I really want this to be strong around the architecture and the base components for it (perhaps with a GNDN reference implementation in it) and as we begin to fill out these architectures, I really want us to have good code coverage.
- Logging and a lot of the security I want WCF to take care of. There will be some internal security that our app needs to take care of, which we’ll use our IIdentity mixins for, but I want as much of the uninteresting stuff to be taken care of by WCF. We’ll see if this happens, though.
So there you have it – my current project to get a reference implementation made for. I can’t promise it but I will see what all I can share for others to use as I get this done. That will mostly depend on whether or not I get to complete it before I need to start implementing our actual applications inside this architecture. For now I’m just throwing together quite a few proof-of-concept applications before I can get this built.