ASP.net 开发框架的复用手段

这里我说的框架是那种大型的. MVC三层都涉及到的垂直型框架.
例如:表单管理, 单点登录, 图片空间, 枚举管理模块, 配置管理模块. 用户管理, 权限管理.
不是那种平面型技术框架.例如ORM,Bootstarp 这种纯解决技术问题的框架.此种框架用类库复用,文件夹URL共享就够了.

目前我的小项目里面,会有一些长期积淀下来的模块. 例如权限管理,配置管理.这些通用模块要想复用. 还是比较麻烦的. 当然类库复用.比较方便.直接引用一下就可以了.但是Web页面要想复用,得复制黏贴. 数据库再建一个..
目前我就是这么干的..这么做会有一个比较严重的后果. 你会发现你做的东西.东一个西一个. 最后想整合起来.很困难.当然有心的人会做完项目后整理下.像我这种懒人是做不到了…
为了能够更好的积攒劳动成果.创造更大的价值.
我总结了一下.最后得出了下面的几种解决方案.

1.利用IIS的虚拟目录功能. 把新的业务项目新建到一个新的虚拟目录里面.
优点:开发很方便,比较贴合VS的项目理念.
缺点:项目只能部署到单台服务器.后期业务增大,性能是问题的情况下很难再拆分.

2.利用二级域名,把开发框架分配到一个固定的二级域名下.
优点: 可以很好的实现分布式的一些功能.后期性能问题可以得到一定改善.项目拆分不是问题. 项目分布到不同服务器无问题.
缺点: 引用开发框架的某些页面的时候要带域名,还要解决客户端带来的跨域名问题.

3.复制粘结.
优点: 可以很好的复用现有代码,从一定程度上可以提高性能. 提高开发效率..不必要的代码会人为去掉.
缺点: 不利于开发框架的持续增量更新. 最后的结果往往是开发框架得不到更新,工作 N年后仍旧需要重新写很多代码.

4.封装成UserControl组件和各种.net控件
优点: 可以很好的复用现有代码,无论是.net代码还是html都可以灵活复用,灵活多变. 比较符合.net官方开发设计理念.
缺点: 组件还好开发,控件技术门槛稍微有点高. 对大型的框架不太适用.尤其是涉及到前台后台,数据库级别的框架.

5.使用SVN的分支版本管理 框架.
缺点: 需要合并. 工作量比较大.
优点:各种类型的可复用框架都适合.

6.神器 nginx 代理模式.
用nginx把不同的子目录转向到不同的服务器.(即使是同一台机器不同端口也可以)
优点: nginx就不说了. 很牛. 可以代理,而且可以实现负载均衡. 我这里只是用nginx把不同的目录访问代理到不同的机器上.这样不但可以实现项目的拆分.而且还能为后期的性能提升打下基础. 最主要的是可以解决跨域名的问题..而且是整个项目重用. 方便到家.

缺点: 需要配置nginx. 各项目的目录需要遵循一定的目录规范. 引用规范. 还有多站点之间的session共享问题.

感觉还是nginx代理比较好. 我采用了nginx 代理来实现拆分项目和复用已有代码的目的.

当然第1种解决方案.也很不错. 非常适合小项目. 不过我还是建议.做架构多考虑的长远些.多考虑后期性能提升的问题. 分布式的问题.

第6种方案,把第一种解决方案从单机服务模式升级到了分布式服务模式. 系统性能和未来可扩展性 .不可估量. session共享问题是可以解决的.而且很好解决.

如果项目比较小. 那么虚拟目录比较好操作. 也非常方便. 后期升级成分布式也仅需要配置nginx即可. 当然缺点是每个项目下的web.config都需要单独配置一次. 如果量大了.后期实施部署的时候会很麻烦..如果有这种Web.config统一部署的方案就太好了. 不过目前我没找到.

为了解决这种部署比较麻烦的问题.
我又研究了一下. Web站点安装项目. 发现挺不错. 能把各个独立的项目安装到一个网站下. 等我亲测可用时再拿出来分享…

2017-06-01 在经过了长期的大量实践之后,发现上面的nginx代理方法, 适合那种大型的分布式项目.. 有很多人维护的一个大系统中. 使用nginx非常方便.
但是在这种小型的项目中维护nginx又需要付出很多的劳动力.. 经过多方面折中, 最后采用了另外一种新的方法来实现开发框架的复用

适合中小型项目的复用手段,SVN目录共享.而不是SVN分支.
SVN的目录共享说白了就是一个快捷方式,
从A项目下的Framework 映射到B项目的Framework下.
从A项目下的Static 映射到B项目的Static下.
当其中任何 一个修改提交时都会改变另外一个目录下的文件内容.
具体操作方法请百度关键字. svn:externals

使用此方法, 可以使得公司的技术得以沉淀, 技术得以持续增长.不再是东一枪西一炮.
另外也可以参考 我的最新一篇文章

<<再谈C#如何重复使用已有的代码.>>
http://blog.csdn.net/phker/article/details/72477522

猜你喜欢

转载自blog.csdn.net/phker/article/details/51849197