There was a post somewhere were Rocky was explaining why he he did not return the broken rules of children (can't find the post but it did exist :-) ).
But the questions is why don't you want to loop through all the broken rules of your children? Your object A knows all its children (B, <other children> etc) so you can just override the BrokenRules property or you can provide a public method that returns a string with the description of all your errors (including these of the children) to be displayed on your UI.
If you do that on object A, you only do so once (if you want to be fancy you can have a base class and with reflection check for broken rules on all your children but I can imagine that complicated) and in 1 location so that's not so bad...
I think Joe's advice is sound but since I am also not fluent with some OO principles just a piece of advice. Extedning BusinessBase, though very important, is not that trivial and if not done properly (I am still paying the price for old design mistakes and trying to get them right) can lead to the need to refactor at some stage. It might be worth you reading the relevant posts about extending BusinessBase before embarking on your venture. They will be useful for your case but also prepare you for other issues you might encounter :-)
I use the base class method to list out all the broken rules of a root BO and all of its contained BOs. I think I have posted it before. It was based on the 1.x implementation of AllRules.vb. I think I might have called it GetAllBrokenRulesString or something like that (if you want to look for it.)
Your Root BO can get the list of broken rules from its children by looping over each of them and getting the string. Your requirement for NOT looping is artificial and you should forget it.
There is a small framework problem though.
Rocky's IsValid stops evaluating the broken rules for a collection the moment it finds a problem.
So if you have 10 items in the list and the 1st item is invalid you won't know the real state of the next 9 items if you use the framework. I sometimes add calls to CheckRules in my child BOs IsValid method so that a final check is done before determing the list of broken rules. (e.g. a user could have changed a value to unbreak a general rule.)
In my base class that inherits from the framework I override IsValid like this:
'JF 9/14/2006 - override CSLA2 code to look like this - no short circuiting involved here.Joe
Copyright (c) Marimer LLC