Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller MVC—是否应该允许视图直接与服务交互,而无需通过控制器_Model View Controller_Spring Mvc_Struts2_Wicket_Mvp - Fatal编程技术网

Model view controller MVC—是否应该允许视图直接与服务交互,而无需通过控制器

Model view controller MVC—是否应该允许视图直接与服务交互,而无需通过控制器,model-view-controller,spring-mvc,struts2,wicket,mvp,Model View Controller,Spring Mvc,Struts2,Wicket,Mvp,我的架构如下所示: View - Controller - Services class Person{ Long id; String name; String age; String address } 将其中一个视图视为个人详细信息页面。控制器调用 (Person) service.getPerson(1234) 并将Person实例返回到要显示的视图。服务获取人员的方式是通过RESTFul Web服务进行交互 restful服务以以下响应进行响应:

我的架构如下所示:

View - Controller - Services
class Person{
    Long id;
    String name;
    String age;
    String address
}
将其中一个视图视为个人详细信息页面。控制器调用

(Person) service.getPerson(1234)
并将Person实例返回到要显示的视图。服务获取人员的方式是通过RESTFul Web服务进行交互

restful服务以以下响应进行响应:


1234
无名氏
/person/1234/detail
上面的响应映射到一个名为Person的类,该类的外观如下:

View - Controller - Services
class Person{
    Long id;
    String name;
    String age;
    String address
}
一个完整的person对象可以通过让person通过

/person/1234
然后详细介绍一下

/person/1234/detail
假设视图需要显示人员详细信息

问题:

选项A:控制器是否应该调用服务上的getPerson()和getPersonDetails()来创建一个完整的Person实例

选项B:只需getPerson()并让视图调用person.getAge(),它将以某种方式(可能通过方面)触发细节获取

在选项A中,我失去了一些灵活性,但是,它使模型非常愚蠢,我认为这是一件好事,因为在视图中一个坏代码不能污染缓存,因此可能不会引起性能问题。p> 没有“应该”,这要看情况而定。在我看来,允许视图层进行延迟初始化是有风险的,因为很容易在无意中触发大量查询

此外,它使视图层相当智能,因为它现在控制数据初始化,而不是隔离控制器或模型中的数据获取。我喜欢愚蠢的观点,但这可能是偏见,而不是基于纯粹的技术观点