creadur-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Robert Burrell Donkin <>
Subject [GSOC] Rat: Past, Present and Future
Date Mon, 08 Jul 2013 19:46:45 GMT
The Past
(Here's my perspective on the history of Rat, as I recall it now. 
Hopefully it isn't too controversial. Please feel free to jump in with 

Rat arose from an itch of mine, and I coded the core of Rat as an 
experimental project, playing around with some unconventional 
architectural ideas. With hindsight, once other people wanted to start 
using it too, I really should have just sat down and completely 
rewritten the core code. By not doing so, I inflicted a world of 
craziness and pain on the community and ecology which sprang up around 
Rat. But by then, it had become hard to fix as higher quality peripheral 
code sprang up around it. Apologies.

The Present
Thanks to Manuel Suárez Sánchez and GSOC, we have an opportunity to 
adopt a more sane and sensible core design with good test coverage that 
will be easier and more enjoyable to maintain and comprehend going forward.

AIUI Google likes to be able to access a copy of the GSOC code, so I've 
suggested that Manuel codes on GitHub 
( Hopefully, this should allow 
people with GitHub forks (mine is to pull in Manuel's code 
and give encouragement and advice. Apache has recorded an ICLA for 
Manuel, so when we're ready we should be able to start patching in pull 

The Future
(Bit of a strawman - hopefully the community - including Manuel - will 
dive in with suggestions and we'll be able to gain consensus on a design 


I wonder whether it would be simpler and more conventional to factor out 
three phases:

1. scan the source, building a strongly-typed, immutable domain model
2. analyse this model against policies, building a strongly-typed, 
immutable report model
3. use the report to output descriptive text or XML, or errors and warnings

I also think that Rat would benefit from

* using more conventional dependency injection (see, for example, replacing the 
static methods that litter the code
* immutable domain objects with builders

Opinions...? Improvements...? Objections...? Alternatives...?


View raw message