I wish software had recipes for architecture. Design patterns are not the answer IMO. The problem with such approaches is that they tend to focus on the patterns themselves. Great software architecture emerges from modelling the problem itself, rather than trying to shoehorn the problem into a predefined set of patterns.
Start with deeply understanding the problem and let it guide you to choosing the right abstractions, dependencies, and arrangement of the various pieces into a system. It's more of an art than science: learn how to use a brush and mix colors then follow your vision, rather than using a set of cookie cutters that tend to produce something that obscures the obvious, and usually simpler, solution to the problem.
I wish software had recipes for architecture. Design patterns are not the answer IMO. The problem with such approaches is that they tend to focus on the patterns themselves. Great software architecture emerges from modelling the problem itself, rather than trying to shoehorn the problem into a predefined set of patterns.
Start with deeply understanding the problem and let it guide you to choosing the right abstractions, dependencies, and arrangement of the various pieces into a system. It's more of an art than science: learn how to use a brush and mix colors then follow your vision, rather than using a set of cookie cutters that tend to produce something that obscures the obvious, and usually simpler, solution to the problem.