“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

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:491434
用户头像

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

关注

评论

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

记一场vue面试

bb_xiaxia1998

Vue

【上】提高组件库Level必做好这六件事

小鑫同学

前端 组件库 11月月更

React源码分析6-hooks源码

goClient1992

React

前端一面经典react面试题(边面边更)

beifeng1996

React

react面试题详解

beifeng1996

React

SpringBoot 接口层统一加密解密

小小怪下士

Java 程序员 springboot

高频js手写题之实现数组扁平化、深拷贝、总线模式

helloworld1024fd

JavaScript

冷冷清清的双十一,电商促销节为何被消费者逐渐抛弃

石头IT视角

promise执行顺序面试题令我头秃,你能作对几道

loveX001

JavaScript

Python进阶(四十九)初识Flask Blueprint

No Silver Bullet

Python flask 11月月更 Blueprint

React源码分析7-state计算流程和优先级

goClient1992

React

Helm部署的服务如何修改配置

程序员欣宸

Kubernetes Helm 11月月更

DDD与应用架构

胖子笑西风

架构 DDD 框架 整洁架构 Java core

掌握这些前端手写面试题能进大厂吗

helloworld1024fd

JavaScript

【下】提高组件库Level必做好这六件事

小鑫同学

前端 组件库 11月月更

【愚公系列】2022年11月 微信小程序-app.json配置属性之其他属性

愚公搬代码

11月月更

React源码分析5-commit

goClient1992

React

React-hooks面试考察知识点汇总

beifeng1996

React

GitHub上新被爆赞!高并发JUC源码分析笔记,竟深受程序员追捧

钟奕礼

Java java程序员 java编程 Java面试题

解读Web3公链发展格局

TinTinLand

区块链 以太坊 公链 多链

Python进阶(五十二)Flask使用pymysql连接MySQL数据库

No Silver Bullet

Python MySQL pymysql 11月月更

[力扣] 剑指 Offer 第三天 - 左旋转字符串

陈明勇

Go 数据结构与算法 力扣 11月月更

docker安装WordPress(一)

蜗牛也是牛

腾讯二面vue面试题总结

bb_xiaxia1998

Vue

vue为什么v-for的优先级比v-if的高?

bb_xiaxia1998

Vue

应用链如何成为 Web3 的“潜力链”

One Block Community

区块链 开发者 区块链应用 云存储 web3

「Go实战」一文带你搞懂从单队列到优先级队列的实现

Go学堂

golang 开源 程序员 优先级队列 11月月更

vue组件通信6种方式总结(常问知识点)

bb_xiaxia1998

Vue

React-Hooks怎样封装防抖和节流-面试真题

beifeng1996

Python进阶(五十)浅析Flask运行原理

No Silver Bullet

Python flask 11月月更

图解漏桶(LeakyBucket)限流器的实现原理

Go学堂

golang 程序员 个人成长 限流 漏桶

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