最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

Chad Myers 和 Jeremy Miller 对 ASP.NET MVC 开发人员的建议

  • 2008-12-21
  • 本文字数:907 字

    阅读完需:约 3 分钟

Chad Myers 和 Jeremy Miller 对于开发人员究竟该如何使用 ASP.NET MVC 提出了有力地建议。他们在上个月的

KaizenConf 会议上提出了这些准则化的建议。下面内容摘自

Jeremy 的总结

他们建议的重点是,大大强调了对控制器所承载功能的限制。在他们的设计中,控制器表层绝对以数据为中心,所有的输入均为单个 ViewModel。由于没有暴露出 HttpContext 的任何方面,开发人员可以轻松地对控制器进行单元测试。

控制器除了不应该暴露出 HTTP 特性之外,它们还应该包含尽可能少的业务逻辑。

控制器应该非常薄。控制器 Action 方法唯一的任务是将传入的模型转化成合适的服务调用并创建输出用的模型。所有业务逻辑的职责应该由非表现层的类来承担。换句话说,控制器中并不包含业务逻辑。

没错,就是这样。在他们的观念里,MVC 并不代表一个应用程序中的所有内容,开发人员应该使用额外的东西来处理真正的数据操作和存储。

还有很多东西值得思考,不过我们现在直接去看那些有关视图层中 HTML 和 JavaScript 的问题。

服务器端的标记绝对不应该和客户端 JavaScript 混在一起。我们建议遵循这个准则,因为这种很常见得错误做法往往造成难以阅读的代码,并且无法使用 TDD 的方式开发客户端 JavaScript 代码。我们不允许这种代码:callFunction(’<%=Model.Variable%>’)。如果服务器端数据需要传递到客户端的 JavaScript 中,我们会写成如下形式:“var something = <% =Model.Variable%>”。

视图应该非常简单。如果你在使用 if/then 语句或者循环,那么就说明你可能做错了。条件逻辑应该属于控制器或 JavaScript 类库等能够被单元测试的代码。把视图中的逻辑移出难以测试的代码,并放入易于测试的代码中可以有效地避免错误发生——没错,我认为 JavaScript 代码易于测试。Tag Soup 也可以避免,我们倾向于使用自己的实现来替代循环,例如:<%= this.RenderPartialForEachOf(m => m.Solution.Resolutions).Using()%>。在这段代码中,EditResolution 为一个 ASCX 控件,m.Solution.Resolutions 是一个 IList类型的属性。这条语句会遍历这个列表,为每个 Resolution 对象生成一个部分视图。

查看英文原文: Chad Myers and Jeremy Miller: Opinions for ASP.NET MVC Developers

2008-12-21 20:491453
用户头像

发布了 157 篇内容, 共 52.6 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

AMD EPYC服务器芯片将涨价10%~30%

WorkPlus

对话 SphereEx 创始人张亮:开源与商业并行 做时间越久越有价值的事情

SphereEx

Linux系统编程-(pthread)线程通信(围栏机制)

DS小龙哥

2月月更 围栏机制

抓到Netty一个Bug,顺带来透彻地聊一下Netty是如何高效接收网络连接的

bin的技术小屋

网络编程 中间件 netty 死磕 NIO Java【

像搭积木一样定制系统,这家公司正瞄准数据库做增值服务

SphereEx

Kafka消息存储机制

编程江湖

DevOps进阶(一):DevOps 软件开发工艺解读

No Silver Bullet

DevOps 2月月更

Linux系统编程-(pthread)线程通信(条件变量)

DS小龙哥

2月月更

2021 年软件安全报告:代码开源,福“祸”相依?

腾源会

开源 安全

某 E-Office v9 任意文件上传【漏洞复现实战】

H

网络安全 漏洞

动态加载不适合数组类?那如何动态加载一个数组类?

华为云开发者联盟

Java 数组 动态加载 数组类

Linux系统-Makefile规则介绍、基本使用

DS小龙哥

Linux makefile 2月月更

误删D盘数据怎么办?推荐使用数据恢复软件EasyRecovery

淋雨

数据恢复 EasyRecovery

从小样本学习出发,奔向星辰大海

百度开发者中心

百度云 百度 飞桨

加入科学计算SIG,挑战最前沿的AI+Science研发与创新

百度开发者中心

百度AI

AI+Science:基于飞桨的AlphaFold2,带你入门蛋白质结构预测

百度开发者中心

百度AI

一站式交付体验:云效+Kubernetes

阿里云云效

阿里云 Kubernetes 云原生 持续交付 一站式平台

Linux系统编程-(pthread)线程通信(互斥锁)

DS小龙哥

互斥锁 2月月更

资讯|WebRTC M97 更新

网易云信

WebRTC

百度AICA再添57位“首席AI架构师”,人工智能与产业场景结合愈发深入

百度开发者中心

飞桨 百度AI

移动办公时代,政企为何首选私有化的即时通讯平台?

WorkPlus

会声会影如何制作视频影片-影片制作过程三步骤

懒得勤快

Linux系统编程-(pthread)线程创建与使用

DS小龙哥

线程 2月月更

成为第一没有捷径:AI新势力MindSpore成长秘籍 | 源创者说 专访胡晓曼

科技热闻

Linux系统编程-(pthread)线程通信(读写锁)

DS小龙哥

2月月更

浪潮云说丨上云迁移实践

浪潮云

云计算,

GIF 格式解析之表情包是如何动起来的

CRMEB

百度智能云开物再收“一个奖状”

百度开发者中心

工业互联网 百度智能云 百度智能云开物

如何将Perforce Helix Core与CI构建服务器结合使用

龙智—DevSecOps解决方案

ci 持续集成 持续交付 CD

虎符交易所Hoo研究院:Open Sea上大火的NFT项目—Azuki

区块链前沿News

NFT Hoo 虎符交易所 Azuki

IAST 最佳实践 | 利用洞态做开源组件的安全治理

火线安全

Chad Myers和Jeremy Miller对ASP.NET MVC开发人员的建议_.NET_Jonathan Allen_InfoQ精选文章