Java 设计问题-在控制器或视图中排序数组?
我正在开发一个基于MVC的应用程序。我有一个包含客户端名称的数组。数组是从数据库填充的 控制器(Java)将该数组传递给视图(JSP),视图呈现该数组。客户端列表需要按升序显示。此外,如果有名为XYZ的客户机,则该XYZ客户机应始终显示在列表的第一位。还有其他类似的规则 问题是,从设计角度来看,排序应该发生在哪里?排序应该发生在控制器(Java)还是视图(JSP)中 作为旁注,我还需要提到,与JSP/JavaScript相比,我更喜欢用Java编程。如果没有“正确”或“错误”的方法,那么我肯定更喜欢在控制器中对其进行排序Java 设计问题-在控制器或视图中排序数组?,java,jsp,model-view-controller,Java,Jsp,Model View Controller,我正在开发一个基于MVC的应用程序。我有一个包含客户端名称的数组。数组是从数据库填充的 控制器(Java)将该数组传递给视图(JSP),视图呈现该数组。客户端列表需要按升序显示。此外,如果有名为XYZ的客户机,则该XYZ客户机应始终显示在列表的第一位。还有其他类似的规则 问题是,从设计角度来看,排序应该发生在哪里?排序应该发生在控制器(Java)还是视图(JSP)中 作为旁注,我还需要提到,与JSP/JavaScript相比,我更喜欢用Java编程。如果没有“正确”或“错误”的方法,那么我肯定更
另外,从性能的角度来看,哪一个更好 排序可以在SQL查询本身中完成(如果排序不复杂),然后您可以通过控制器将数据传递给视图 但是,如果您有一大组无法在SQL语句中全部实现的规则,我只需要在控制器中实现 您总是可以创建一个存储过程并调用它,在我看来,这确实是一种偏好
就为了MVC模式,我喜欢把它放在控制器中,因为控制器就是用来做这类事情的 排序可以在SQL查询本身中完成(如果排序不复杂),然后您可以通过控制器将数据传递给视图 但是,如果您有一大组无法在SQL语句中全部实现的规则,我只需要在控制器中实现 您总是可以创建一个存储过程并调用它,在我看来,这确实是一种偏好
就为了MVC模式,我喜欢把它放在控制器中,因为控制器就是用来做这类事情的 从设计角度来看,我认为控制器应该不知道视图如何显示数据;它的排序和其他规则纯粹是一个显示约束;见鬼,日期根本不需要在控制器中排序,它可能在
HashMap
或类似的文件中
也就是说,在控制器中排序可能更有效。从设计角度来看,我认为控制器应该不知道视图如何显示数据;它的排序和其他规则纯粹是一个显示约束;见鬼,日期根本不需要在控制器中排序,它可能在
HashMap
或类似的文件中
也就是说,在控制器中排序可能更有效。从设计角度来看,控制器应该控制排序规则,但不应该自己执行排序。相反,它应该将此任务委托给模型。在理想情况下,控制器不应对数据进行任何修改,只告诉模型它希望如何修改数据 不幸的是,现实常常会干扰理想的设计:当允许用户控制排序时,例如通过单击列标题,通常会使用允许视图对数据进行排序的快捷方式来减少模型(通常作为数据库实现)的往返次数,从而减轻RDBMS的负担。这一决定的一个不幸的副作用是与分页缺乏一致性:视图中的排序对当前页面上的数据进行排序,而忽略其他页面中应在当前显示之前或之后出现的数据。这一缺点通常作为“特性”呈现给用户
在您的案例中,排序是“业务规则”的一部分:“XYZ”记录必须保持在顶部,并且存在“其他此类规则”,这表明排序不是纯粹的视觉问题。考虑设计某种类型的“分类描述符”,它可以保存关于排序的“元数据”。控制器应创建此“排序描述符”的实例,并将其传递给模型进行处理。模型应“解释”描述符的内容,并以正确的顺序生成数据。从设计角度来看,控制器应控制排序规则,但不应自行执行排序。相反,它应该将此任务委托给模型。在理想情况下,控制器不应对数据进行任何修改,只告诉模型它希望如何修改数据 不幸的是,现实常常会干扰理想的设计:当允许用户控制排序时,例如通过单击列标题,通常会使用允许视图对数据进行排序的快捷方式来减少模型(通常作为数据库实现)的往返次数,从而减轻RDBMS的负担。这一决定的一个不幸的副作用是与分页缺乏一致性:视图中的排序对当前页面上的数据进行排序,而忽略其他页面中应在当前显示之前或之后出现的数据。这一缺点通常作为“特性”呈现给用户 在您的案例中,排序是“业务规则”的一部分:“XYZ”记录必须保持在顶部,并且存在“其他此类规则”,这表明排序不是纯粹的视觉问题。考虑设计某种类型的“分类描述符”,它可以保存关于排序的“元数据”。控制器应创建此“排序描述符”的实例,并将其传递给模型进行处理。模型应该“解释”描述符的内容,并以正确的顺序生成数据。默认排序顺序应该在数据库中处理。如果数据库设计还考虑将正确的索引(如聚集索引)放在适当的位置,那么它可以进行高度优化来完成这些工作