2012-01-20 37 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); 
} 

我喜欢第二个方法更好,因为我觉得自己的控制器应直接委托工作出来,服务层应该做大量的工作。

它似乎也遵循DRY原则,因为如果我有多个控制器需要创建User对象,我不会重复任何代码。编写单元测试也是如此 - 我可以简单地将所有参数传递给服务对象。

但我也看到了第一种方法,我想知道是否有一些优势,我没有看到。

回答

1

我会用第二种方法,因为它是干的。

第一种方法是好的,但不是DB实体,您应该传递DTO,您可以使用它来在服务内部填充DB实体。我不会从服务中暴露DB实体,以便将DB层与表示层分离。

相关问题