表现层及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. JS学习笔记-OO创建怀疑的对象

    问了.工厂介绍,解决重码 前面已经提到,JS中创建对象的方法.不难发现,主要的创建方法中,创建一个对象还算简单,假设创建多个类似的对象的话就会产生大量反复的代码. 解决:工厂模式方法(加入一个专门创建 ...

  2. 教你使用vim表白

    99669999996669999996699666699666999966699666699 99699999999699999999699666699669966996699666699 9966 ...

  3. Windows PHone 8 获取硬件信息

    /// <summary> /// 获取系统信息 /// </summary> private string GetDeviceInfo() { StringBuilder s ...

  4. iOS开发- 隐藏状态栏(电池栏)

    分为两种情况: 1. 想要隐藏某个视图的状态栏, 比方说, 从界面A, push 到界面B的时候, 界面A原本显示状态栏, 然而我们须要界面B不显示状态栏. 这时候, 能够这样做: 在B中实现: - ...

  5. hadoop编程小技巧(7)---自己定义输出文件格式以及输出到不同文件夹

    代码測试环境:Hadoop2.4 应用场景:当须要定制输出数据格式时能够採用此技巧,包含定制输出数据的展现形式.输出路径.输出文件名称称等. Hadoop内置的输出文件格式有: 1)FileOutpu ...

  6. ViewPager实现页面切换

    先贴效果图(每个开关Tab债券.尾随页变化.效果图蓝条添加的用户体验) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIxMDYyMA==/fo ...

  7. Android布局解析,图文(转)

    LinearLayout:相当于Java GUI中的FlowLayout(流式布局),就是说一个组件后边跟一个,挨着靠,一个组件把一行占满了,就靠到下一行. linearlayoutdemo.xml ...

  8. NSIS:判断并安装.NET Framework 4 的例子

    原文 NSIS:判断并安装.NET Framework 4 的例子 现在.NET开发的软件已经大行其道,但有些操作系统并不符合软件的运行要求,所以,我们需要在安装程序中进行.NET Framework ...

  9. strtok、strtok_s、strtok_r 字符串切割函数

    1.strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 參数:str,待切割的字符串(c-string):delimit ...

  10. mySQl该数据库不能将中国的做法

    1. 更改MySQL安装文件夹(C:\Program Files\MySQL\MySQL Server 5.5)的my.ini文件 设置: default-character-set=utf8 cha ...