asp.net-mvc – Asp.net MVC页面构建的最佳实践是什么,允许并行
在ASP.net MVC的页面构成框架的批评中,我发现很难与任何东西争论.
http://www.matlus.com/problems-with-asp-net-mvc-framework-design/ 特别是这些要点: >无法访问视图或部分视图实例 对于小型应用程序,我认为很多这些都不是问题,但是在大型应用程序中,您希望重用大量共享组件,或者即使您只是拥有一个依赖于多个应用程序的大型应用程序后端信息源获取渲染视图所需的所有信息,它开始崩溃. 已经提出了针对这些问题的各种半解决方案,但是它们看起来不能很好地扩展或具有不期望的设计约束. 以下是一个示例应用程序场景: > 50%的页面内容在应用程序中的所有页面(页眉,页脚,菜单等)中很常见 好的,所以在asp.net mvc3中,假设您决定要共享包含50%常见UI标记的常见Razor布局.这有助于分离关注,因为应用程序开发人员不需要关注常见的ui,并且可以专注于特定于其专业领域的逻辑和视图. 但是,在这种共享布局需要数据(一些或多个模型类型的某些外观)来完全呈现自身的情况下,这完全崩溃了.您可能在页面上有独立元素,每个元素都需要特定的数据模型,例如: 这些模型中的每一个都可能有不同的来源.因此,尽管您可以共享模板,但是没有一种简单的方法可以共享逻辑来构建每个模型 – 并且肯定没有一个我已经看到的通用,可扩展和高性能的模板. 我见过的一些解决这个问题的方法是: >强烈键入公共布局,这需要所有视图模型子类化公共基础模型类. (但是没有通用的解决方案来填充这样的元模型,这在设计上是有限的,并且使模型变得庞大且难以测试)此外,模型群体仍然落在每个控制器上,违反了关注点和单一责任原则,通过堆积大量额外逻辑来复杂单元测试控制器,以填充元模型以及特定于视图的模型信息. 还有其他情况(一些在stackoverflow上也可以看到),其中RenderAction()作为解决方案存在其他问题.例如在循环中发出多个RenderAction()调用的事实导致所有这些控制器方法的串行执行.没有机会与RenderAction()并行.每个子控制器操作中的I / O绑定服务调用会导致整个呈现过程在I / O上等待.控制器只知道其直接视图和模型,并且没有任何内容可以全面了解视图内部的内容,以便并行化某些操作. 上述评论的作者在ASP.Net mvc之上开发了一个名为Quartz的不同UI模型,它允许上帝控制器对视图有深入了解,并且可以将每个视图模型交给视图模型,因此有机会并行化服务调用.构建这些视图模型的中心位置.我不知道这是否是提供克服问题的最佳设计,但看起来很有希望. 我的问题是,在ASP.Net MVC之上构建复杂应用程序的最佳实践是什么,它可以干净地解决这些问题?我已经想到了几种可能性(尽管在ASP.Net MVC中没有一种可能是实用的 – 那就是TBD),但是其他人必须已经遇到过这种情况. ASP.Net MVC中的设计模式是什么,或者是什么样的派克可以使这成为一个容易处理的问题? 解决方法
就个人而言,我认为通过RenderAction使用Child Actions的优势大于缺点.
您可以创建“窗口小部件”类型的元素,并将它们的逻辑包装在控制器操作中 – 这样调用窗口小部件的视图可能仍然完全不知道子操作正在做什么以及它是如何做的 – 导致一个很好的分离关注的问题. 您已经详细说明了这种方法的缺点,但我认为可以通过合理的缓存策略将负面影响降至最低. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 使用“使用本地IIS Web服务器”时出现Microsoft
- asp.net – 选择框更改事件中的setTimeout
- asp.net-mvc-4 – ASP.NET MVC 4网站速度问题
- asp.net-mvc-4 – 下划线字符串模型绑定器
- asp.net – NuGet:’X’已经有一个依赖定义为’Y’
- asp.net-web-api – 设置默认的WebAPI格式化程序
- .NET Core技术研究-HttpContext访问的正确姿势
- asp-classic – 使用FileSystemObject的文件权限 – CScrip
- asp.net-mvc – 客户端存储的身份验证令牌在哪里?
- MVC3&Razor – 将DateTime字符串从“mm / dd / yyyy 12
- webapi 利用 ActionFilter 为 ASP.NET Web API 添
- ASP.NET MVC使用JQuery将页面内容加载到div中
- asp.net-core – 如何在ASP.NET Core 2.0中实现m
- asp.net – 在更改密码时从所有浏览器注销用户
- ASP.NET MVC 4 JSON绑定到视图模型 – 嵌套对象错
- asp.net-mvc – 如何将应用程序用户放在与其余对
- ASP.NET奇怪的编译错误
- asp.net-mvc-3 – 在MVC中设置403错误页面
- asp.net-mvc-5 – aspnet身份避免同时登录同一帐
- ASP.NET:更好地在资源或数据库中存储可本地化的