Rya*_*ohn 156 model-view-controller asp.net-mvc
我有一个下拉列表,显示从表到最终用户的值.我想按字母顺序排序这些值.
根据适当的MVC设计,我应该在哪个层放置我的排序逻辑:模型,视图还是控制器?
编辑:在回答LarsH的问题时,"你的意思是代码决定了什么样的顺序吗?或代码执行排序?",我最初指的是确定所需排序顺序的代码.
Izk*_*ata 62
(来自维基百科)
订单是模型的一部分,所以它应该去那里."所有数据"的原始提取将按排序顺序返回数据,并且没有用于选择排序顺序的界面.
View将提供与Controller交互的接口(例如上升/下降箭头),并且Model能够很好地理解数据,以便对数据执行请求的排序.但是,与(1)中不同,数据的原始拉动不一定必须进行排序.
View不理解正在进行中,还有一种能够显示选择了哪个排序方向的能力.不要把逻辑放在那里.
排序功能可以完全在视图中,在一种情况下(我可以随意思考;可能还有更多):
一种"哑"排序,其中所有数据已经在视图中,并且它不必使用任何领域知识来进行排序.例如,非常简单的字符串或数字比较.例如,当结果可能跨多个页面分割时,这在网页上的搜索结果中是不可能的.
Kyl*_*leM 47
(注意:这个引用和引用来自@ dasblinkenlight的答案,但我们不同意我们对它的解释.阅读他的帖子并自己决定).
根据MVC描述,
控制器可以向其关联视图发送命令以更改视图的模型表示(例如,通过滚动文档).它可以向模型发送命令以更新模型的状态(例如,编辑文档).
排序逻辑(例如,排序比较器/排序算法)属于模型,因为它包含业务规则和状态数据.由于改变模型数据的排序方式完全属于"更改视图的模型表示"类别,因此控制器负责通过调用model.changeSortedState()方法进行"排序".
das*_*ght 18
根据MVC描述,
控制器可以向其关联视图发送命令以更改视图的模型表示(例如,通过滚动文档).它可以向模型发送命令以更新模型的状态(例如,编辑文档).
据此,排序逻辑属于控制器,因为改变模型数据的排序方式完全属于"更改视图的模型表示"类别.
编辑:为了澄清评论中提到的多个误解,"排序逻辑" 不是执行排序的代码; 它是定义排序的代码.排序逻辑将各个项目彼此进行比较以建立顺序(例如,通过其实例IComparator<T>
)或包含构造用于由外部系统排序的对象的逻辑(例如,通过其实例IOrderedQueryable<T>
).此逻辑属于您的控制器,因为它需要与应用程序的"业务"方面相关的知识.执行排序完全足够,但它与实际执行排序的代码是分开的.排序的代码可能在您的视图中,在您的模型中,甚至在支持模型的持久层中(例如您的SQL数据库).
non*_*ont 10
以上都不是.排序是业务逻辑,业务逻辑不属于三者中的任何一个.并非您的应用程序中的每一段代码都是模型,视图或控制器.
我通常在我的MVC应用程序中做的是我有一个执行所有业务逻辑的服务层.服务层中的方法应该具有干净,简单的API以及具有良好命名的参数.然后,您可以从控制器调用这些方法来操作模型中的数据.
从这个意义上说,排序是"在控制器中",但是进行排序的代码本身不应该在控制器中实现,只能从那里调用.
绝对不是控制器:它将消息发送到视图和模型,但应尽可能少地工作.如果用户可以通过通知模型或视图来更改控制器处理请求的排序.
也许是View,如果它是一个纯粹的View事物.如果应用程序在没有排序的情况下也能正常工作,那么排序只是表示的一部分,应该放在视图中.
如果排序是域的固有部分,它应该放在模型中.
所以选择是 - 您认为这是域业务逻辑或表示逻辑的一部分.
如果您正在实现适当的MVC Model2或经典MVC模式,那么我会说模型层提供的数据排序应该由视图对模型层的请求触发.查看请求有序数据,模型层提供它.
但是,由于您使用的是ASP.NET MVC对MVC模式的解释,这与您的标准MVC略有不同 - ViewModel实例应该从模型层请求有序信息(出于某种原因,ASP.NET框架认为应该调用模板"views"和视图应该被称为"viewmodels"..这很奇怪).
我通常会在控制器中按照其他答案保持与模式一致.请参阅下面的推理.
我一直在考虑这个并阅读答案和相关材料,并且实际上我会说这将取决于您的应用程序:
它是一个中型/大型应用程序和/或具有多个与之关联的UI(即Windows应用程序,Web界面和电话界面).
如果它是一个定义良好的单一UI网站,并且您使用的是EF Code First之类的东西,并且您没有或无意创建服务层,并计划使用简单的开箱即用扩展方法来实现它:
如果与上述BUT相同,则无法使用开箱即用的扩展方法实现.
总结一下:
教条答案:服务层
务实回答:通常是控制器
归档时间: |
|
查看次数: |
13069 次 |
最近记录: |