2012-01-20 9 views
1

私は、サービスを大量に使用するMVCアプリケーションに取り組んでいます。私の質問は、エンティティを作成するときに、コントローラ内から、またはサービス内からそのプロパティを移入する必要がありますか?SOA + MVC - エンティティのプロパティはどこに設定しますか?

例1 - コントローラ内からの取り込み:

// MyController.php 
function someAction() { 
    $name = $_POST['name']; 
    $gender = $_POST['gender']; 

    $user = new User(); 
    $user->setName($name); 
    $user->setGender($gender); 

    $userService->createUser($user); 
} 

// UserService.php 
function createUser($user) { 
    $this->saveToDb($user); 
} 

は、実施例2 - サービス内からの取り込み:

// MyController.php 
function someAction() { 
    $name = $_POST['name']; 
    $gender = $_POST['gender']; 

    $userService->createUser($name, $gender); 
} 

// UserService.php 
function createUser($name, $gender) { 
    $user = new User(); 
    $user->setName($name); 
    $user->setGender($gender); 

    $this->saveToDb($user); 
} 

私は、コントローラは、単に仕事を委譲すべきであると感じているため、私は、より良い第二のアプローチが好きサービス層は重い持ち上げをしなければならない。

私はUserオブジェクトを作成する必要がある複数のコントローラがあるため、コードを繰り返さないため、DRYの原則にも従っているようです。ユニットテストを書く場合も同じです。すべての引数をサービスオブジェクトに渡すだけです。

しかし私は最初の方法も使用しているのを見てきました。私には見えないという利点があるのでしょうか?

答えて

1

私はDRYと同じように2番目の方法を使用します。

最初のアプローチはOKですが、DBエンティティの代わりにDTOを渡す必要があります。このDTOを渡して、サービス内のDBエンティティを埋め込むことができます。私は、プレゼンテーション層からDB層を切り離すために、DBエンティティをそのサービスから公開しません。

関連する問題