Я новичок в моделировании предметной области, поэтому простите меня за пару элементарных вопросов. Мой первый вопрос касается понимания того, когда моделировать доменные отношения. Иногда мне кажется, что все классы каким-то образом связаны с большинством других, и я не совсем понимаю, когда мне следует напрямую моделировать эти отношения (сохраняя ссылку в одном классе на другой).
Например, скажем, у меня есть класс Person, связанный с набором заказов, и каждый заказ связан с набором продуктов (простите за невообразимый пример). Каждая из этих сущностей имела соответствующую таблицу в базе данных. Если я пишу некоторую клиентскую логику, которая имеет дело с продуктами, с которыми связан человек (через заказы этого человека), кажется заманчивым иметь коллекцию Person.Products, тем более что я мог бы создать некоторый SQL для получения этой коллекции без необходимости вернуть коллекцию Persons Orders. Это нормально или плохой дизайн? Если бы это был лучший способ справиться с этим?
Во-вторых, как насчет ситуаций, когда отношения носят контекстуальный характер? Продолжая предыдущий пример, скажем, что некоторая бизнес-логика, которую я хочу запустить в методе человека, должна иметь дело со всеми связанными с человеком Заказами, которые содержат определенный Продукт (т.е. подмножество коллекции Заказов Человека). Я могу создать некоторый SQL, который будет очень легко возвращать именно это подмножество. Вопрос в том, где я могу выставить результаты? Должен ли я поместить в Person метод, который принимает параметр Product и возвращает коллекцию Orders, чтобы клиентский код выглядел так?
person.OrdersContaining(Product p)
Должны ли сущности иметь несколько подобных методов для предоставления различных подмножеств своих отношений, или у Person должна быть только одна коллекция Orders, а подмножества обрабатываются каким-то другим способом?
Спасибо