2016-08-14 53 views
2

我在寫一個時間表應用程序,供員工使用並由主管批准/拒絕。時間表具有不同的權限,只有具有特定角色的人才可以執行某些操作(例如,只有主管可以批准時間表,並且只有屬於主管員工列表中的員工)。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 

我想我需要的是誰登錄的人,一個用戶類來表示人誰是一個我的帳戶類時間表屬於,Timesheet類,也許某種驗證類。

有人能告訴我如何最好地構建這個代碼,以及我應該有什麼樣的類和驗證方法?我已經有了這個代碼在100%程序代碼中工作......這是非常難以閱讀和維護。我不是在尋找完整的實施細節,只是一個整體的課堂架構/結構。請給我一些想法,並提供一些僞代碼如何完成上述任務。如有必要,我可以提供更多細節。

在此先感謝。

回答

0

在你的問題我可以理解3種不同的問題來解決。

  1. 分層結構
  2. 權限
  3. 驗證

一種可能的模式來解決這個問題是Composite圖案。下面列出了一些通用的指導原則。

  • 使用可用於引用各種用戶(監督者,同伴等)的抽象。像'用戶'。
  • 使用組合來保持層次。
  • 抽象'User'應該有像getWritePermission:boolean這樣的方法來提供權限。
  • 驗證應與核心結構分離。您應該使用單獨的工作人員類來維護這些邏輯,這將在api調用的較高級別上調用。
0

我認爲你使用的是mvc方法。如果是這樣,你已經走上了正軌。 每個用戶操作都需要一個控制器。你已經寫下了這個方案。 棘手的部分是你如何存儲用戶:主管關係?它是1:n還是m:n?無論如何,我會用一個用戶和時間表模型(由數據庫支持),然後根據需要去。您不需要在類對象級別區分用戶本人和其他用戶。 你是你自己的法官。似乎需要一個時間表驗證程序類和用於檢查用戶權限的類(除登錄系統外)。 想想以下 UploadTimesheetController - > TimesheetValidatorClass - > TimesheetModel - >數據庫 ViewTimesheetController - > CheckUserHasAccess - > TimesheetModel - > TimesheetView 這有點簡單,不正式正確,但我希望你明白了。