如何处理MVC设计模式中的其他方法

时间:2017-06-27 11:15:02

标签: java laravel oop design-patterns model-view-controller

当我们使用MVC模式开发时,碰巧需要使用其他方法来实现我们模型的基本操作。

一个例子是 agregate getter ,它返回持久性基础上用户记录的总数。

int getUsersCount();

这些方法的最佳位置在哪里?在模型中?在控制器?

特定SDK /语言之间有什么区别吗?

  • Java EE
  • 的Android
  • Laravel
  • vanilla PHP
  • ...

感谢。

1 个答案:

答案 0 :(得分:-1)

我发现这篇文章讨论过它:here it is a overview comparison between Purist OOP and Anemic Domain Model

概述基本上解释了实现MVC设计模式的方式有两个很大的不同。

第一种方法是在模型相关的控制器类中集中方法,如本例中的聚合getter。

例如,在Android中,当我们在本地或远程数据库中持久化模型,或者我们必须对其进行序列化或对其进行编组时,我们倾向于创建这种类型的ModelController类并且具有贫血带有清洁POJO模型的MVC模式。

class User extends MySuperModel{
    int id;
    String username;
    //getters and setters
}

class UserController{
    User getUserById(int id);
    int getUsersCount();
}

另一种方式,包括集中模型类本身的所有方法,例如在Laravel中(需要控制器主要控制视图的后路由和预渲染,但不是往往有其他方法,也不容易实例化。在这种情况下,我们有一个受控域 MVC,其他模型相关的方法应该在模型类本身。

class User extends Eloquent\Model{
    protected $fillable = ['id', 'username']
    function getUserById($id);
    function getUsersCount();
}