This is all my opinion and, of course, is subject of being wrong and is certanly is, because I’m human.
Having different point of view is perfectly acceptable as long as you valid arguments giving a specific context. If they aren’t, admit them and learn for the next time.
@tony_marston404. For what I read so far, if your Person creates the Address because than that is your business assumption, that is your context, but make sure you have consistency. All business have assumptions. Write it down, make it a unit test, and have good reasons for it.
You asked me how do you define “wisely”. And my answer to you is, see the context, seek the different solutions and weight them, in some terms, like “development speed”, “knowledge”, “testability”, “maintenance”, “…” any of your functional and non-functional requirements. BTW, in terms of OO programming, having a SOLID architeture with Depedency Injector is always a item that I tend to seek in my “perfection”, in my “best scenario” given the context.
@TomB sorry to disagree on you, but “Best” is relative, is an adjective by it’s english definition. Nokia “used to be the best”, two years ago they were bought. I simply cannot say “They are the best”. If this was true, shouldn’t they still be “the best”. So, what is the context? In comparison with who? I can, however state that “I’m the best guy maintaining this app” (because there’s no one else that knows it), but I cannot say that “I’m the best developer in the world” (I’ve got flaws in here). So: “I’m the best but I’m also not the best”.
Another example, on the company that I work on, the stakeholders imply that we have CMMI Level 3 certification (because of its business) and in our implementation we need to follow a somehow solid waterfall (yeah, its deprecated I know! ), but still it is required for having that certification, its a business rule implied by the stakeholders, from who we get paid from. So, I must discover the business requirements, make the technical design and then, design the test over that technical design. I simply cannot use TDD in this scenario, so in my company “TDD isn’t a best practice”, it violates the rules.
Now, as principle, I never neglect SOLID and DI “best practices”.
Hope you understand my point of view, don’t get me wrong, I understand yours as a principle (a truth made my flawed humans like me )