[kforge-dev] KForge architecture

John Bywater john.bywater at appropriatesoftwarefoundation.org
Fri Mar 17 19:46:38 UTC 2006

Hello everybody!

For sometime, Rufus and I have wanted to describe KForge architecture.

Hence, below is a technical note to describe KForge architecture.

If would be delighted to try to provide answers to any questions that 
may arise, or to expand on any areas of interest.

With my best regards,


Technical Note: KForge Architecture

This technical note describes the architecture of the KForge software 


The KForge architecture follows Martin Fowler's Patterns of Enterprise 
Application Architecture.

This technical note describes the most significant patterns that have 
been applied to KForge.

However, firstly, some justification of the application of design 
patterns, as such, is required.

Why Use Design Patterns?

In his famous discussion about software development, Fred Brooks 
reported that "the conceptual components are taking most of the time".

Therefore the limiting factor with software development is the formation 
by the system developers of adequate design concepts. To a first 
approximation, the software crisis happens when the concepts held by the 
developers are not adequate to the task of developing the software system.

Over the past years, design patterns have increasingly formed the common 
conceptual basis for designing software systems, and for communicating 
software system design. Without them, software developers don't have 
very much to talk about, struggle to maintain an understanding of the 
system as it develops, and then fail to maintain civil relationships 
with their collegues.

Patterns are almost semi-pre-fabricated conceptual components. Using 
them saves lots of time. They help develop a common understanding of the 
system under development and software design more generally. They 
contribute to the development of relationships within the development 
group because they give everybody something worth talking about. 
Therefore, they contribute significantly to avoiding the software crisis.

What Patterns Have Been Applied In KForge?

To form a good understanding of the KForge software system, it is 
sufficient to understand the most important patterns. These are:

Dependency Injector
- an application builder composes application features at runtime

Layer Supertype
- layers of abstraction separate major concerns

Presentation Layers
- web interface (currently, an application of Django)
- command line interface
- [future possiblity] internet services interface

Service Layer
- defines set of available operations, and co-ordinates application 
response for each operation

- collection-like interface for accessing domain objects

Domain Model
- object model of domain that incorporates both behaviour and state

Data Mapper
- moves data between objects and a database

Single Table Inheritance
- domain model class has a database table with columns for all fields in 
the domain class inheritance hierarchy

- runtime linking (and de-linking) of application extensions

More information about the kforge-dev mailing list