表现层及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介绍(一)的更多相关文章

  1. 表现层及ASP.NET MVC介绍(二)

    表现层及ASP.NET MVC介绍(二) 最近的更新速度越来越慢,主要是项目上比较忙,封装EasyUi也要花很多时间.不过大家请放心,本系列不会半途夭折,并且代码干货也会持续更新.本文继续介绍表现层和 ...

  2. 应用程序框架实战三十三:表现层及ASP.NET MVC介绍(二)

    最近的更新速度越来越慢,主要是项目上比较忙,封装EasyUi也要花很多时间.不过大家请放心,本系列不会半途夭折,并且代码干货也会持续更新.本文继续介绍表现层和Asp.net Mvc,我将在本篇讨论一些 ...

  3. 应用程序框架实战三十:表现层及ASP.NET MVC介绍(一)

    本文将介绍表现层及ASP.NET MVC的一些要点,特别是ASP.NET MVC的一些抽象和封装技巧,如果你对MVC还不了解,可以参考<ASP.NET MVC4 高级编程>,作者Jon G ...

  4. ASP.NET MVC 介绍

    ASP.NET分为WebForm(数据访问层 界面层 业务逻辑层)和MVC MVC : Model(模型)是应用程序中用于处理应用程序数据逻辑的部分. 通常模型对象负责在数据库中存取数据. View( ...

  5. ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用

    本片文章翻译自ABP在CodeProject上的一个简单示例程序,网站上的程序是用ABP之前的版本创建的,模板创建界面及工程文档有所改变,本文基于最新的模板创建.通过这个简单的示例可以对ABP有个更深 ...

  6. asp.net mvc Partial OutputCache 在SpaceBuilder中的应用实践

    最近给SpaceBuilder增加OutputCache 时发现了一些问题,贴在这做个备忘,也方便遇到类似问题的朋友查阅. 目前SpaceBuilder表现层使用是asp.net mvc v1.0,使 ...

  7. asp.net mvc 加三层架构 完美搭配

    http://www.hysql.org/aspnet/20180630/5712.html 先来一张项目的层级结构图: Model:模型层,主要是各种类型.枚举以及ORM框架,框架完成数据库和实体类 ...

  8. 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递

    通过第一天的学习之后,我们相信您已经对MVC有一些基本了解. 本节所讲的内容是在上节的基础之上,因此需要确保您是否掌握了上一节的内容.本章的目标是在今天学习结束时利用最佳实践解决方案创建一个小型的MV ...

  9. 全7 天玩转 ASP.NET MVC — 第 2 天

    0. 前言 我相信在开始第 2 天的学习时,你已经顺利地完成了第 1 天的课程. 我们回顾一下第 1 天的主要关注点: 为什么选择 ASP.NET MVC ? ASP.NET Webforms 和 A ...

随机推荐

  1. CentOS7 防火墙 firewall-cmd

    最小化安装 CentOS7 后,很多端口默认是不打开的,需要通过  firewall-cmd   把这些端口打开. 检查防火墙状态 # firewall-cmd --state running 关闭防 ...

  2. POJ 2155 Matrix (D区段树)

    http://poj.org/problem?id=2155 Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 1 ...

  3. WPF学习(5)依赖属性

    今天我们来学习WPF一个比较重要的概念:依赖属性.这里推荐大家看看周永恒大哥的文章,讲的确实很不错.我理解的没那么深入,只能发表一下自己的浅见.提到依赖属性,不得不说我们经常使用的传统的.net属性, ...

  4. DBA查询命令积累——不断更新

    原文:DBA查询命令积累--不断更新 一.服务器配置: 1.兼容级别:兼容级别只影响指定数据库中的行为,而不会影响整个服务器上的行为. 1.1.查看数据库兼容级别及更改兼容级别: SELECT com ...

  5. sql server 2008如何导入mdf,ldf文件

    sql server 2008怎样导入mdf,ldf文件   网上找了非常多解决sql server导入其它电脑拷过来的mdf文件,多数是不全.遇到的解决方法不一样等问题,下边是找到的解决这个问题的最 ...

  6. Git现实(一个)版本控制概述

    从今天开始.我们了解的分布式版本控制系统Git相关内容.了解Git之前,我们的第一个版本控制系统,使宏观的描述. 什么是版本号控制 版本号控制是指通过对文件内容的变化进行记录,并为每次的变化进行编号, ...

  7. 基于ORACLE建表和循环回路来创建数据库存储过程SQL语句来实现

    一个.概要 在实际的软件开发项目.我们经常会遇到需要创造更多的相同类型的数据库表或存储过程时,.例如.假设按照尾号点表的ID号,然后,你需要创建10用户信息表,的用户信息放在同一个表中. 对于类型同样 ...

  8. 重写IHttpHandler,实现前后端分离

    再说重写IHttpHandler,实现前后端分离   aspx页面第一次加载时,HttpHandler 里面是如何编译指定页面的呢?Framework提供了编译页面的API如下: BuildManag ...

  9. SRM 587 Div II L3:ThreeColorabilityEasyy

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12699 这道题目是第一次在比赛的时候做出来的,开始还想用bru ...

  10. TFS 2010 使安装更容易,让VSS历史

    一转眼VS 2010 RC(Release Candidate)版本号已经公布一月多了,RTM(Release To Manufacturer)版本号也快妥了,已经进入了最后的倒计时,仅仅等4月12号 ...