Design Patterns Debate
This has been a pet peeve of mine for a long time and it is great to see a push towards a deeper review of the patterns used in the CF world and the strengths and weaknesses for different use cases.
For example, Sean commented that he typically doesn't use one manager per business object but per group of interacting business objects. I take the opposite approach and generate a service class for each business object. His solution allows you to create more elegant, well thought out and maintainable applications. Mine allows you to create a decently architected and maintainable app in however long it takes you to describe the properties of your business objects in XML (maybe 20 minutes)! I intend to build over 1,000 custom web applications next year. I'm guessing Sean is shooting for a few less. Different drivers, different approaches.
It is always really important to look at the forces that drive the selection of a pattern. To me it is also extremely important to continue to enrich the CF specific pattern literature by proposing heuristics (rules of thumb), documenting strengths and weaknesses of various patterns so future developers can more quickly access that experience and have more information to consider when deciding whether to use a pattern in a given situation.



You might want to google "patterns of enterprise architecture" to see what Fowler had to say, and if you can afford it, the book is very good and has much more info than the website. Also google "J2EE design patterns" - good descrption of DAO, front controller and a bunch of other web specific patterns there.
@Brad, It certainly takes a while, but just start with a pain point, learn a little, improve a bit and move on. If you have all your SQL in the views (say), put it into something, call if a DAO and see what happens. Then try wrapping it with a service class and making that the "api" for your model. Then try putting persistence methods in the business objects and then in the service class and note which works better for you (for remote access, you need a save() method in the service class, for instance. Then try using view helper CFCs for your views to get all the pagination and other concatenating stuff out of your CFML files to make them easier for designers to work with. It is just a matter of playing with things and making your code a little more maintainable every month. I'd just start with pain points (duplicated code, hard to maintain code, etc.) and look at what others are doing to solve those problems.