没有合适的资源?快使用搜索试试~ 我知道了~
首页如何搭建自己的Java开发框架
资源详情
资源评论
资源推荐
如何搭建自己的 javaWeb 开发框架
说明:作者也没写过什么框架,只是分享一些自己的理解,抛砖引玉罢了。如果你写过
一些框架可能会产生一些共鸣欢迎讨论,如果你正在写或正打算写一个框架可能会给你
一些启发。本文以为较长可能会分多个篇博客来写,现在能想到的是主要分为步骤、模
式两部分。如果你觉得好,按一个推荐举手之劳让更多的人可以看到。
步骤a
定位a
所谓定位就是回答几个问题,我出于什么目的要写一个框架,我的这个框架是干什
么的,有什么特性适用于什么场景,我的这个框架的用户对象是谁,他们会怎么使用,
框架由谁维护将来怎么发展等等。
1、如果你打算写框架,那么肯定心里已经有一个初步的定位,比如它是一个缓存
框架、Web MVC 框架、IOC 框架、ORM/数据访问框架、RPC 框架或是一个用于 Web
开发的全栈式框架。
2、是否要重复造轮子?除非是练手项目,一般我们是有了解决不了问题的时候才
会考虑不使用既有的成熟的框架而重复造轮子的,这个时候需要列出新框架主要希望解
决什么问题。有关是否应该重复造轮子的话题讨论了很多,我的建议是在把问题列清后
进行简单的研究看看是否可以通过扩展现有的框架来解决这个问题。一般而言大部分成
熟的框架都有一定的扩展和内部组件的替换能力,可以解决大部分技术问题,但在如下
情况下我们可能不得不自己去写一个框架,比如即使通过扩展也无法满足技术需求、安
全原因、需要更高的生产力、需要让框架和公司内部的流程更好地进行适配、开源的普
适框架无法满足性能需求、二次开发的成本高于重新开发的成本等等。
3、主打轻量级?轻量级是很多人打算自己写一个新框架的原因,但我们要明白,
大部分项目在一开始的时候其实都是轻量级的,随着框架的用户越来越多,它必定需要
满足各种奇怪的需求,在经过了无数次迭代之后,框架的主线流程就会多很多扩展点、
检测点,这样框架势必变得越来越重(从框架的入口到框架的工作结束的方法调用层次
越来越多,势必框架也就越来越慢),如果你打算把框架定位于一个轻量级的框架的话,
那么在今后的迭代过程中需要进行一些权衡,在心中有坚定的轻量级的理念的同时不断
做性能测试来确保框架的轻量,否则随着时间的发展框架可能会越来越重进而偏离了开
始的定位。
4、特性?如果你打算写一个框架,并且只有轻量级这一个理由的话,你或许应该
再为自己的框架想一些新特性,就像做一个产品一样,如果找不出两个以上的亮点,那
么这个产品不太可能成功,比如你的新框架可以是一个零配置的框架,可以是一个前端
开发也能用的后端框架。
5、其它?一般来说框架是给程序员使用的,我们要考虑框架使用的频度是怎么样
的,这可能决定的框架的性能需求和稳定性需求。还有,需要考虑框架将来怎么发展,
是希望走开源路线还是商业路线。当然,这些问题也可以留到框架有一个大致的结构后
再去考虑。
我们来为本文模拟一个场景,假设我们觉得现有的 Spring MVC 等框架开发起来效
率有点低,打算重复造轮子,对于新框架的定位是一个给 Java 程序员使用的轻量级的、
零配置的、易用的、易扩展的 Web MVC 框架。a
调研a
虽然到这里你已经决定去写一个框架了,但是在着手写之前还是至少建议评估一下
市面上的类似(成熟)框架。需要做的是通读这些框架的文档以及阅读一些源码,这么
做有几个目的:
1、通过分析现有框架的功能,可以制定出一个新框架要实现的功能列表。
2、通过分析现有框架的问题,总结出新框架需要避免的东西和改善的地方。
3、通过阅读现有框架的源码,帮助自己理清框架的主线流程为总体设计做铺垫
(后面总体设计部分会更多谈到)。
4、如果能充分理解现有的框架,那么你就是站在巨人的肩膀上写框架,否则很可
能就是在井底造轮子。
新开发一个框架的好处是没有兼容历史版本的包袱,但是责任也同样重大,因为如
果对于一开始的定位或设计工作没有做好的话,将来如果要对格局进行改变就会有巨大
的向前兼容的包袱(除非你的框架没有在任何正式项目中使用),兼容意味着框架可能
会越来越重,可能会越来越难看,阅读至少一到两个开源实现,做好充分的调研工作可
以使你避免犯大错。
假设我们评估了一些主流框架后已经很明确,我们的 MVC 框架是一个 Java 平台的、
基于 Servlet 的轻量级的 Web MVC 框架,主要的理念是约定优于配置,高内聚大于低
耦合,提供主流 Web MVC 框架的大部分功能,并且易用方面有所创新,新特性体包括:
(1)起手零配置,总体上约定由于配置,即使需要扩展配置也支持通过代码和配置文
件两种方式进行配置。
(2)除了 Servlet 之外不依赖其它类库,支持通过插件方式和诸如 Spring 等框架进
行整合。
(3)更优化的项目结构,不需要按照传统的 Java Web 项目结构那样来分离代码和
WEB-INF,视图可以和代码在一起,阅读代码更便利。
(4)拦截器和框架本身更紧密,提供 Action、Controller 和 Global 三个级别的"拦
截器"(或者说过滤器)。
(5)丰富的 Action 的返回值,返回的可以是视图、可以是重定向、可以是文件、可
以是字符串、可以是 Json 数据,可以是 Javascript 代码等等。
(6)支持针对测试环境自动生成测试的视图模型数据,以便前端和后端可以同时开发
项目。
(7)支持在开发的时候自动生成路由信息、模型绑定、异常处理等配置的信息页面和
调试页面,方便开发和调试。
(8)提供一套通用的控件模版,使得,并且支持多种模版引擎,比如
Jsp、Velocity、Freemarker、Mustache 等等。
嗯,看上去挺诱人的,这是一个不错的开端,如果你要写的框架自己都不觉得想用的话,
那么别人就更不会有兴趣来尝试使用你的框架了。a
解决难点a
之所以把解决难点放在开搞之前是因为,如果实现这个框架的某些特性,甚至说实
现这个框架的主流程有一些核心问题难以解决,那么就要考虑对框架的特性进行调整,
甚至取消框架的开发计划了。有的时候我们在用 A 平台的时候发现一个很好用的框架,
希望把这个框架移植到 B 平台,这个想法是好的,但之所以在这以前这么多年没有人这
么干过是因为这个平台的限制压根不可能实现这样的东西。比如我们要实现一个 MVC
框架,势必需要依赖平台提供的反射特性,如果你的语言平台压根就没有运行时反射这
个功能,那么这就是一个非常难以解决的难点。又比如我们在某个平台实现一个类似
于.NET 平台 Linq2Sql 的数据访问框架,但如果这个目标平台的开发语言并不像 C#那
样提供了类型推断、匿名类型、Lambda 表达式、扩展方法的话那么由于语法的限制你
写出来的框架在使用的时候是无法像.NET 平台 Linq2Sql 那样优雅的,这就违背了实现
框架的主要目的,实现新的框架也就变得意义不大了。
对于我们要实现的 MVC 框架貌似不存在什么根本性的无法解决的问题,毕竟在
Java 平台已经有很多可以参考的例子了。如果框架的实现总体上没什么问题的话,就需
要逐一评估框架的这些新特性是否可以解决。建议对于每一个难点特性做一个原型项目
来证明可行,以免在框架实现到一半的时候发现有无法解决的问题就比较尴尬了。
分析一下,貌似我们要实现的这 8 大特性只有第 1 点要研究一下,看看如何免配置
通过让代码方式让我们的 Web MVC 框架可以和 Servlet 进行整合,如果无法实现的话,
我们可能就需要把第 1 点特性从零配置改为一分钟快速配置了。
开搞a
1、首先需要给自己框架取一个名字,取名要考虑到易读、易写、易记,也需要尽量避
免和市面上其它产品的名字重复,还有就是最好不要起一个侮辱其它同类框架的名字以免引
起公愤。
2、如果将来打算把项目搞大的话,可以提前注册一下项目的相关域名,毕竟现在域名
也便宜,避免到时候项目名和域名差距很大,或项目的.com 或.org 域名对应了一个什么不
太和谐的网站这就尴尬了。
3、然后就是找一个地方来托管自己的代码,如果一开始不希望公开代码的话,最好除
了本地源代码仓库还有一个异地的仓库以免磁盘损坏导致抱憾终身,当然如果不怕出丑的话
也可以在起步的时候就使用 Github 等网站来托管自己的代码。
总体设计a
对于总体设计我的建议是一开始不一定需要写什么设计文档画什么类图,因为可能
一开始的时候无法形成这么具体的概念,我们可以直接从代码开始做第一步。框架的使
用者一般而言还是开发人员,抛开框架的内在的实现不说,框架的 API 设计的好坏取决
于两个方面。对于普通开发人员而言就是使用层面的 API 是否易于使用,拿我们的 MVC
框架举例来说:
剩余44页未读,继续阅读
HeartRain
- 粉丝: 2
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0