我正在加載Zend 1.11並與Doctrine 1.2集成,並且已經閱讀了很多關於使用服務層的內容。服務層:它應該隱藏域模型的API嗎?
就我的理解,服務層位於業務邏輯之上,在控制器和域模型之間添加一個層。
但是,我被困在如何實際實現服務層,主要是因爲我有點不確定應該定義的服務類的類型的API。
首先,給定服務等級,App_Service_Memberships
將與App_Model_Group
和用戶處理業務實體組作爲App_Model_User
:
應的服務類的API的通過接受或返回的情況下暴露的類的組合物說域模型?
或者,服務類的API是否應該只接受或返回像整數或數組這樣的本地數據類型來隱藏類的組成?
喜歡說:
class App_Service_Memberships
{
public function addUserToGroup($user_id, $group_id)
{
//Create or retrieve domain models here and operate on them; handle persistence.
$membership = new App_Model_Membership();
$membership->member->user_id = $user_id;
$membership->group->group_id = $group_id;
$membership->join_date = date("Y-m-d H:i:s");
$membership->save();
return $membership->toArray();
}
public function getMembersOfGroup($group_id)
{
$groupMembers = array();
//Query objects here with Doctrine or the ORM of choice...
foreach($results as $membership){
$groupMembers[] = $membership->member->toArray();
}
return $groupMembers;
}
}
在控制器會在整數只是作爲參數傳遞(數據來自表,或輸出從其他服務類)服務類,完全無視所涉及的領域模型。
,而不是:
class App_Service_Memberships
{
public function addUserToGroup(App_Model_UserInterface $user, App_Model_Group $group)
{
//Create or retrieve domain models here and operate on them; handle persistence.
$membership = new App_Model_Membership();
$membership->member = $user;
$membership->group = $group;
$membership->join_date = date("Y-m-d H:i:s");
$membership->save();
return $membership;
}
public function getMembersOfGroup(App_Model_Group $group)
{
$groupMembers = array();
//Query memberships here
foreach($results as $membership){
$groupMembers[] = $membership->member;
}
return $groupMembers;
}
}
在控制器並得到其範圍內處理域模型,並將其傳遞給服務類?
你認爲哪種更好的做法?