私は Zend 1.11 と Doctrine 1.2 との統合に取り組んでおり、Service Layers の使用について多くのことを読んでいます。
私の理解では、サービス レイヤーはビジネス ロジックの上にあり、コントローラーとドメイン モデルの間にレイヤーを追加します。
しかし、サービス層を実際に実装する方法に行き詰まっています。これは主に、サービス クラスにどのタイプの 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;
}
}
コントローラーがそのスコープ内のドメイン モデルを処理し、それらをサービス クラスに渡す場所はどこですか?
どちらがより良い習慣だと思いますか?