Over the past couple years I’ve received quite a bit of positive feedback on my “Build Your Own CAB” series on design patterns for building desktop applications. Unfortunately, a lot of the feedback is “it’d be really nice if you’d get around to finishing the series.” After all, I didn’t really publish anything that actually related to building composite applications. I am wrapping up this series plus quite a bit more (+ incorporating the work that Martin Fowler already did on these topics but didn’t publish), but as part of a book for Addison Wesley tentatively entitled “Presentation Patterns.” I’ll try to blog a lot more about the book next month as I shift to working on it a lot more. I’m strictly focusing on design patterns rather than any particular technology. At a guess, I’d say that half of the samples will be C#/WPF and the rest will be Java, WinForms, and even a couple JavaScript samples.
Here’s the rough outline at the moment. If there’s something you’d particularly like to see more or less of, feel free to comment on this (please).
- What’s so hard about
building a User Interface?- Look at everything
that’s going on here - How do I test this?
- How do I connect
all this together?
- Look at everything
- Separated
Presentation- The travails of
using Active View - The Humble Dialog
Box (narrative) - Separated
Presentation (narrative) - GUI Architectures
(pattern) - Passive View (pattern)
- Supervising
Controller (pattern) - Presentation Model
(Model-View-ViewModel) (pattern) - Communication
between the View and Presenter (narrative)
- The travails of
i. By events
ii. Direct communication
-
- What’s the Model?
(long narrative) - Model Based
Validation with the Notification Pattern
- What’s the Model?
- The Mechanics of the
View- Managing Screen State (narrative)
- Flow
Synchronization (pattern) - Observer Synchronization
(pattern) - Flattener (pattern)
- MicroControllers
(pattern) - Embedded Controller
(pattern) - Screen State (pattern)
- Complex Screens
- Composite
Controller (pattern) - Layout (pattern)
- Composite
- The Application Shell
- Coordination
between Screens (narrative) - Screen Activation
Lifecycle (narrative) - Presenter First (narrative)
- Application Shell
- Application
Controller - Screen Collection
- Screen Subject
- Layer SuperType
- Coordination
- Event Coordination
- Coordination
between Screens - Latch (pattern)
- Event Aggregator
(pattern) - Command (pattern)
- Coordination
- Crafting a Domain
Specific Language (not well defined yet, but could be a great chapter) - Modularity
- Using an Inversion
of Control Tool - Bootstrapper
(pattern) - Registry (pattern)
- Presentation Chooser (pattern)
- Using an Inversion
- Communicating with
the Server- Message Bus
- Command Executor
(pattern)
- Message Bus
- Automated Testing
- Unit testing the
Presenter layer - Unit testing the
View - Subcutaneous
Testing - Strategies for User
Interface Testing - Screen Driver
(pattern)
- Unit testing the
Oh, and my take on “is M-V-VM the same thing as Presentation
Model?” I say yes. I think it’s the exact same pattern just described
differently by Fowler and the Microsoft guys. Think Leipzig and Sir
Isaac Newton discovering Calculus at the same time.