[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,
John.
Technical Note: KForge Architecture
========================
This technical note describes the architecture of the KForge software
system.
Summary
======
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
Registry
- 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
Plugin
- runtime linking (and de-linking) of application extensions
More information about the kforge-dev
mailing list