in reply to Avoiding circular references

Do Helper objects correspond one-to-one with A objects? If so, why are they separate objects? Could Helper instead be a mixin or even merged entirely into A?

Think very carefully about IS-A and HAS-A relationships. Sometimes circular references are unavoidable in an efficient implementation, but a data model with circular dependencies probably should be rethought.