Looking for opinions on this:
I have broken out various responsibilities into separate objects. However, many of these objects have dependencies on each other. All of these objects are adhering to interfaces so I’m not tied to an implementation. I’m concerned about the dependencies between objects and the potential for circular dependencies. Is this a symptom of bad design? What have other people done to separate responsibilities and manage dependencies? Thanks.
What is important is that object models have Low Coupling and High Cohesion. That means that things should depend on other things only when they have to ( Coupling ) and that they should do one thing and only one thing ( very well ) ( Cohesion ). There is no simple answer about when to make these decisions other than experience ( which means learning from mistakes ) will be your main driver. There are lots of Design Patterns for addressing coupling ( Facade, Composite, Memento, Decorator, etc ). Cohesion is usually just a refactoring exercise to move things into or out of Classes when you start working with them.