Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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
Java 设计问题-在控制器或视图中排序数组?_Java_Jsp_Model View Controller - Fatal编程技术网

Java 设计问题-在控制器或视图中排序数组?

Java 设计问题-在控制器或视图中排序数组?,java,jsp,model-view-controller,Java,Jsp,Model View Controller,我正在开发一个基于MVC的应用程序。我有一个包含客户端名称的数组。数组是从数据库填充的 控制器(Java)将该数组传递给视图(JSP),视图呈现该数组。客户端列表需要按升序显示。此外,如果有名为XYZ的客户机,则该XYZ客户机应始终显示在列表的第一位。还有其他类似的规则 问题是,从设计角度来看,排序应该发生在哪里?排序应该发生在控制器(Java)还是视图(JSP)中 作为旁注,我还需要提到,与JSP/JavaScript相比,我更喜欢用Java编程。如果没有“正确”或“错误”的方法,那么我肯定更

我正在开发一个基于MVC的应用程序。我有一个包含客户端名称的数组。数组是从数据库填充的

控制器(Java)将该数组传递给视图(JSP),视图呈现该数组。客户端列表需要按升序显示。此外,如果有名为XYZ的客户机,则该XYZ客户机应始终显示在列表的第一位。还有其他类似的规则

问题是,从设计角度来看,排序应该发生在哪里?排序应该发生在控制器(Java)还是视图(JSP)中

作为旁注,我还需要提到,与JSP/JavaScript相比,我更喜欢用Java编程。如果没有“正确”或“错误”的方法,那么我肯定更喜欢在控制器中对其进行排序


另外,从性能的角度来看,哪一个更好

排序可以在SQL查询本身中完成(如果排序不复杂),然后您可以通过控制器将数据传递给视图

但是,如果您有一大组无法在SQL语句中全部实现的规则,我只需要在控制器中实现

您总是可以创建一个存储过程并调用它,在我看来,这确实是一种偏好


就为了MVC模式,我喜欢把它放在控制器中,因为控制器就是用来做这类事情的

排序可以在SQL查询本身中完成(如果排序不复杂),然后您可以通过控制器将数据传递给视图

但是,如果您有一大组无法在SQL语句中全部实现的规则,我只需要在控制器中实现

您总是可以创建一个存储过程并调用它,在我看来,这确实是一种偏好


就为了MVC模式,我喜欢把它放在控制器中,因为控制器就是用来做这类事情的

从设计角度来看,我认为控制器应该不知道视图如何显示数据;它的排序和其他规则纯粹是一个显示约束;见鬼,日期根本不需要在控制器中排序,它可能在
HashMap
或类似的文件中


也就是说,在控制器中排序可能更有效。

从设计角度来看,我认为控制器应该不知道视图如何显示数据;它的排序和其他规则纯粹是一个显示约束;见鬼,日期根本不需要在控制器中排序,它可能在
HashMap
或类似的文件中


也就是说,在控制器中排序可能更有效。

从设计角度来看,控制器应该控制排序规则,但不应该自己执行排序。相反,它应该将此任务委托给模型。在理想情况下,控制器不应对数据进行任何修改,只告诉模型它希望如何修改数据

不幸的是,现实常常会干扰理想的设计:当允许用户控制排序时,例如通过单击列标题,通常会使用允许视图对数据进行排序的快捷方式来减少模型(通常作为数据库实现)的往返次数,从而减轻RDBMS的负担。这一决定的一个不幸的副作用是与分页缺乏一致性:视图中的排序对当前页面上的数据进行排序,而忽略其他页面中应在当前显示之前或之后出现的数据。这一缺点通常作为“特性”呈现给用户


在您的案例中,排序是“业务规则”的一部分:“XYZ”记录必须保持在顶部,并且存在“其他此类规则”,这表明排序不是纯粹的视觉问题。考虑设计某种类型的“分类描述符”,它可以保存关于排序的“元数据”。控制器应创建此“排序描述符”的实例,并将其传递给模型进行处理。模型应“解释”描述符的内容,并以正确的顺序生成数据。

从设计角度来看,控制器应控制排序规则,但不应自行执行排序。相反,它应该将此任务委托给模型。在理想情况下,控制器不应对数据进行任何修改,只告诉模型它希望如何修改数据

不幸的是,现实常常会干扰理想的设计:当允许用户控制排序时,例如通过单击列标题,通常会使用允许视图对数据进行排序的快捷方式来减少模型(通常作为数据库实现)的往返次数,从而减轻RDBMS的负担。这一决定的一个不幸的副作用是与分页缺乏一致性:视图中的排序对当前页面上的数据进行排序,而忽略其他页面中应在当前显示之前或之后出现的数据。这一缺点通常作为“特性”呈现给用户

在您的案例中,排序是“业务规则”的一部分:“XYZ”记录必须保持在顶部,并且存在“其他此类规则”,这表明排序不是纯粹的视觉问题。考虑设计某种类型的“分类描述符”,它可以保存关于排序的“元数据”。控制器应创建此“排序描述符”的实例,并将其传递给模型进行处理。模型应该“解释”描述符的内容,并以正确的顺序生成数据。

默认排序顺序应该在数据库中处理。如果数据库设计还考虑将正确的索引(如聚集索引)放在适当的位置,那么它可以进行高度优化来完成这些工作