Я пишу приложение для расписания, которое будет использоваться сотрудниками и одобрено/отклонено супервизорами. Расписание имеет разные разрешения, и только определенные лица могут выполнять определенные действия (например, только супервизор может утверждать расписание и только в том случае, если он принадлежит сотруднику в списке сотрудников супервизора).PHP - шаблон дизайна дизайна Hellp
Я пытаюсь выяснить, как структурировать список бизнес-объектов (моделей). Существуют различные проверки, которые мне нужно выполнить, прежде чем я могу ссылаться на такие методы, как GetTimesheet или SaveTimesheet или ApproveTimesheet. Смотрите следующий псевдо-код для понимания того, как мое приложение должно работать:
GetTimesheetByUserIdAndMonth:
-Validate parameters like UserId, Month-Year value
-Check Permissions:
- If Logged In User is A Supervisor, then see if Timesheet belongs to either this user or to a user under Supervisor's list of Employees
- Else, check if Timesheet belongs to logged in User
SaveTimesheet
-Validate parameters like UserId, Month-Year value
-Check Permissions (same as above)
-Check if user has write ability for timesheet (for example if user had already submitted timesheet before then he can't re-save or re-submit)
SubmitTimesheet
-See if user has a supervisor assigned
ApproveTimesheet, RejectTimesheet
-Logged in User must be a Supervisor, otherwise throw an error
Я думаю, я должен был бы класс MyAccount для человека, вошедшего в, класс пользователя, чтобы представить человека, который в расписание относится к классу Timesheet и, возможно, некоторому классу Validation.
Может ли кто-нибудь сказать мне, как лучше всего построить этот код и какие классы и методы проверки должны иметь? У меня уже есть этот код, работающий в 100% процедурный код ... его очень трудно читать и поддерживать. Я не ищу полную информацию о реализации, просто общую архитектуру/структуру класса. Пожалуйста, дайте мне несколько идей и предоставьте мне несколько psuedo-code, как выполнить вышеуказанные задачи. При необходимости я могу предоставить более подробную информацию.
Заранее спасибо.