Class Design

we have some great DBAs here and they use some great Data Modelers for creating databases and code (SQL/Xojo) related to them.

now what I am looking for is how all of us design Classes that are not related to databases/tables/SQL. do we use pen/paper? whiteboard/markers? software? dont use anything and just hack at the code until we get it right?

I have been doing some of pen/paper and some hacking at it as I go along. the later is not good for anyone. or at least not in my opinion. especially if the class(es) are complicated or if there is an hierarchy of classes/subclasses that are related to each other.

and before you ask I work on 3 desktops/platforms (Mac/Linux/Win, and in order as how much I use each one). I would prefer an app on Mac but willing to accept suggestions for the other platforms.


For teams:

pen and paper for me, but then i haven’t tackled anything very difficult…

I tend to use a mind mapper during the conceptual/planning stage. Once I have a decent outline I’ll export that into a task manager or outliner and work from that during coding. I’ll update the task/outline as I encounter obstacles, have ideas, etc.

It’s all pretty fluid in practice. I develop on Mac but mostly they’re vertical apps for WIndows. I use MindNode/iThoughtsX, TaskPaper, NVAlt, occasionally Omnigraffle.

A large white board

IF the classes are complicated enough, I use Curio which is a Mac app that one can think of as being a white board. I have a big monitor which helps. It is not nearly as fast as using a large real white board. But I do not have a large white board.

Sometimes the slowness of drawing things in a software program is actually helpful to the creative process at least for my brain. And the result is very neat. While I am drawing all these perfect lines and arrows and making lists and moving things around, some other part of the brain subconsciously seems to get a greater understanding of the issues involved in designing the class.

Long walks and pen & paper works for me (when it’s about complex classes I know will have a hierarchy).

For simple classes, thought and direct code is (usually) enough.

My mot used design tools:

  • DbSchema
  • StarUml
  • Balsamiq