V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Joker123456789
V2EX  ›  Java

这是一个关于某框架起源的故事

  •  
  •   Joker123456789 · 2020-08-02 20:55:37 +08:00 · 2131 次点击
    这是一个创建于 1592 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大概是在 2012 年的 上半年,那会儿我已经学 java 有一段时间了,学校开始教我们当时比较流行的三大框架( struts2,spring,hibernate ),在学之前我们老师为了让我们更加的了解底层,就带我们写过一个简易的 struts2,以及一个简易的 jdbc 封装,就是从这一刻开始,让我开始了追逐真相的道路。

    尝试自己写框架

    有了老师的启蒙,加上之前积累的 java 知识,我很快就在脑海里推演出了 struts2 的大概原理,但是我不知道到底对不对,按照我的这个推演 到底能不能真的实现出类似的功能。

    于是,说干就干,我开始了第一段追逐真相的行动,经过一段时间的努力,果然,我实现了一个类似的框架,当时取名叫 EasyMVC,但是 也仅仅只是用来检测我的推断的,并没有当做一个开源项目,更没有发布出去,因为那会儿还不知道开源这回事。

    后来我又接着写了一个类似 Mybatis 的框架,叫 EasyJDBC,同样没有发布。

    故事到这就告一段落了,在之后的一段时间里,我都没有再去做过类似的事情,直到多年以后。

    初次尝试 AOP,IOC

    时间来到了 2017 年,我当时也不知道怎么回事,突然有一种冲动吧,我就在想 我实现过 MVC 框架,实现过 JDBC 框架,但是唯独没有尝试过 AOP 和 IOC,于是我再次投入到 框架的开发中,一样现在脑海里推演出大概原理,然后去验证它对不对。

    后来我索性就写出了一个全栈框架,包含 MVC,AOP,IOC,JDBC,当时是完全模仿 spring 的,需要在 web.xml 里配监听器,配 servlet,还需要手工导入很多 jar 包 才可以用,非常的繁琐。

    我还拿他当过作品投递给某大厂,可惜收不到回音,因为实在是太简单了,做得不好,仅仅只是算是一个练手的项目吧。

    SpringBoot 横空出世

    那一年,SpringBoot 横空出世,席卷整个 IT 界,几乎掀起了一阵换框架的风潮,因为他太简洁了,连 tomcat 都内置了。 恰恰就是这个内置 tomcat,让我激起了兴趣。

    我开始去研究 tomcat 是怎么内置进来的,但我一直找不到资料,因为实在是太少了,后来我想到可以用 netty,就这样,经过了一阵子,一个内置 netty 的全栈开发框架诞生了,当时一样延续了之前的风格,取名叫 Easy-Framework 。

    但是这个框架一样做的很简单,仅仅是练手项目。但是我实在是舍不得丢弃,就把代码传到了 github,保存了下来。

    正式的开源项目

    代码保存了下来,就有了地基,我这个人比较喜欢多想,每次遇到点新鲜事总会去思考他是怎么实现的,然后会去试一下到底对不对。

    而刚好又有了这个地基在这,于是我就开始漫长的迭代之路,每次有了新想法就会加进去,一点点的迭代,项目越来越完善,而刚好 git 又流行了起来。

    自己的 git 熟练度越来越高,项目也越来越完善,于是就干脆作为一个正式的开源项目来做了。

    项目大换血

    自从决定作为开源项目来做以后,我就定了几个计划。

    • 项目必须要认真做,起码代码要干净整洁
    • 使用起来必须很方便,尽量不要增加学习成本
    • 要有自己的官网

    为了做到上面三点,整个项目都来了一次大换血,经过了好几轮迭代,才形成了现在的样子。

    先把所有代码都 review 了一遍,做了一次整理,对模块的划分也做了大改动,使其更加合理。

    同时内置的 netty 由于太基础了,不堪重负,在 http 的这个场景下很多东西需要自己实现,于是干脆换成了内置 tomcat,后来直接去掉了内置容器,丢弃了 Servlet,直接采用 JRE 类库的内置 API 实现的 http 服务。

    JDBC 模块,也进行了大改,不再模仿 Mybatis,取消了 XML 里写 SQL 的做法,改用了注解开发,基本的单表操作 几乎不需要写任何 SQL,同时也支持多数据源。

    声明式 API 的出现

    怀着极简的中心思想,对任何东西都尽量做减法,于是我把 Controller 去掉了,取而代之的是一个 interface,为了应对没有 Controller 的尴尬,我做了很多事情来增强体验,比如 提供参数校验功能,对象接参更加的人性化,丢弃转发和重定向(现在是前后端分离时代)等一系列的措施吧,起码目前为止,我个人认为 这种方式比较优雅。

    但同时,依然保留了对传统 Controller 的兼容。


    到目前为止,这个项目已经挺过了最艰难的时刻了,该有的东西都有了,我们甚至有了自己的分布式中间件,接下来我们还会继续推出更多的生态,并且还会继续完善这个项目。

    哦,对了这个项目叫 Mars-Java

    官网:http://www.mars-framework.com

    微博:@个人开发者-俞晔

    westoy
        1
    westoy  
       2020-08-02 21:02:17 +08:00
    正经做和 java 相关的产品名字里别带"java"这种 oracle 的商标, 会挨 oracle 法务铁拳的......
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5413 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:46 · PVG 09:46 · LAX 17:46 · JFK 20:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.