Sunday, August 22, 2010
« CSLA 4 WP7 progress update 2 | Main | Public Facebook page »

My personal area of focus is on application architecture, obviously around the .NET platform, though most of the concepts, patterns and techniques apply to any mature development platform.

Application architecture is all about defining the standards, practices and patterns that bring consistency across all development efforts on a platform. It is not the same as application design – architecture spans applications, while design is applied to every specific application. Any relevant architecture will enable a broad set of applications, and therefore must enable multiple possible designs.

It is also the case that application architecture, in my view, includes “horizontal” and “vertical” concepts.

Horizontal concepts apply to any and all applications and are largely orthogonal to any specific application design. These concepts include guidelines around authentication, authorization, integration with operational monitoring systems, logging, tracing, etc.

Vertical concepts cover the actual shape of applications, including concepts like layered application structure, what presentation layer design patterns to use (MVC, MVVM, etc), how the presentation layer interacts with the business layer, how the business layer is constructed (object-oriented, workflow, function libraries, etc), how the data access layer is constructed, whether broad patterns like DI/IoC are used and so forth.

In today’s world, an application architecture must at least encompass the possibility of n-tier and service-oriented architectures. Both horizontal and vertical aspects of the architecture must be able to account for n-tier and SOA application models, because both of these models are required to create the applications necessary to support any sizable suite of enterprise application requirements.

It is quite possible to define application architectures at a platform-neutral level. And in a large organization this can be valuable. But in my view, this is all an academic (and essentially useless) endeavor unless the architectures are taken to another level of detail specific to a given platform (such as .NET).

This is because the architecture must be actually relevant to on-the-ground developers or it is just so much paper. Developers have hard goals and deadlines, and they usually want to get their work done in time to get home for their kid’s soccer games. Abstract architectures just mean more reading and essentially detract from the developers’ ability to get their work done.

Concrete architectures might be helpful to developers – at least there’s some chance of relevance in day to day work.

But to really make an architecture relevant, the architect group must go beyond concepts, standards and guidelines. They need to provide tools, frameworks and other tangible elements that make developer’s lives easier.

Developers are like electricity/water/insert-your-analogy-here, in that they take the path of least resistance. If an architecture makes things harder, they’ll bypass it. If an architecture (usually along with tools/frameworks/etc) makes things easier, they’ll embrace it.

Architecture by itself is just paper – concepts – nothing tangible. So it is virtually impossible for architecture to make developer’s lives easier. But codify an architecture into a framework, add some automated tooling, pre-built components and training – and all of a sudden it becomes easier to do the right thing by following the architecture, than by doing the wrong thing by ignoring it.

This is the recipe for winning when it comes to application architecture: be pragmatic, be comprehensive and above all, make sure the easiest path for developers is the right path – the path defined by your architecture.

Monday, August 23, 2010 2:09:26 AM (Central Standard Time, UTC-06:00)
I think a solid architecture is the most important part in any application development. Also, CSLA adoptance would be much better if there is some kind of architecture guidance document and/or "real life" sample. I know that every application needs a different design, but I think that community would be very helpful in that matter.

Csla desperately needs one "big" sample that includes all "horizontal" and "vertical" concepts, on example:

- data access layer (maybe something that is database agnostic, e.g. NHibernate? ) with some kind of unit of work/transactions/repository/DTO, at least 2 different databases supported (Oracle, MS SQL...)
- testable business layer for WPF/ASP.NET, Silverlight which includes every OOP paradigm (e.g. master detail) based, off course, on CSLA BO.
- Real life GUI thats reusable in SL and in WPF. Something that includes composite screens, modules, navigation, dynamic menus, MVVM, Prism...
- MS test project for every layer
- all horizontal concepts

So, in other word, application should be production ready.
With time community can improve such architecture or build other samples with different solutions.

Maybe such example should be some sort of CRM, invoicing, HRM...
mesh
Wednesday, August 25, 2010 7:22:02 AM (Central Standard Time, UTC-06:00)
mesh

I agree that a sample project(s) would be nice. However, I'm afraid it would be obsolete the day it was released - at least major parts of it. The framework Rocky is talking about must, by definition, be different for nearly every organization because of different requirements, hardware, budgets, etc.

To add to the problem, software and hardware platforms are changing nearly every other month! Once you settle on a UI platform (Silverlight, WPF, ASP.Net, Flash, etc), which version will you use? New versions seem to be popping up at alarming rates. For most projects, the version you start developing with will change two to four times before you are ready to release a product. The same goes for middle tiers, storage tiers, service tiers, etc. Communication and security practices are constantly changing. Heck, even XML is in constant flux.

A "standard" is necessary, yet seemingly impossible to define. Competition is good, but dayam! Rocky is doing major work just to keep CSLA current. I'm sure he'll agree that unless you specialize, you'll soon be swimming in "software sauce" with no way out.
Mark
Wednesday, August 25, 2010 8:47:12 AM (Central Standard Time, UTC-06:00)
This post wasn't really about CSLA. I was putting together some information for a possible presentation to the architecture group for a large organization (Magenic client) and thought I'd repurpose some of it as a blog post.

CSLA has different challenges than your typical IT architecture group. CSLA is much more like a software product than it is like an internal framework an organization might create.
Wednesday, August 25, 2010 10:20:10 AM (Central Standard Time, UTC-06:00)
Yes, I totally agree on the subject matter. I am considered myself as a developer and very please with my decision chosen CSLA for my application framework. Yes the learning curve is quite steep, but can be picked up by any good developer rather quickly. It has a standard set of based interfaces (CRUD,rules,authorization,etc...) that can be applied for all your biz objects. Once a developer understand the basic concepts, he/she can be very productive(i.e code gen). The only pain point from my experience is debugging databinding issues. Similarly, if you look at ruby and rails framework, it offers a very similar based interfaces application framework which I think is quite powerful,productive, and successfully framework. A concrete standard foundation framework which to build on top of it.
Andy
Wednesday, August 25, 2010 10:50:16 AM (Central Standard Time, UTC-06:00)
@Mark

I think that sample project would be for learning and understanding purposes. I am very well aware that every project needs different architecture, design and even a different methodology. But lets be honest, many of software production companies use a same internal framework, that they had "cooked" years ago, for all their projects.
I have spent days googling about architecture and how to build large business application the best way. I have tried putting everything i know in some kind of layered application framework...

My conclusion is that any framework is better than no framework.
Yes there may be new Silverlight version every year, but I think a good framework is helping in situations just like that.
A sample project that is test driven, MVVM, based on Silverlight, NHibernate and CSLA shouldn't be to hard to building and maintain. Community can always replace parts of such framework with different implementations.

CSLA users can simply use it as a ready made solution or customize it to fit their needs.

For start maybe Rocky could open new forum just for a discussion about application architectures that are using CSLA for its middle layer?
mesh
Sunday, August 29, 2010 6:42:44 PM (Central Standard Time, UTC-06:00)
Spot on Rocky. One challenge in providing much of the hotizontal and vertical architecture offerings within an organisation is actually getting management recognition and backing that it is productive to do so. Another is selling developers on atually using assets produced, especially when dealing with a large number of developers who see the use of the latest and greatest open-source widget as (a) their right and (b) almost a badge of honour.
Comments are closed.