表现层及ASP.NET MVC介绍(一)
表现层及ASP.NET MVC介绍(一)
本文将介绍表现层及ASP.NET MVC的一些要点,特别是ASP.NET MVC的一些抽象和封装技巧,如果你对MVC还不了解,可以参考《ASP.NET MVC4 高级编程》,作者Jon Galloway等,这本书由ASP.NET MVC团队成员编写,相当不错。
表现层的职责
表现层的职责是展示和收集数据,将领域层的数据和逻辑展示出来,并收集用户输入的相关信息。
搞清楚表现层的职责以后,你就应该清楚,表现层不是你应该编写业务逻辑的地方,这也是分层架构的核心。
如果要展示一个计算值,不应该在表现层直接完成计算,相反,由领域层进行计算,表现层直接拿到结果并展示,这样可以让表现层代码非常简洁,同时业务逻辑被高度内聚到领域层。
很多时候,为了提升用户体验,我们会在页面上使用Js进行客户端计算,从而获得快速响应,但也导致业务逻辑泄露到Js中。在大多情况下,这是可以接受的,不过在你准备用Js编写这些重复逻辑时,可以先考虑是否可以使用Ajax请求服务端完成。每当你需要进行客户端实时计算时,就发送请求给服务端,领域层完成计算,返回结果。
尽量减少业务逻辑副本,当需求变化或发现BUG时,代码同步更轻松。
对于管理系统来说,尽量让程序员少写Js,尽量封装和抽象,因为Js是弱类型,没有编译时检查,代码提示很弱,哪怕使用了Resharper,代码提示功能依然不佳,细长的提示滚动条,看得你两眼直冒金星。另外Js很多技巧看上去很怪异,初学者使用这些技巧,Bug率将大幅上升。当项目交给新人维护,长篇的Js更使其痛苦不堪。当然这是给普通团队的建议,少写Js可以让你的项目容易维护,高水平团队请忽视。
Mvc介绍
MVC是一个表现层架构模式,将表现层分成三个部分,模型、视图和控制器。
当Http请求发送到ASP.NET MVC引擎时,MVC引擎查找路由表以决定由哪个控制器操作来处理这个请求。
控制器是一个指挥中心,它调用后端的服务,并将得到的模型交给视图显示。
你可以直接在控制器方法中操作DbContext或仓储,并使用Linq语句进行查询。当你逐步意识到控制器代码变得复杂时,可以创建应用层服务来简化表现层。
应用服务为表现层提供唯一的API访问点,大幅降低控制器复杂度,控制器的所有操作,都通过应用服务一个明确的API完成,不仅操作更规范,而且控制器将变成很薄的一层。
控制器的开发要点是,保持尽量简单,没事少写代码。把你的需求交给应用层服务去实现,你只需要简单调用其接口就行了。
模型是指数据与业务逻辑,即领域模型,大部分时候,你可以在MVC视图中直接操作领域实体,视图模型ViewModel不是必须的。不过出于某些原因考虑,视图中操作的也可能是DTO或ViewModel,当界面变得复杂时,通过为特定视图引入专门的ViewModel 可以简化界面开发。
你可能已经发现了名目繁多的实体类型:领域实体、DTO、ViewModel、查询实体等,确实让人眼花缭乱,我将在后续用专文讨论,以方便你根据需要取舍。
约定优于配置
“约定优于配置”原则,建议你尽量遵循默认约定,并形成习惯,这样可以大幅降低学习成本和工作量,同时获得更一致的目录结构和代码风格,查找特定类型的文件变得非常容易,可维护性大大提高了,你仅在必要时才需要通过配置来覆盖默认值。
“约定优于配置”原则对目录结构和命名产生了深远影响。
项目的目录结构至关重要,但大部分程序员对目录结构不太关心,因为创建文件夹没有技术含量,简单的容易被忽视。
当你准备修改某个功能时,第一步起码先得找到相关的文件。
如果你平时不太注意目录结构的管理,创建文件很随意,随便找个地方就扔进去了,随着项目文件的增多,你的开发工作将会越来越乱,当你要找某个文件时,你会在目录树中四处乱点,“哦,不在这,哦,也不在那,哦耶,终于找到了”。
当你要找一个控制器时,你会去查找Controllers目录,而不是一个叫ABCD的目录,这就是命名约定。如果存在一个名为TestController的控制器,默认在Views目录中就会有一个Test的目录与之对应,这样在查找控制器对应的视图时就能非常轻松。
当你的所有文件都能够根据约定,分门别类的放到清晰命名的目录中时,整个项目的质量将大幅提升。
我在封装EasyUi时,把控件Id的命名作了一些约定,比如表格叫grid。这样很多Js回调函数,就可以在内部完成,不需要你手工处理了,如果你遵循这些约定,开发一个简单的EasyUi CRUD操作,基本不需要写Js。
.Net应用程序框架交流QQ群: 386092459,欢迎有兴趣的朋友加入讨论。
谢谢大家的持续关注,我的博客地址:http://www.cnblogs.com/xiadao521/
表现层及ASP.NET MVC介绍(一)的更多相关文章
- 表现层及ASP.NET MVC介绍(二)
表现层及ASP.NET MVC介绍(二) 最近的更新速度越来越慢,主要是项目上比较忙,封装EasyUi也要花很多时间.不过大家请放心,本系列不会半途夭折,并且代码干货也会持续更新.本文继续介绍表现层和 ...
- 应用程序框架实战三十三:表现层及ASP.NET MVC介绍(二)
最近的更新速度越来越慢,主要是项目上比较忙,封装EasyUi也要花很多时间.不过大家请放心,本系列不会半途夭折,并且代码干货也会持续更新.本文继续介绍表现层和Asp.net Mvc,我将在本篇讨论一些 ...
- 应用程序框架实战三十:表现层及ASP.NET MVC介绍(一)
本文将介绍表现层及ASP.NET MVC的一些要点,特别是ASP.NET MVC的一些抽象和封装技巧,如果你对MVC还不了解,可以参考<ASP.NET MVC4 高级编程>,作者Jon G ...
- ASP.NET MVC 介绍
ASP.NET分为WebForm(数据访问层 界面层 业务逻辑层)和MVC MVC : Model(模型)是应用程序中用于处理应用程序数据逻辑的部分. 通常模型对象负责在数据库中存取数据. View( ...
- ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用
本片文章翻译自ABP在CodeProject上的一个简单示例程序,网站上的程序是用ABP之前的版本创建的,模板创建界面及工程文档有所改变,本文基于最新的模板创建.通过这个简单的示例可以对ABP有个更深 ...
- asp.net mvc Partial OutputCache 在SpaceBuilder中的应用实践
最近给SpaceBuilder增加OutputCache 时发现了一些问题,贴在这做个备忘,也方便遇到类似问题的朋友查阅. 目前SpaceBuilder表现层使用是asp.net mvc v1.0,使 ...
- asp.net mvc 加三层架构 完美搭配
http://www.hysql.org/aspnet/20180630/5712.html 先来一张项目的层级结构图: Model:模型层,主要是各种类型.枚举以及ORM框架,框架完成数据库和实体类 ...
- 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递
通过第一天的学习之后,我们相信您已经对MVC有一些基本了解. 本节所讲的内容是在上节的基础之上,因此需要确保您是否掌握了上一节的内容.本章的目标是在今天学习结束时利用最佳实践解决方案创建一个小型的MV ...
- 全7 天玩转 ASP.NET MVC — 第 2 天
0. 前言 我相信在开始第 2 天的学习时,你已经顺利地完成了第 1 天的课程. 我们回顾一下第 1 天的主要关注点: 为什么选择 ASP.NET MVC ? ASP.NET Webforms 和 A ...
随机推荐
- 开发随笔——NOT IN vs NOT EXISTS
原文:开发随笔--NOT IN vs NOT EXISTS 原文出处: http://blog.csdn.net/dba_huangzj/article/details/31374037 转载请引用 ...
- 飞信免费邮件api,飞信界面
大家都知道飞信是能够免费发送短信的,可是飞信又没有官方的接口,所以无法借用移动的官方接口实现短信的免费发送,可是还是有一些破解的接口能够使用的. GET方法: 提交格式 http://66.zzuob ...
- 【Espruino】NO.03 从点灯开始
http://blog.csdn.net/qwert1213131/article/details/26819773 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] 点灯程序应该 ...
- xsd的解释说明
schema教程 XML Schema是以XML语言为基础的,它用于可替代DTD.一份XML schema文件描写叙述了XML文档的结构XML Schema语言也被称为XML Schema Defin ...
- Chapter 3 Protecting the Data(3):创建和使用数据库角色
原版的:http://blog.csdn.net/dba_huangzj/article/details/39639365.专题文件夹:http://blog.csdn.net/dba_huangzj ...
- HTML5学习笔记简明版(10):过时的元素和属性
被遗弃的元素(Element) 这个小节里列出的元素在HTML5里将不再使用,现有文档升级到 HTML5的话能够使用一些替代方案.比如parser section 能够处理isindex 元素的功能. ...
- UVALive - 3263 That Nice Euler Circuit (几何)
UVALive - 3263 That Nice Euler Circuit (几何) ACM 题目地址: UVALive - 3263 That Nice Euler Circuit 题意: 给 ...
- mac下qt设置调试器 调试器未设置
标号少标个5凑合看吧
- react.js 从零开始(一)
React 是什么? 网络上的解释很多...我这里把他定义为 通过javascript 的形式组件化 html的框架... React 仅仅是 VIEW 层. React 提供了模板语法以及一些函数钩 ...
- 在ASP.NET2.0里打印网页指定的内容(比如打印网页里的一个Table)
原文:在ASP.NET2.0里打印网页指定的内容(比如打印网页里的一个Table) 打印指定内容: <html> <head> <script type= " ...