Tuesday, February 24, 2009

Design for Everything

The more code I write the complexity of what I want to do increases, and the number of design variables increase.  I find that I have to design for ...
  • testing - code to interfaces that lend themselves to unit testing
  • remote procedure call - remote APIs must be call by value
  • security - keep JAAS in mind for authentication and access control
  • user interaction - design APIs to provide hooks for user feedback, support user cancel requests, or implement the observable pattern to allow UI listeners for view changing events
  • monitoring - logging, JMX, timers
  • extensibility - OSGi implements a nice plugin architecture
  • transactions - ability to rollback multipart operations on failure after partial processing
  • cacheing - ability of client to cache data from server in a consistent way
  • injection and late binding - I like GUICE for dependency injection, but am lately struggling with marrying the GUICE's preference for data binding at application startup with a UI design that allows runtime definition of injectable parameters.