基于Asp.net MVC的系统架构
2009开始接触.Net平台的相关技术,近年来也一直在用Asp.net MVC搭建一些业务系统。今天,我将介绍系统搭建的过程中用到的技术,工具和思想,抛砖引玉!
1. 解决方案的层级结构
其实,分层的思想在很多领域都有使用。我更多的把它理解为“分而治之”,这是我们在解决复杂问题时,首先就会想到的做法。无论是政府还是企业,只要是一个组织架构,它必然会按职能划分为不同的部门,部门之间共同协作,形成合力完成组织的意志。对应到系统设计,系统也需要分层,将复杂业务逻辑,分解为简单业务逻辑的组合,以达到软件设计中推崇的“低耦合,高内聚”的特性。
我在实际工作中,一般采用领域模型驱动(DDD)的开发方式,将解决方案分成4层,每层是一个单独的项目。4层结构间采用“洋葱模型”,每层只依赖上一层,层之间不能穿透,Core这层除外。
Level 1: BusinessSystem.Core: 包括领域模型、系统的数据访问层接口和服务接口和全局的常量等
Level 2: BusinessSystem.Dal: 数据访问层,这里我采用NHibernate ORM框架. 该层主要包括,NHibernate的配置,领域模型的CRUD。
Level 3: BusinessSystem.Service: 服务层,系统的业务逻辑都包含在此,事物机制,并发处理等。
Level 4: BusinessSystem.Web:UI层,这是一个Asp.Net Mvc项目。包括Routing策略,用户交互逻辑,前台实现等。前台技术,一般采用JQuery或Dojo
除此之外,解决方案中对后面三层会有UT. 在实践中,我采用NUnit做单元测试。
2. 依赖管理工具
我们经常说:“不要重复的造轮子”,它的好处,我们就不在此赘述。所以,在开发的过程中,引用第三方的类库,借鉴前人的成果,会让我们事半功倍。如果您有一定的技术嗅觉,每当需要解决一些复杂而又普遍存在的问题时,首先想到是有没有现成的,稳定的类库可供使用。那么,在.Net世界里,你不防去nuget网站搜索。Nuget也是一个很好的依赖管理工具,你搜索到的类库可以通过Nuget直接安装到你的解决方案中,当然也可以搭建一个本地的Nuget Server, 将常用的类库放到本地Server,然后再下载。通过Nuget你可以很好的控制类库的版本升级,而不会被混乱的类库依赖所羁绊。有兴趣,可取此处下载
3. 代码管理工具
代码管理工具有很多,在微软的平台下开发,不得不提TFS. TFS是一个集中式的代码管理工具,使用时必须联网,否则无法实现代码的签出和签入,它可以很好的和VSTS集成。同时,TFS也内置一些微软敏捷开发的模板供使用,包括开发任务的创建,分配和跟踪。可以说,VSTS+TFS几乎涵盖了软件开发整个生命周期中所需要的工具。显然,它的缺点是,太重太庞大,导致运行的时候效率低下。
Git是目前非常流行的一款代码控制工具,和TFS相比,它是分布式结构。即,你用的时候可以不联网,在本地即可进行版本控制,等联网后再同步到服务器。Git的比较轻,效率比较高。例如,他的Branch操作就是一个非常轻量级的操作,远没有TFS那么重。我们可以搭建自己的Git Server供团队使用。
4. 自动化测试
很多人,尤其是测试人员,深受系统上线的折磨,因为每次上线都需要进行繁琐的回归测试工作。如何减轻系统上线的压力呢,做自动化测试非常有用。将80%的系统常用功能编写成一个个的Test Scenario,以后上线,自动完成80%的回归测试工作。当然,自动化测试的代码和UT一样需要不断的维护,但是,磨刀不误砍柴工,不要吝啬这个代价。实践中,我使用SpecFlow Automation Test Framework做自动化测试。
5. 持续集成(Continuous integration)
大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。个人在实践过程中也尝到了甜头,要实现CI,并发挥CI的作用,做好UT,AT是必要的,同时还需要搭建一套自动化环境,实践中我采用TeamCity,通过MS Build调用相应的编译,UT和AT模块
6. 常用的工具/类库
- 工具:JIRA, Confluence, TFS, Notepad++, Sublime, HttpWatch, WinDiff, Fiddler等
- 类库:MvcSitemapProvider, iTextSharp,NHibernate, NVelocity, NUnit, SpecFlow, Json.Net, FluentNHibernate, Dox, NPOI, Log4Net, Castle Windsor等
上面都是实践过程中的一些总结和个人体会,供大家参考,抛砖引玉~~~
转载于:https://www.cnblogs.com/zhouwei0213/archive/2013/03/02/2939978.html
基于Asp.net MVC的系统架构相关推荐
- OXite 微软一款基于asp.net mvc架构的blog内容管理系统
OXite 微软一款基于asp.net mvc架构的blog内容管理系统 对学习MVC有较好的帮助 URL http://oxite.codeplex.com/ 转载于:https://www.cnb ...
- 看一下基于ASP.NET MVC的开源社区项目Orchard
昨天介绍了基于ASP.NET MVC的框架Catharsis,今天给大家介绍的是基于ASP.NET MVC的一个开源社区项目Orchard,本篇主要介绍一下Orchard是什么,如何下载安装以及安装过 ...
- 基于ASP.NET MVC+SQLite开发的一套(Web)图书管理系统【100010294】
摘要 随着互联网的快速发展,各种线下手工业务都开始转向了互联网线上操作,在21世纪的信息革命时代,信息管理系统成为日常信息记录的主流工具. 本文介绍了以VS 2019(Microsoft Visual ...
- 『飞秋』关于ASP.NET MVC+Repository+Service架构的一些思考
『飞秋』关于ASP.NET MVC+Repository+Service架构的一些思考 看了一些ASP.NET MVC开源项目后的一些想法,关于ASP.NET MVC+Repository+Servi ...
- asp.net mvc租房系统【源码分享】
asp.net mvc租房系统[源码分享] 一.源码描述 这是一款非常典型的租房网后台管理系统源码,采用的典型的三层架构和MVC相结合的技术,非常实用, 界面也比较美观,非常适合新手初学MVC的朋友们 ...
- 介绍一个基于ASP.NET MVC的框架Catharsis
Catharsis是一个基于ASP.Net MVC的一个开源框架,之前在codeproject上看到的.在我的2011生活看板中也说到今年准备给OpenExpressApp增加B/S支持,所以最近花了 ...
- 基于PAM调制的OFDM系统架构之讯号特点分析(matlab)
基于PAM调制的OFDM系统架构之讯号特点分析(matlab) 不同于基于QAM调制的OFDM系统,通过脉冲振幅调制(PAM)并经过埃尔米特对称处理的讯号本身的特性.讯号调制方面,采用PAM调制的讯号 ...
- ASP.Net Mvc房屋租赁系统
ASP.Net Mvc房屋租赁系统 asp.net mvc: 运行截图:
- 视频教程-基于毫米波雷达的ADAS系统架构-嵌入式
基于毫米波雷达的ADAS系统架构 ADAS研发部门高级工程师 德国汽车电子专业工科硕士,理论电气工程博士,近10年嵌入式软件开发经验,曾参与最前沿ADAS项目的软件开发与集成,之后参与奔驰第一款纯电动 ...
最新文章
- mysql 绑定参数_MySQL 使用 Perl 绑定参数和列
- sql 拼接int类型的字段_SQL 基础教程—第一章:4. 表的创建
- 我用 tensorflow 实现的“一个神经聊天模型”:一个基于深度学习的聊天机器人
- 海量数据的分库分表技术演进,最佳实践
- Unity3d与android通信
- Tomcat服务器启动错误之Offending class: javax/servlet/Servlet.class
- pytorch学习笔记(十):MLP
- 迫不及待,英特尔推特“官宣”GPU发布时间
- 实习踩坑之路:使用@Value注解导致Parse attempt failed for value [08:00],时间转换出错?
- HTML与JSP页面的区别
- matlab 点云曲率,点云数据的主曲率和主方向估计方法
- 呼叫中心服务器怎么设置,呼叫中心服务器类型有哪几种?
- 适用于Android的最佳本地音乐播放器
- ubuntu 安装idea,创建快捷方式
- 51单片机实训(一)————Keil 基本操作
- showVideo C#版 摄像头驱动程序
- 游百望山(记于17.09.05)
- 亲手制作:超级DOS工具+Vista+加强版WindowsXP Lite5.8集成
- app抓包服务器证书错误,Fiddler抓包iOS出现证书错误的解决办法
- Could not autowire. No beans of ‘UserMapper‘ type found.
热门文章
- CodeFirst的EF6迁移和时间戳错误
- .Net Core DI,如何在程序集中注册所有现有的可分配类型
- 关于 2020 年的前端趋势预测
- 实现机器学习的循序渐进指南V——支持向量机
- C#坏习惯:通过不好的例子学习如何制作好的代码——第2部分
- 安装配置mac版_全面战争三国 Mac版Mod安装指南
- 矩阵论与计算机英语论文,矩阵论翻译论文[8页].pdf
- xhell 镜像_2020官网下载Xshell 6.0.189.0中文版
- mysql 外键 失败_存在外键时,MySQL 5.5外键约束失败
- pythonfor循环语句例子_简单的python循环知识