Ouch! But he's right. We've had our heads down the last few months pounding away at the new version. We're really close to revealing it.
Here's what's coming ...
What is Cabana?
Cabana is a Sales Order Management reference application demonstrating how to combine CAB, Smart Client Software Factory (SCSF), and my company's application framework product called DevForce (see www.ideablade.com to learn more about DevForce and to get a copy of our free "Express" edition).
It really is a composed application with distinct modules (you can make 'em come and go) and pages built up by "Page Controllers" from nested layout and widget views.
What Happened?Originally, I was just trying to show that DevForce and CAB are complimentary technologies. Then things got out of hand.
"Advanced" DevForce TechniquesI had another reference application called "Funhouse" built on my homebrew composite UI framework. It's purpose was to consolidate the tips and techniques I teach in my "advanced DevForce" classes - to put them in a shared context so you could see how they work together to deliver application value.
That was destined for the ash can as soon as I took CAB seriously. I can't maintain two reference applications nor recommend two competing approaches to application development. So a major goal was to port everything of interest from Funhouse over to Cabana and then kill Funhouse.
This release of Cabana completes that task.
Teach CABThe best way to learn CAB is to try to teach it. I've probably give over 30 CAB classes in the last year, ranging from 1 hour to four days straight. Every class has sent me scrambling back to the code to rip out some horror and replace it with something that makes more sense and is easier to understand.
Definitely a work in progress, made possible only by the patience and quizzical looks of my indulgent audience; many thanks to you all.
I've given special attention to Model-View-Presenter (MVP), an architectural pattern that everyone claims to love and no one seems to understand.
I've accumulated some "rules of the road" and I think I've got a good programming model for you. It's on full display in this release and will be appearing in a white paper "coming soon."
Support alternate WinForm Control SuitesI was pushed into providing a Cabana version for the Developer Express suite (hang in there, Infragistics lovers).
Nothing puts the stress on MVP like having to support multiple UI control suites.
To keep my sanity, I have to be able to swap a DotNet view for a DevEx view without changing the view's presenter or interface or the orchestrating "Page Controller" that composes and manages the composite views.
I've had to come up with new ways to coordinate view and presenter that are UI control agnostic (see my "ViewUpdateHandler" delegate) and figure out how to swing from one view family to another (see my "ViewFactoryService").
I haven't driven the separation all of the way through - many views are still DotNet controls sitting on a DevEx layout - but the remaining work is "obvious" drudge work that I'll complete "sometime".
The acid test will be my ability to "generate" two or three UI specific releases from a single code base - in under 1/2 hour.
I've got WPF in my sights for a more challenging test of the MVP proposition.
"So what?" you say; "I only want to work with one suite."
Two responses: (1) you may be whistling a different tune when you have to offer a WPF release and (2) view swapping could help simplify intractably complex white-labeling, internationalization, and role-based presentation problems.
Jump Start CAB/DevForce Application DevelopmentI never intended Cabana to be a framework for actual application development. That hasn't stopped a boat-load of customers from trying.
Our market place is amazingly eager to build on CAB now and they don't want to spend the months wandering in the weeds the way I have. They want to take Cabana and use it out of the box.
The customer is always right. So this release takes seriously the proposition that you should be able to
- unzip Cabana
- whack a few projects, files, and references
- start adding your own modules and views
- ship it
You should be able to take the "Cabana" out of Cabana and parade it around as your own work in just a few hours ... as long as you're willing to conform to Outlook-style navigation and the Cabana-style page paradigms.
We're working on the videos to do just that (did a 50 minute dry run the other day).
While this is something of a parlor trick, the real value is that you can learn the mechanics of a real application with the Cabana training wheels on. Once you've found your balance, you'll know how to break them off and ride on your own.
This effort has had startling (and salutary) effects on Cabana
- Vast re-organization with an emphasis on grouping like functionality in folders.
- Many classes were pulled "up" into the IdeaBlade.Cab projects that we have signed-up to maintain; this sharply reduces the number of classes you will have to think about as "yours" when you get started.
- Renaming and refactoring to remove inconsistencies and clarify responsibilities. This work is never done - "ToDos" still litter the code base - but we've made huge strides.
- Eliminated "do nothing" interfaces and presenters while flattening the inheritance hierarchies.
DocumentationThere has never been any documentation of Cabana. Just a PowerPoint from my class. We'll publish our first crack at it (over 50 pages). We'll have some how-to scenarios. We'll release some videos on related topics.
I've also be tasked with writing some white papers on topics like MVP and Dependency Injection. Those papers should show up in July.
Every time I think I'm going to hold the line, someone comes knocking with an urgent request. Here's what I think is new, in no particular order.
- Every page and popup editor in its own sandbox; changes in the sandbox are temporary until explicitly saved; saved changes are propagated across the application.
- EntityManagers and EntityManagerService wrap our PersistenceManagers and give them consistent configuration. Plug in strategies for saving and merging objects across EntityManager
- Extended CAB "Visualizer" with EntityManager Inspector for watching changes to the business objects in each sandbox as they happen. Visualizers are cool, easy to write, and great for debugging.
- ListConverterService delivers just-in-time ListConverters.
- ViewFactoryService for dynamic delivery of "named views."
- Revamped OutlookBar navigation with task links in each bar pane.
- Integrated DevForce Verification Engine (replaces BrokenRules)
- "ViewContexts" supercede view interfaces and other (failed) techniques for communicating between presenters and their (decoupled) page controllers. The base presenter class discovers its ViewContext in its parent WorkItem so no assignment is required. This will take some explaining but it works great so far, especially for complex Controller/Presenter configuration and eventing scenarios.
- Nested grid support (DevEx, Infragistics)
- Support for "Add New Row" feature in grids.
- Data update/insert/delete auditing in the middle tier (works in 2-tier too), configurable via metadata tables in the database.
- "Simple Searcher" feature brings an easy to use (and configure) collapsible search panel to all pages; easily extended to complex query panels.
What's Left?Are you kidding? There's a bunch of stuff I know how to do but haven't gotten around to yet (pluggable authorization, dynamic menu & toolbar management, controlled shut down) and then there is the stuff I don't know how to do yet. When I channel the dark spirit of Donald Rumsfeld I start to worry about the "unknown unknowns".
I think I'm done with the feature creep (yeah - right). The roadmap has some different, prominent markers on it:
- more documentation
- clear tutorials and videos
- better packaging and templates
- presenter unit testing (my gravest embarassment)
Enjoy the ride with me!