В настоящее время я планирую дизайн новой системы, мне нужно будет закодировать код, взаимодействующий с внутренним API. Я рассматривал композицию объекта и наследование и решил, что самой правильной процедурой в моей ситуации было бы идти с композицией над наследованием, поскольку мои объекты имеют «отношение» друг к другу, а не «есть».OO Design Patterns with Perl
Теперь я нахожу, что, поскольку некоторые объекты зависят от других, могут быть случаи, когда «объект A» имеет атрибут, который является «объектом B» и атрибутом «объект C», однако «объект B» также имеет атрибут «объект C».
В надежде, что эта аналогия будет сделать больше смысла:
Допустим, у меня есть компания, которая продает коробки, который содержит кошек и радиоактивные вещества внутри них, которые не могут или никогда не вступают в реакцию:
Я продаю мой продукт организациям. Пользователи регистрируются у меня, указав организацию, к которой они принадлежат. У организации может быть много пользователей или нет. У пользователя должна быть организация, к которой она принадлежит. Я отслеживаю свой продукт (ящик как сущность и кошка (ов) как сущность) и к какой организации они принадлежат. Я также отслеживаю кошек и коробки, в которых они находятся. У организации может быть много коробок с множеством кошек в любом из них. Коробки могут быть пустыми. Некоторым пользователям разрешено покупать новые ящики, а другим разрешено смотреть на них.
Аутентификация & Авторизация управляется API, с которым я взаимодействую.
Насколько объектные отношения идут:
$user has a => $organization that it belongs to
$user has a => $role that dictates what it may or may not do.
$box has a => $organization that it belongs to
Сейчас:
$cat has a => $box that it belongs to
И
$cat has a => $organization that it belongs to ?
ИЛИ
$cat has a => $box that it belongs to WHICH has a => $organization that it belongs to
Что было бы правильным решением? Существуют ли другие аспекты, которые я не рассматриваю, которые могут сделать один вариант более жизнеспособным, чем другой?
В этой системе я буду использовать шаблон дизайна MVC
с использованием Perl Catalyst
и Moose
.
Спасибо всем, кто внес свой вклад.
Привет, там. Прежде всего, спасибо за ваш ответ. То, что вы говорите, имеет смысл - и это позволит мне поддерживать чистый дизайн patern в системе. Я буду проектировать объекты только для того, чтобы заботиться о том, что непосредственно влияет на них, и отбрасывает что-либо дальше по цепочке, в которой она не нужна. Я бы дал вам голосование, если бы у меня было достаточно уличного кредита. Как только я достиг 15 требований к репутации репутации, я вернусь и проголосую :) – nmap911
@ nmap911 - если ответ был полезен, вы можете (и должен :) также отметить как «принято» (checbox слева от него). Рад, что я мог бы дать полезную обратную связь – DVK
Отлично, спасибо за головы. Отмечено. Также у меня есть уличный кредит, поэтому у меня есть голосом – nmap911