In software development, there is no single right way to do things. Not one natural way to model data. Not one correct way to design API. Neither there is one true way to design your classes.
Trial and error
Software development activity, like most things we do in life, is not something our human minds and bodies evolved to do. There are also no mathematical theorems that prove the only single valid solution. There were no ancient masters who would decide on and write down the dogmas of one true way of programming.
In one respect, creating software is like any other craft developed by humans. It does not come with a manual – rather, it is born through trial and error.
There is no single way to do things – just some ways are better than others and even that depends on a situation and context.
Actually, all our crafts evolve through the same mechanism. Human creativity allows us to experiment with using our brains and bodies in ways and towards ends, nature did not predict. We try things out and our attempts yield various results. Some satisfying, some not. Gradually we learn that some approaches yield consistently better results than others. But we should expect that as long as we practice the craft, it will continue to evolve and sometimes render old approaches obsolete.
There are no rules
In the field of software development, you will hear about things like design principles. You will use automated tools for analyzing source code to find spots that go against coding rules. Those things represent the hard-won experience of programmers from across the industry and it is best to heed all those things.
But don’t be fooled by words like ‘principle’ or ‘rule’, because there are none. There are just best practices, tips and guidelines. As soon as you start treating any such things dogmatically, it is just a matter of time when you will blindly take the wrong path or wrong solution.
At best, it will cost you some time. At worst it will cost you your reputation.