.Net BluePrint wiki

Presentation layer frameworks

Framework: ASP.NET MVC

It is the web framework of our choice. WebForms will be used in specific cases when it speeds up a feature development, and no (or little) complexity overhead involved.

JavaScript libraries

We think that a combination of the following frameworks will best serve our goals:

  • Prototype as the basic JS library for coding.
  • JQuery for UI manipulations.
  • Dojo for widgets
  • Scriptaculuos for effects.
  • Silverlight - Should be used from version 4 and above (currently Beta), when fat client on the web is required, while considering its limitations - SEO unfriendly, and small install base.

Frameworks we don't recommend

We will not recommend the following:

  • WebForms as the main web framework.
  • MS Ajax
  • Silverlight 3 and below

Data access frameworks

ADO.Net

  • Is outdated and cumbersome
  • Can be recommend it only for tiny projects with weak developers not able to master new and more sophisticated technologies.
  • So the modern approach to Data Access is ORM (Object-Relational Mapping)

Entity Framework

  • easy for beginner
  • GUI builder and drag-and-drop generators in Visual Studio
  • positive experience on using it with small well-structured database
  • bad feedbacks on using this ORM on big tables, which were not designed from scratch: bad database layout is automatically copied into code
  • limited customization
  • significantly slower than LINQ or NHibernate

LINQ

  • not easy for beginner, requires understanding of advanced C# language features
  • is suitable also for non-relational data access (XML for example)
  • drag and drop and intellisense supported for existing database
  • other database support may be limited (mysql, etc)

NHibernate

  • excellent support of different DB vendors, with no or little changes in code
  • can be used when DB still does not exist and auto-generate database according to code
  • powerful customization abilities - when existing DB schema is messy, classes still can be created in a clean way
  • performance - faster than LINQ in write, slower in read
  • good community, sometimes better than MS support according to feedbacks
  • easier to understand than LINQ, but no built-in VS support
  • very familiar for developers with Java background

Business Logic frameworks: Dependency Injection

Ninject

Lightweight, fast tool, focuses only on Inversion of Control & Dependency Injection

Recommended when Dependency Injection is required, won’t supply any other services

  • Lightweight, won’t bloat your project with its code
  • Focuses only on Dependency Injection, thus very fast
  • Requires referencing Ninject.Core everywhere in your code to add [inject] attributes
  • Uses type binding in code (i.e. references and not configuration files) , thus, binding cannot be altered after the application is compiled.

Unity Application Block

Part of MS Patterns & Practices, a lightweight extensible Dependency Injector

  • Open source
  • Part of EntLib
  • Seems to rely too much on XML Configuration

Spring.NET

Inversion of Control & Dependency Injection are only a part of the deal. Spring.NET covers many more areas, such as AOP, Unit Testing, Data Access (Spring.NHibernate), Web services and Web Extensions.

Heavy, everything included – use when you need more than just Dependency Injection

  • Familiar to Java Converts
  • Clean (if you are used to) Syntax for Wiring
  • Many out-of-the-box components
  • Wasn’t invented at Microsoft
  • Can look like magic at the beginning
  • Now has MS proprietary competitor (MEF)
  • Configuration intensive – lots of XML