No we're not going to ask you any questions about your age, race or income. This is an application architecture census. Let me explain.
As I mentioned the other day, we've started work on a new release of the Application Architecture for .NET guide. Our current idea for organizing this guide is to anchor it around a number of common "application scenarios" that provide an end-to-end description of common application types. From there we will decompose the application scenarios into sub-domains (many of which will be shared across multiple scenarios) and provide guidance around design and implementation.
In order to do this, we need to come up with a taxonomy of common application types (not to be confused with taxidermy, which is something different altogether). This task has definitely done before. So far in p&p we've gone with a deliberately simple taxonomy which divides the world of applications into "services" and different styles of "clients" (smart, web, mobile). The advantage of such a simple taxonomy is that it's easy to fit most applications into one of these categories, but it also means that we don't adequately capture the range of variability within each type, nor have we done much to show how larger systems are comprised of these smaller applications and services. There are also examples of more complex application taxonomies, such as IBM's "Patterns for e-Business".
While we will definitely take a look at some of the existing application taxonomies, I thought it might be fun and valuable to do a bit of a reality check to find out what kinds of applications are really being built. To take part in this census, all you need to do is to respond to this blog with a one-paragraph description of the last significant .NET (or partially .NET) application you worked on. We're not after any of your trade secrets here, instead we'd just like to hear about the architecturally significant aspects of the application. Here's an example of the type of thing I had in mind:
A .NET Compact Framework application running on Windows Mobile Pocket PCs is used for data entry. This information is stored in a local SQL CE database on the device. The application connects to an internally-hosted server application using web services to upload the data. The service is hosted in IIS and exposes a WCF endpoint. It is hosted on a horizontal cluster for load balancing and redundancy. The application applies some security and business rules over the data before persisting it to an Oracle database that is running inside the firewall.
This census isn't going to result in any improvements to your local highways or facilities, but we hope you'll take some time to share this information to produce a better Application Architecture Guide for future projects. As always, thanks for sharing - I'm sure your mother would be proud!
Perhaps it's a bit more than you're looking for, but here's mine: http://www.codeproject.com/aspnet/NHibernateBestPractices.asp . A section towards the bottom has a nice diagram showing the structure: http://www.codeproject.com/aspnet/NHibernateBestPractices.asp#EXTENDING_BASICS
A .NET Compact Framework application running on Windows Mobile Pocket PCs is used for data entry. This information is stored in a local Oracle Lite database on the device. The application connects to the Oracle Lite Mobile server using HTTP transport to upload the data. Mobile server and the back-end database is hosted on an AIX server. The application applies some security and business rules over the data before persisting it to an Oracle database that is running inside the firewall.
ASP.NET 2.0 app, no AJAX or anything fancy, basic entry/edit/delete/version history forms and grids. Accessed by several distinct groups, so role-specific UI was a heavy requirement. Used SQL Server to store data.
Project prior to that was an OBA. Starts with InfoPath Forms Services solution hosted inside SharePoint Server 2007 used to collect data, workflow to route to editing staff, and a Word Add-In to take final data and merge into form letter (Open XML Word doc used), print on company letterhead, save PDF copy to archive location, and update metadata in SharePoint.
Web site administration portal, ASP.NET 2.0 app (C#), built using the Web Client Software Factory for the UI (no pageflow yet) and the Web Service Software Factory DAL (no web services, just straight calls to the DAL through business logic layer). SQL Server 2005 back-end, SQL cache dependencies used to minimize database hits and resolve concurrency issues. Nothing fancy, but our first effort using the software factories and integrating TFS into our workflow. Also used CSS Friendly adapters (with a few modifications for missing capabilities) as our designer hates the horrible markup emitted by the stock controls.
Bob - are you seriously saying that my made-up example is describing your application with around 90% accuracy? ;-)
for that solution, yes. lol.
A three-tier intranet web application utilizing .NET 2.0. The data layer contains inline sql with bound parameters for type-checking. Business tier has secruity assertions for code authorization and other business logic. Presntation tier makes use of user controls, AJAX, master&contnet pages, personalization. Database usesd is Oracle on an AIX server.
I have a .Net 2.0 windows client and a windows service running on server. The two communicate via remoting but not everything is done this way (only login, file uploads and client configuration retrieval). NHibernate 1.2 is used to access editable data and DataSets for read-only lists and reports. The data is currently in an SQL (Express) 2005 server with a couple of triggers and no stored procedures. The client is built on top of CAB and the validation app block is being built in as we speak :). A third-party control set provides a super-rich user interface, with dropdown treeviews, schedulers, skins, tabbed MDI etc. These controls support end user customization which I intend to enable as soon as I figure out where to store the configuration data (any suggestions?).
A web application built on ASP.NET 2.0(C#). We have a SQL Server 2005 database. A Workflow layer to control page flow and create tasks to the users. We have a WCF layer to start a workflow from external applications.
Massive SOA application with numerous services implemented using WCF. WF is used to enable user-defined workflows, users are heterogenous and handled through WS-Federation. Some users access the solution through web portals, while some use SmartClients. BizTalk handles most transactions, and SQL Server and Oracle handle the data.
User management system with Windows Client utilizing NHibernate for the domain/entity objects that utilizes a DDD with a IRepository<T> and Windor IoC container for the services.
Uses the DetachedCriteria object for querying.
Backend database is Sql 2005. Looking to implement webservices to sit between the client and database on a separate server.
DB (MSSQL 200)
BOs/DTO + DAL (Generated with LLBLGen using SelfService with all comfort like LasyLoading etc.)
LowLevelBL (Low Level Validation, Auditing, Tracing, Performance Counters)
BL (Business Code Validation, Authorisation, Configuration, Exception Management)
WCF Host(IIS) (Exposing Data Contracts e.g BOs/DTO)
Web App(ASP.Net/Ajax/Telerik RADControls/Masterpage/MVP Design/Web Client software factory planned e.g PageFlows
GUI is ASP.NET 2.0/AJAX and uses UIP (until its engineered out). A lightweight process/application layer and a domain model utilizing many of Evans's patterns. NHibnernate for ORM, SQL Server 2005 as the database.
Released in the wild last november, our first public foray with .NET 2.0 - public facing policyholder web site using a modified membership provider and normal web services through a service layer to to provide services to both an internal management site and the external customer site. We just utilized the exception handling, daab and logging blocks of Ent Lib 2.
Current app - internal only administration system - right now we're still designing the backend, so... WCF services, .net 3.0, new PIAB and VAB (thank you) and we are trying to utilize LINQ - but there is much pushback on that one.
.Net 2.0 n-tier intranet web application utilizing .NET 2.0. Simply ASP.net, with some user controls. No Ajax or other stuff. All the access policy is mnaged by the UI layer. The logic Layer perform validations and comunication with some external systems, like SAP, etc. through IBM MQSeries. The data layer just envolves Stored Procedure calls to an Oracle Server. Some Web Services are exposed to allow other applications access to the system.