cor*_*e24 8 model-view-controller asp.net-mvc razor asp.net-mvc-3
在ASP.net MVC的页面构成框架的批评中,我发现很难与任何东西争论.
http://www.matlus.com/problems-with-asp-net-mvc-framework-design/
特别是这些要点:
对于小型应用程序,我认为很多这些都不是很大的问题,但是在大型应用程序中,您希望重用大量共享组件,或者即使您只是拥有一个依赖于多个应用程序的大型应用程序后端信息源获取渲染视图所需的所有信息,它开始崩溃.
已经提出了针对这些问题的各种半解决方案,但是它们看起来不能很好地扩展或具有不期望的设计约束.
以下是一个示例应用程序场景:
好的,所以在asp.net mvc3中,假设您决定要共享包含50%常见UI标记的常见Razor布局.这有助于分离关注,因为应用程序开发人员不需要关注常见的ui,并且可以专注于特定于其专业领域的逻辑和视图.
但是,在这种共享布局需要数据(一些或多个模型类型的某些外观)来完全呈现自身的情况下,这完全崩溃了.您可能在页面上有独立元素,每个元素都需要特定的数据模型,例如:*主菜单模型*二级菜单模型*页脚链接模型*授权模型*页脚免责声明模型
并且这些模型中的每一个可以具有单独的源.因此,尽管您可以共享模板,但是没有一种简单的方法可以共享逻辑来构建每个模型 - 而且我所看到的绝对没有一个是通用的,可扩展的和高性能的.
我见过的一些解决这个问题的方法是:
还有其他情况(一些在stackoverflow上也可以看到),其中RenderAction()作为解决方案存在其他问题.例如,在循环中发出多个RenderAction()调用会导致所有这些控制器方法的串行执行.没有机会与RenderAction()并行.每个子控制器操作中的I/O绑定服务调用会导致整个呈现过程在I/O上等待.控制器只知道其直接视图和模型,并且没有任何内容可以全面了解视图内部的内容,以便并行化某些操作.
上述评论的作者在ASP.Net mvc之上开发了一个不同的UI模型,称为Quartz,允许上帝控制器对视图有深入了解,并且可以将每个视图模型交给视图模型,因此有机会并行化服务调用.构建这些视图模型的中心位置.我不知道这是否是提供克服问题的钩子的最佳设计,但看起来很有希望.
我的问题是,在ASP.Net MVC上构建复杂应用程序的最佳实践是什么,它可以干净地解决这些问题?我已经想到了几种可能性(尽管在ASP.Net MVC中没有一种可能是实用的 - 也就是TBD),但其他人必须已经遇到过这种情况.ASP.Net MVC中的设计模式是什么,或者什么是派克可以使这成为一个容易处理的问题?
我不确定我真的可以为这个“问题”做出更多贡献。我认为你对问题和解决方案、优点和缺点有很好的理解。
在我当前正在开发的应用程序中,我们通过拥有基本模型对象和基本控制器来利用其中的几种方法。为了最大限度地减少往返次数,我们在会话中存储一些数据,并通过重写基本控制器中的 OnActionExecuted 重新填充模型,并从上下文中获取模型并从会话中设置属性。
我当然也想听到任何精彩的解决方案,但我认为这些只是需要权衡的问题。
| 归档时间: |
|
| 查看次数: |
1600 次 |
| 最近记录: |