Eric Armstrong has a couple of interesting ideas on how to design programs to accomodate UI’s, yet remain unit-testable (is that a word?). These ideas include having the UI classes poke at the model, yet never query it, managing interactions of the GUI in a separate layer, and using builders..