2015-11-04 86 views
3

我有一個相當熟悉的設計,我有一個每個模型的DAO,然後是一個使用DAO並擁有所有業務邏輯的模型服務類。服務層應該將對象還是id作爲輸入?應該是對象嗎?

我對如何正確創建這些服務類有點困惑,特別是我的參數應該如何,我的回答是什麼樣的。假設我有一個JSON動作,我可以讀取JSON,然後加載我需要的對象,然後將這些對象傳遞給服務,或者我可以簡單地傳入ID,然後在服務方法中加載對象。

令人困惑的是,我可能會在控制器動作中執行一些這些操作,或者我可能會在服務層中執行這些操作。這些類型的問題是否有明確的答案?

僞代碼如下:

UserDao 
    save 
    update 
    delete 
    getById 

UserService 
    private userDao 

    GetUser 
    Update 

我會用我的服務層同時在Web應用程序和API層。

我能有這樣的方法:

def GetSomething(userId: Int, locationId: Int, ...): Something = { ... } 

我也可以把它想:

def GetSomething(request: GetSomethingRequest): GetSomethingResponse { ... } 

它是一個或另一個,或者我應該都混?

+1

有趣的問題。 API層是什麼?路線或控制器?爲什麼你將它與Web應用程序區分開來? – Kris

+1

您是否在尋找特定於scala和play框架的思想和想法,還是更一般的? –

回答

0

首先,我認爲使用情況類IDS是一個不錯的德興等都將採用UserId(id: Int)LocationId(id: Int) 比方說你有一個這樣的模式:User(id: UserId, locations: Set[Location])

然後讓說,你想成爲像/user/1/location/1 要求你控制器需要通過返回Location json來處理這個問題。爲了做到這一點,你需要 1.查找ID User(可能不存在 - > NOTFOUND(帶ID用戶)) 2. User找到Location(可能不存在 - > NOTFOUND(位置與ID)

考慮到所有這些因素,你需要一個服務:def find(userId: UserId):Option[User] = {...}然後在您的User添加功能找到的位置:高清findLocation(ID:LocationId):選項[位置]把 findLocationUser防止所謂的「貧血模型'

更新的東西有點不同。你的Location可能會ve域自動更新(例如:版本,狀態等)。因此, 您需要另一個類,例如:LocationData(它可以映射到表單,json等)和Location上的方法def update(data: LocationData): Location,它將應用更新。

相關問題