Я работал над проектом, который выполняет работу по обслуживанию дома, но мне трудно моделировать роли, которые играют разные люди и компании. Если это имеет значение, система написана с использованием zendFramework, с mySql в качестве хранилища данных.
Я сделаю все возможное, чтобы объяснить, но я не очень хорошо разбираюсь в языке моделирования данных.
конечным пользователем этой системы является компания по обслуживанию, которую я буду называть HammerTime в следующих примерах. Это то, что я до сих пор:
WorkOrderRequests поступают из двух основных источников:
Источник 1: Резидент >> requestWorkOrder >> PropertyManagementCompany >> requestWorkOrder >> HammerTime
Источник 2: HomeOwner >> requestWorkOrder >> HammerTime
Я думаю, что все эти организации являются клиентами, но только PropertyManagementCompanies и HomeOwners являются «прямыми» клиентами, которые будут получать счета. Также резидентом может быть HomeOwner , если он владеет собственностью, в которой он проживает. Кроме того, чтобы добавить еще один слой бизнес-логики, все Резиденты принадлежат Свойству и все запросы от резидента к PropertyManagementCompany выполняются PropertyManager
Когда WorkOrderRequests входит в HammerTime , они сохраняются как WorkOrders , а затем обрабатываются несколькими различными способами.
Обработано 1: HammerTime >> assignWorkOrder >> Сотрудник
Обработано 2: HammerTime >> contractOutWorkOrder >> ServiceVendor
Я думаю об этих сущностях как о работниках, и их легче моделировать.
Проблема в том, что я хотел бы иметь возможность предоставить доступ ко всем этим объектам в систему на основе их типов ролей. На мой взгляд, я хотел бы сгруппировать их всех в Member абстрактный суперкласс, который может быть разделен на два дополнительных абстрактных класса Person и Company .
тогда Person и Company могут быть далее разделены на более конкретные классы, такие как Employee или PropertyManagementCompany и т. д.
Куда подойдет Свойство , поскольку это не человек или компания. Я думаю, может быть, это будет Участник
У меня такое чувство, что я что-то упускаю, потому что что-то не так. Так что любые идеи или указатели будут с благодарностью.