Before I start developing a new piece of software, be it a new module for an existent software or a new application I find it useful to create couple of UML diagram to get a feeling of the design and the different moving parts that will make up the new module or application.
On the spirit of being agile and yet no cowboyish I just create the necessary information on the diagrams before I star development. There is a good post on whether UML is dead or not. I concur on how the author uses UML on his projects. Is UML on the way out?
You could have few UML diagrams and yet apply your favourite agile approach such as TDD (Test Driven Development) to the development phase.
Now a bit of context. I want to build a web application using the suepr-dupa .NET technology. This web application will help school to manage their information. The application is targeted to schools in developing countries so for simplicity the components will be deployed on a single server.
Few infrastructure requirements that can start our brain working are:
- The application will run on a .NET web server.
- The application will follow the three tier model.
- To minimize up front investment on new hardware the application components will be
deployed on a single server. - The application will use a relational database for the storage of its data.
The .NET web server is easy to pin point. IIS. IIS comes already as a role in many windows server operating systems such as Windows 2008 and 2012. The database can be MS-SQL 2008.
So a simple deployment diagram , based on are few infrastructure, look like this:
As we can see from the above diagram the application will be available to users via personal computer or laptops or/and other personal devices such as tablets and smart phones. HTTP will be the application protocol Notice that I only put the necessary information on the deployment diagram.
This deployment diagram got me thinking that the application could be deployed to an ASP NET application such as SharePoint. SharePoint is becoming a dominant platform for collaboration, portals, business intelligence, integration and content management..
Microsoft offer SharePoint Foundation version for 2010 and 2013 so organisations that have a valid server license can start using several of the awesome SharePoint functionality for free.
For a features comparison between SharePoint Foundation 2010 and the other editions you can visit this site: SharePoint 2010 Feature Comparison
For a feature comparison between SharePoint Foundation 2013 and the other edition you can visit this site: SharePoint 2013 feature comparison
A deployment diagram for SharePoint looks very similar to the one for ASP NET
For simplicity reasons I am leaving the different SharePoint deployment option out.
For instance, will the application will be deployed as a Feature Solution with farm or site scope?
Will the application take advantage of the new SharePoint 2013 application model, (i.e SharePoint Apps)
This simple deployment diagrams already got me on a design mode and I can see that some application component could be decoupled from our target platform be it ASP .NET or SharePoint.
So I came up with modified deployment diagram.
Please note that Service layer can be deployed on the same server where the Presentation and Data access layer will reside. I decided to put it in separate deployment node as it also could run as a self hosted server outside IIS
In this design the service layer could be implemented as a set of RESTFUL services. We could implement the application RESTUL Api using either WCF or the new kid on block "ASP NET Web API". I tend to favour Web API as it has less over head than WCF and our default application protocol is HTTP anyway. If the application was to support other communication protocols like raw TCP/IP or UDP then WCF would be my first choice.
For SharePoint this design would work well because the SharePoint client object model supports RESTFUL services. The improvement on the design is that our service layer can be nicely decoupled of the hosting environment (i.e. SharePoint).