Archive for 'Architecture'

ASP.NET MVC Round up

ASP.NET MVC enables developers to easily build web applications using a model-view-controller pattern.  It enables full control over HTML markup and URL structure, and facilitates unit testing and a test driven development workflow. It is free and fully supported by Microsoft.  Below are some links that I feel provide a great roundup for tracking ASP.NET MVC.

Rob Connery is building a storefront using ASP.NET MVC. He has over 26 webcasts and blog posts, documenting the building of an e-commerce storefront using ASP.NET MVC. He uses Domain-Driven-Design and other design patterns to build his storefront. I recommend his entire series for anyone starting out on ASP.NET MVC.

Scott Guthrie on ASP.NET MVC. I don’t think ScottGu needs any introduction.

Phil Haack is the Project Manager on the ASP.NET MVC project. He gave a great presentation at MIX’09 called Microsoft ASP.NET Model View Controller (MVC): Ninja on Fire Black Belt Tips. He followed it up with a blog article on his site where he uses JQuery Grid with ASP.NET MVC.

Scott Hanselman gave a great presentation at MIX’09 demonstrating his nerd-dinner application built on ASP.NET MVC.

Stephen Walther has a series dedicated to ASP.NET MVC. He provides some great tips, sample code and much more on his blog.

Related Links

Solid Architecture: S.O.L.I.D Principles

Domain Driven Design (DDD) and Service Oriented Architecture (SOA) can basically be defined as aggregate functions of principles, patterns, and most importantly Object-oriented concepts. In order to build a highly scalable and reliable architecture, it is very important for us to follow these important design patterns, and when they are coupled with a set of good principles, results in a great software. One such set of rules that should not be overlooked are S.O.L.I.D principles, first coined by Robert C. Martin.

Single Responsibility Principle (SRP) A class should have only one reason to change.
Open/Closed Principle (OCP) Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification
Liskov Substitution Principle (LSP) Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T.
Interface Segregation Principle (ISP) The dependency of one class to another one should depend on the smallest possible interface.
Dependency Inversion Principle (DIP) Depend upon abstractions (interfaces), not upon concrete classes.

There are plenty of resources available on the Internet on these principles. So far, I really liked Steven Bohlen’s video presentations on dimecasts.net.

Also, I recommend the following books to get a good picture on building overall good software.

codecomplete agilerobert

Rules Engines

Rules Engine can be defined as a framework that is used to manage and automate business rules. It is very useful to have such a framework in place specially when these business rules need to be modified frequently. Often, we as software architects need to design our applications to handle such frequent change in business rules. There are several rules engines available in the market. Some of the rules engines  available are;

.Net

  • Biztalk Server
  • ILog Rules for .Net

Java

  • Jess
  • Jboss Rules
  • ILog JRules

Ruby

  • Ruleby
  • Ruby Rools

Most of these engines, or frameworks use Dr. Charles Forgy’s Rete Algorithm. Rete is Latin for Net or network. It is a pattern matching algorithm comprising of rule compilation and rule execution. Before adopting this in your enterprise, every Architect must understand this algorithm to know the various architectural implications that it can have on the overall system like performance, scalability, etc., Also, just because you implement a rules engine, it does not mean that you can put all your business requirements and rules inside it, as some of the business rules cannot be expressed. Most often, these business rules cannot be expressed by the business users, and have to be coded by programmers.