net Mvc模块化开发
Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”
项目开发从来就不是一个简单的问题。更难的问题是维护其他人开发的项目,并且要修改bug。如果原系统有重大问题还需要重构。
怎么重构系统不是本文探讨的问题,但是重构后如何上线部署和本文关系密切。这个大家可能刚兴趣。
言归正传,现在演示一下如果做到部分版本和部分模块更新。
1、 Asp.net MVc模块化开发之分区扩展框架(送源码)
2、 Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”
3、 Asp.net Mvc模块化开发之“逻辑(项目)复用”
3.1、 不同角色或者权限的逻辑(项目)复用(分区过滤器的应用)
3.2、 不同业务的逻辑(项目)复用(DI(依赖注入)的应用)
4、 Asp.net Mvc模块化开发之“项目(分区)拆分”
5、 Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”
一、现在假设一个系统架构
以上是一个简单站点的架构图
实际开发的是三个项目,blog(博客)、新闻(news)及评论(Coment)
其中评论这个项目(分区)部署了两个,/Blog/Coment/和/News/Coment/
二、现在我们有新的需求要对评论功能升级
1、我们对评论功能拆分版本
原版本: \Branchs\Coment_V1.0
新版本: \Branchs\Coment_V1.1
2、好在我们伟大的程序员效率就是高,三下五除二,新版本完成了,要部署了
但是由于种种原因,领导更新blog评论(/blog/Coment/),待blog评论上线一段时间稳定后再更新News评论,那我们怎么办呢?
并且要我们给出如果新评论功能出现问题需要快速回退(要制定回退方案啊)
三、好吧,虽然需求有点"变态",我们总不能说办不到吧
这里说个题外话,程序员这个偏执狂的群体是最不能忍受别人质疑自己的能力的。其实程序员也是人,也不是万能的。适当的说办不到或者No也不是不可以。
直接上图:
1、后端增加一个一个站点(tmp.xxx.com)
里面部署了一个分区/blog/Coment/
2、前端(Ngnix)配置一个一条rewrite规则指向了新站点的这个分区
这样新的功能就顺利上线了,皆大欢喜,而且访问路径也没有变化,其他相关模块直接连接过来的也不需要修改。对度娘等搜索引擎更是没有任何影响。
旧的站点(IIS)我们没有做任何修改,原来是正常的现在不正常的可能性非常小,减小了上线的风险。
有人可能会说,新评论功能修改了表结构,就算不更新源IIS站点,老的评论站点也可能挂掉。我只能说,你要这样蛮干我也没办法。
这就要求写好的模块化代码,升级前考虑兼容原数据结构,不同业务尽量拆表。如果可以,升级时不要修改原表结构,而是新建一个表,上线前把历史数据导入到新表,完全上线后再追一次增量数据。按自己团队的技术实力和产品需求,能做多少是多少。
3、回退怎么办?(回退方案)
哈哈,这个更简单。只要从ngnix上删除新加的那条rewrite规则
4、有人可能会说,你这个不科学,修改博客评论很可能博客模块也需求修改
确实,修改博客评论博客模块也可能需要修改上线
继续上图:
本图是局部图,原IIS站点部署还是不变
5、有人说,我们公司不用Ngnix,你这个要求太高了
其实其他前端都有rewrite功能,Apache等。
有些没有前端就不太好办。但是前端真的是Web站点的标配,在前端上做日志、缓存、压缩、防护等。要想让web站点更好更快的运行,就需要让他做尽量少(必不可少的业务处理)的事情。
6、有人说你这个还是不够科学,我们可以拆分为4个独立的IIS站点
拆分为4个IIS站点是一个方案,可以更好的隔离减少相互影响
但这个前提是值得拆,比如性能达到瓶颈,单个业务(分区)流量太大,多个不同团队维护不同的业务(分区)。
要知道维护一个人维护一个站点和4个站点还是不一样的,相同的代码你需要部署到4个不同的地方。现实中,我们会开发无数可以产品(业务),有些产品的访问量非常小,但是却不能下线。为什么小流量的产品不能下线不是本文探讨的范围,这里就不展开了。
7、有人会说你这增加的tmp站点是什么鬼,是要永久存在吗?
这里叫tmp只是举例用,现实中用其他名字也是可以的,临时版本全部合并后可以把所有最新版本更新到这个站点或者和回到原站点都可以。
这种用法可以叫做“AB版”,有的时候用的是A版,有的时候用的是B版,有的时候是AB版本共存(需要在维护文档中备注哪些功能在哪个版本站点上)。
如果需求冲突特别严重,再来个C版本或者D版本的临时站点又有什么不可以的呢?能解决现实问题才是最重要的。不能总等着大家来合并版本再一起上线。有的时候存在多个版本会更加高效呢?
net Mvc模块化开发的更多相关文章
- Asp.net Mvc模块化开发之分区扩展框架
对于一个企业级项目开发,模块化是非常重要的. 默认Mvc框架的AreaRegistration对模块化开发真的支持很好吗?真的有很多复杂系统在使用默认的分区开发的吗?我相信大部分asp.net的技术团 ...
- Asp.net Mvc模块化开发系列(目录)
模块化开发是非常重要的,模块化开发是个系统性问题,为此我觉得有必须要写一个系列的文章才能基本说的清楚 那又为什么要写一个目录呢? 其一.是对我昨天承诺写一个系列新的文章的回应 其二.是先写出一个大纲, ...
- Mvc 模块化开发
在Mvc中,标准的模块化开发方式是使用Areas,每一个Area都可以注册自己的路由,使用自己的控件器与视图.但是在具体使用上它有如下两个限制 1.必须把视图文件放到主项目的Areas文件夹下才能生效 ...
- MVC模块化开发方案
核心: 主要利用MVC的区域功能,实现项目模块独立开发和调试. 目标: 各个模块以独立MVC应用程序存在,即模块可独立开发和调试. 动态注册各个模块路由. 一:新建解决方案目录结构 如图: 二:Eas ...
- ASP.NET MVC模块化开发——动态挂载外部项目
最近在开发一个MVC框架,开发过程中考虑到以后开发依托于框架的项目,为了框架的维护更新升级,代码肯定要和具体的业务工程分割开来,所以需要解决业务工程挂载在框架工程的问题,MVC与传统的ASP.NET不 ...
- Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”
整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...
- Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”
项目开发从来就不是一个简单的问题.更难的问题是维护其他人开发的项目,并且要修改bug.如果原系统有重大问题还需要重构. 怎么重构系统不是本文探讨的问题,但是重构后如何上线部署和本文关系密切.这个大家可 ...
- .NET/ASP.NET MVC(模块化开发AraeRegistration)
阅读目录: 1.开篇介绍 2.AreaRegistration注册路由(传递路由上下文进行模块化注册) 1]开篇介绍 ASP.NET Routing 路由功能非常强大,设计的也很巧妙:如果说ASP.N ...
- 全面解析ASP.NET MVC模块化架构方案
什么叫架构?揭开架构神秘的面纱,无非就是:分层+模块化.任意复杂的架构,你也会发现架构师也就做了这两件事. 本文将会全面的介绍我们团队在模块化设计方面取得的经验.之所以加了“全面”二字,是因为本文的内 ...
随机推荐
- LCD显示--Ht1621b芯片显示屏驱动
Ht1621b芯片显示屏驱动 关于HT1621b芯片的具体信息能够參考数据手冊上的内容:百度文库HT1621b中文资料 CS : 片选输入接一上拉电阻当/CS 为高电平读写HT1621的数据和命令无效 ...
- linux—select具体解释
linux—select具体解释 select系统调用时用来让我们的程序监视多个文件句柄的状态变化的.程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变. 关于文件句柄,事 ...
- xcode6 cocos2dx开玩笑git和github学习记录
1. git Xcode4开始,它一直Git作为一个内置的源代码控制(Source Control)工具,所以对于新项目的用途git要管理非常方便.在新建项目向导.可以直接选择Git作为源控制工具.项 ...
- INFORMIX 时间函数大全
http://publib.boulder.ibm.com/infocenter/idshelp/v115/index.jsp?topic=/com.ibm.sqls.doc/ids_sqs_0187 ...
- google 搜索url详解
www.google.com [http://www.google.cn/search?q=112&hl=zh-CN&client=aff- 360daohang&hs=yhE ...
- 居然还有FindFirstChangeNotification函数
http://download.csdn.net/download/sololie/5966243
- UPX 加壳工具:The Ultimate Packer for eXecutables
UPX (the Ultimate Packer for eXecutables)是一款先进的可运行程序文件压缩器.压缩过的可运行文件体积缩小50%-70% ,这样降低了磁盘占用空间.网络上传下载的时 ...
- iOS学习——JSON数据解析(十一)
在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...
- Android Studio Gradle 添加.so 支持文件
近期发展Android Wear 关注商品.官员Demo所有gradle 工程. 当然,我也用eclipse配置一个可行的环境. 问题来了,eclipse,android studio 开发 andr ...
- MVC多语言应用
MVC多语言应用 最近发现资源文件是个好东西, 用的好了可以给开发人员借阅不少的时间. 例如做一个多语言的网站, 资源文件就有不小的用处. 这里以MVC4模版项目的登录页为例, 简单说一下过程: 1. ...