Thursday 17 December 2009

Composition for happy ORM?

None of the polymorphic mapping strategies for ORM seem to work very well.
  • Table per class hierarchy - Is too evil to mention.
  • Table per class - Very similar to composition?
  • Table per concrete class - Makes queries and FKs painful.
Composition seems to map nicely to relational databases. Also in the real world composition can model the world nicely.

Wednesday 7 October 2009

A database is for life not just christmas

If your wiz bang framework requires the database to be in a particular style (random fields, denormalisation) then dump your framework before you contaminate your database. If your design has any merit the database should be around much longer and have different clients that don't want your rubbish in their face.


Thursday 3 September 2009

How can software be so bad?

Currently working on a database system that costs customers serious amounts of cash per year and big money for configuration. It does pretty much what the charity case management system database we wrote but where as that takes about a week to produce a 250 field database this system takes months to do something vastly simpler. It is also slow and near impossible to use. Some of it can be put down to short timescales and people without the right skill sets but the bulk of it seems to be just lack of a tidy mind. Muddling different concerns and concepts. Ah well.

Friday 28 August 2009

database as persistence bucket

RDBMS are rubbish as persistence stores for OO systems so why is it the norm to use them? It leads to sensible people using them as just a persistence bucket. Using them as the point of integration is seen as being very old fashioned. Maybe due to their age rather than elegance the tools alone make it very attractive.

Tuesday 25 August 2009

Data legacy

Nice things like automated testing means coders can relax when it comes to code structure and actual implementation but definitely does not mean we can relax about data legacy. External APIs, even for people, build up a very hard to change legacy. Even more often forgotten is the rubbish that sometimes gets put into customer databases in a hurry to get a new version out.
Seems to me it is worth being very anal and putting a lot of thought into everything that will build up legacy. Public APIs, UIs, datastores...

Thursday 16 July 2009

Eclipse and CTRL-t

To remind myself in the future as much as anything. In interface heavy code bases like EJB3 apps CTRL-t in eclipse is very handy for finding the actual code you want to look at rather than the interface. btw I really need to get out more given how ugly I find "public" keyword on interface methods.

Monday 13 July 2009

Logging hell

How did we manage to make such a mess of logging in Java? Yet another project that has been all the way through log4j, commons-logging (the worst), slf4j and managed to leave traces of all of legacy behind. Need to be brighter than me to work out where the logs are going. slf4j is miles better than commons-logging but don't think I've ever actually needed the abstraction.

Wicket Ajax

(Particular comparison with GWT)

  • pro - very good for HTML only
  • pro - good security - e.g. just as Java removed pointer arithmetic Wicket doesn't expose property paths, ids etc by default
  • con - request synchronized on Session so Sjax
  • con - very heavy server side requirements
  • con - very complex code base
  • con - ugly API compared to Swing etc
  • con - every click goes to server (unlike GWT)
  • pro - very helpful community
  • con - requirement for ids is more annoying than useful
  • con - dual HTML and component tree is annoying
  • con - components must be serialised! Real pain.
  • con - if server state is lost can't just get user to login again as state of UI is on the server.
  • con - more care needed as action runs in same VM as page state (e.g. ensure tx does not fail before updating page state).

Value anti-pattern

It seems painfully common that software engineers decide to build a database on top of a relational database. Your lovely RDBMS can model columns, relations (duh), datatypes in a wonderful way and do all sort of clever optimisations when you query this data. When the wunderkind decides to have a table with columns name and value, to stuff any old rubbish in, they throw away all this good stuff and invent a very broken wheel on top of a very good wheel. Alfresco CMS manages to make very simple things very complicated and slow by using this pattern.