ranked in terms of “usefulness” — details, easy-to-grasp, ….
) de-couple — the design is by default tightly coupled
) quality assurance — of the model. How do we know for sure that the right classes were used, and hundreds of attributes are set exactly right? Complications
* runtime binding
* object behaviours determined at run time based on neighbours whose exact types are determined at runtime. Consider setAid()
=> recursive dumper
=> unit tests
) /tacit-knowledge/ instead of documentation
) other deveopers are mostly “offsite”
) error handling — not too lenient as to return unusable objects, not over-reaction as to crash the system
) multiple-inheritance — an acknowledged necessary evil when converting from LISP
) testing is tedious
* doesn’t allow “micro cycles”. When you want to add a debugging statement or make any minor change, usually you must shutdown both server and swing client, edit, recompile, (perhaps re-deploy,) restart server and swing client, go through the client dialog to specify your input, wait for a few seconds to see result.
* Worse still, you may need to run a corba agent to interface with a remote corba server
) mem leak, out-of-mem in load test
) perf — Many design considerations
=> element filters
=> pre-fabricate common element objects before trying out templates
) thread safety — open call …
—- hard to lj, or otherwise not useful:
) validation — non-standard line records abound. A well-known issue. large number of possible errors in input (line record) just like error checking
) AI to choose the right template