Как эта структура класса должна быть написана на php? Композиция, Наследование, Декоратор? - PullRequest
0 голосов
/ 14 января 2012

У меня есть база данных, где люди могут одновременно быть сотрудниками, клиентами и членами компании.Моя система администрирования позволяет мне редактировать свойства объектов Person, Employee, Customer и Member на независимых страницах.

Теперь я хотел бы иметь возможность вызватьPerson, но вы сможете просматривать и редактировать свойства своих сотрудников, клиентов и участников на одной странице.Создание представления для этого сценария тривиально, но я хотел бы сделать это правильно с правильной спецификацией базового класса, наследований, составов и агрегатов и т. Д.

Я понимаю, что сотрудники, клиенты и участникине может существовать без человека, поэтому для моей страницы администратора я думаю, что мне следует создать новый класс UberDude, который будет составом классов человека, сотрудника, клиента и участника.Я также хотел бы использовать этот новый класс как часть коллекции, чтобы я мог нарисовать таблицу всех людей и посмотреть, являются ли они сотрудниками, клиентами или членами.Что-то не так, и я не могу разработать код для структуры классов.Есть идеи?

1 Ответ

0 голосов
/ 14 января 2012

Звучит как проблема наследования.У вас есть Person, но тогда этого человека можно описать в более конкретных терминах, таких как Employee или Customer.

Обычно в объектно-ориентированном программировании вы начинаете с базового класса (в этомinstance, Person), а затем добавьте свойства в расширяющиеся подклассы.Таким образом, Person может иметь имя, Employee может иметь номер сотрудника, но это не имело бы смысла, если бы они были Customer.

. Что вы могли бы сделать, так это реализовать декораторшаблон, и просто продолжайте строить на своем Person классе.Я не уверен, как вы в настоящее время строите профили людей в своем текущем приложении, но в псевдокоде это будет выглядеть следующим образом:

<?php

$id = intval($_GET['person_id']);

$employee = new Employee(new Person($id));

Это создаст экземпляр вашего класса Person, тогда это будетбыть переданным в ваш Employee класс, чтобы получить дополнительные свойства и методы, характерные для сотрудника.

...