The IBM San Francisco project plays with similar issues as we do: http://www.ibm.com/Java/Sanfrancisco/ Some correspondences: simple business rule == command == personality complex business rule == command == APPC == class graph view -- Karl Pricing and Discounts Provides the ability to establish and maintain both inbound and outbound pricing information. Order Management has the sophistication to establish both base prices and prices using limits. Its discount process has the flexibility to establish various types of discount structures for the various types of orders. Both pricing and discounts are associated with business rules and policies that designate the information to be used for a particular order situation. http://www.ibm.com/Java/Sanfrancisco/concepts/concepts.html Intent The business environment changes over time and the application supporting that environment needs to be able to react to those changes, while minimizing the impacts to the overall application. An additional need is to provide a way to update a group of objects at once while ensuring that if the complete group is not updated successfully, the changes are all reversed. The business logic may span many business objects (classes), which makes the placement of this logic within one particular object impractical. Concept Commands (similar to the Command pattern in the Design Patterns book) are objects with the sole purpose to provide a separate location for a specific piece of business logic processing. By focusing this logic into a single object, the particular business logic changes can be modified without impacting various users, thereby isolating the users from the changes. Benefits The implementation of business logic affecting several distinct business objects through Commands clearly brings advantages to maintenance and also allows application designers to isolate activities. By encapsulating the business logic in a Command object, using programs are isolated from changes in that piece of logic. It then becomes much easier to replace, modify, or enhance a certain piece of logic without impacting its users. Command objects also localize business tasks, making it easier to locate them. This approach increases the flexibility of the framework.