Skip to content

CoolTowel Reference Architecture

hasith edited this page Jul 24, 2013 · 13 revisions

CoolTowel Background

Last couple of years, we have been refering HotTowel, JumpStart and other reference architectures on many software "Product" development projects. "Product" development has different needs comparatively to other deciplines (such as bespoke application development) and overtime we discovered many learnings of a stable product architecture.

The CoolTowel architecture depicts several important practices architects should consider in creating a stable arhitecture for web based software Products.

Note: The name 'CoolTowel' is inspired by John Papa's excellent work with the HotTowel template (http://www.johnpapa.net/hottowel/).

What it is based upon?

The future of modern technology stack

  • Entity Framework 6 Beta
  • ASP.NET MVC 5 prerelease
  • Durandal 2.0 Beta

Industrial standard tools

  • Twitter Bootstrap
  • KnockoutJS
  • RequireJS
  • BreezeJS
  • Toastr
  • and some more

What do you get?

Data Access Layer

  • Repository and Unit of Work based Data Layer
  • Generic repository base classes for entities
  • EF reporitory initialization with seed data

REST API Layer

  • OData based REST API with advanced query support ($expand, $filter, etc.)
  • Generic controller base classes for CRUD operations over REST API

HTML5/JS based Client Frontend

Sample application demonstrating complete technilogy stack integration

  • Server calls via a common DataService
  • Browser history/routing/bookmarking
  • Patterns for elegand knockout bindings
  • Complex components having child components sharing the same model
  • User notifications with toastr.js

Durandal 2.0 Beta framework for

  • Component lifecycle management
  • Routing and navigation
  • Dialogs, Events
  • Widgets, and more

Tests

  • Generic Integration Tests for Data Access Layer (repositories)
  • Generic Integration Tests for REST API (repositories)

What's comming up?

  • EF migration support
  • Progressbar
  • Responsiveness
  • Optimization support
Clone this wiki locally