Martian 原名叫 Mars-Java,为了避免跟 java 商标产生冲突,所以改名了。
在遭受了 100 多条评论后,我认识到了一些问题,其中最大的就是 接口受理的请求方式太少了,在某些场景下不够用。
首先呢,我得在解释一次:Martian 是可以接收任意 http 请求的,只不过 api 接口只受理这么几种,我的限制不是做在服务上的,而是做在接口上的,所以呢 ajax 发出的那个 option 是可以正常接收并响应 200 的,完全没问题。
希望大家以后不要在误解咯。
接口受理的请求方式更多了,新增了 PUT 和 DELETE,也就是目前为止,接口可以受理 GET,POET,DELETE,PUT 四种请求方式了, [为什么不全支持,暂时不予解释] 。
API 新增 @MarsReference 注解
很简单,跟之前的 GET,POST 一样设置,只不过 ReqMethod 里面多了两个选项。
@RequestMethod(ReqMethod.PUT)
String expUploadRequest(ExpVO expVO)
我们目前的声明式 API,采用的如下机制:
这样会出现一些局限,那就是一个 interface 只能对应一个实现类,玩起来就像是 service 的父接口一样, 为了改善这个情况,我提供了一个新的注解 @MarsReference
这个注解怎么用呢?请看下面示例,注意看注释和双引号里的汉字
/**
* 老套路,正常声明一个接口
*/
@MarsApi(refBean = "这里还是可以引用 bean")
public interface ExpApi {
/**
* get 请求示例
* http://127.0.0.1:8080/expGetRequest?name=张三&names=王五&names=赵六
* @param expVO
* @return
*/
@MarsReference(beanName = "这里的规则,请看下面第一点",refName = "这里的规则,请看下面第二点",refType = RefType.METHOD)
List<ExpVO> expGetRequest(ExpVO expVO);
}
从这一刻开始,interface 和实现类彻底解耦了,他们不再是父子关系(父子关系那一套也一样兼容),一个 interface 可以引用多个 bean 里面的方法或者属性,在一定程度上增加了 interface 的灵活性。
Martian 官网:http://www.mars-framework.com
1
tao147258 2020-08-07 09:41:51 +08:00
双手支持!!!
至少可以熟悉开源项目的各种流程,这个还是很好的。 ============== 以下是我比较主观的评价=================== 我估计作者的工作年限应该不长(两三年),业务背景比较深,建议转到基础架构方向的工作做做 从项目的 parent pom 来看,竟然显式依赖了一个 mysql-jdbc-connector,我后面就不太想看了,httpserver 真的就用的 sun 包下的代码( sun 下的代码不建议用,你不知道那一天代码就改了。。。),从代码上看你的经验还相当不足,这个项目真的连玩具都算不上,因为不好玩 建议先进入一个开源项目成为 contributor 锻炼下,或者以开发常用技术栈的脚手架或模板开始,你现在的水品真的不怎么样,花精力搞这个有点浪费时间,先把几十个设计模式用熟悉吧 推荐 https://github.com/iluwatar/java-design-patterns |
2
tao147258 2020-08-07 09:47:02 +08:00
补充下,能看出作者还是很有追求的,加油!!!!!
|
3
Joker123456789 OP @tao147258 非常感谢您的点评,但我真的很好奇,您所说的 经验和水平不足,具体体现在哪些地方,真心求教,真心的。
然后呢我觉得还是有必要解释一下的,我是真的虚心接受你的点评的,只是解释一下。 关于 mysql-jdbc-connector 的问题,我是故意放里面的,因为: 1. maven 可以手工排除,如果不想要可以手工排除,然后引入自己想要的 2. mysql 是使用频率最高的数据库,我放这个在里面基本可以在大部分场景下 让使用者少做一步。 3. 我的分页封装目前只支持 mysql,所以从一定程度上说 这个项目就是只支持 mysql 的,预先放一个在里面也是比较合理的。 4. 如果这个真的算问题的话,那么我预先放里面的 fastjson,durid,也是不应该的,万一就有人不喜欢用这两个呢? 我如果不预先放 fastjson 而用 jackson,那也可以套用这个逻辑来说不好嘛,对不对? sun 的问题 1. 为了不用 tomcat,netty 等,所以就干脆直接采用 sun 包了。 2. 从目前的测试来看,JDK8 - JDK14 都是支持的,所以我才敢放心往外发布。 3. 如果未来的 JDK15 不支持了,那我再升级就好啦,从目前大家更换 JDK 的意愿来看,等 JDK15 被大众使用,估计还要好几年。 最后回到原点:我真心求教 我的水平和经验 的不足,具体体现在哪些方面,真心求教。 期待您的回复。 |
4
Joker123456789 OP @tao147258 再请教个问题: 我是 java 程序员,一直都是做应用层的,如果想做架构层 哪怕是去公司的架构组做个程序员也好, 如果想往这个方向走,应该怎么办?
因为我看 java 招牌的信息都是招应用层程序员, 架构类的职位凤毛菱角。 |
5
yiyi11 2020-08-07 12:32:27 +08:00 via Android
你的官网写了
“More than 100 companies have chosen Martian and have provided services to more than 200 individual developers 。” 这是真的吗?如果是真的,那我多有冒犯,失敬失敬,佩服佩服。 如果不是真的,你是觉得好玩才这样写的吗?你的项目在生产环境验证过了吗?别光指望别人来当小白鼠啊,你用来上线了没?项目规模有多大? 还有你这版本号,好家伙,才多久了就 3.0 了? spring 十几年才 5.x 的版本,springboot 好几年才 2.x 的版本,大版本号都是积累大量的改动才发布的,你这起飞速度也太快了吧。 给人的感觉就是急功近利,投机取巧。 |
6
Joker123456789 OP @yiyi11 版本号也能喷?? 我下次更新写 100.X 都行,你管得着吗? springboot 的版本号定义规则跟我有个屁关系?我下次吧小数点去掉,每次更新都整数上升,1 变 2,2 变 3 都行,关你屁事?
还有啊,你不想用就出门左拐,在这喷什么呢?说的像我在求你一样。 还有啊,这是开源项目,用户会直接给我报酬吗? 会吗? 急功近利这四个字你怎么 说出来的? 说的就像我骗一个是一个一样,,我能骗到啥?? 是别人 pull 一次我能获得一块钱,还是别人进我的官网一次我能获得一块钱?? 还是别人引用一次我的 maven 坐标 我能获得一块钱?? 不形成巨大的用户规模,会有稳定的赞助吗??? 用户来一个走一个 我能形成巨大稳定的规模吗?? 会吗?? 这么大个人了,动动脑子。 |
7
Joker123456789 OP @yiyi11 商业项目,卖出一个赚一笔钱,哪怕都是一锤子买卖,那也没关系,反正钱骗到手了。
但是,但是!!! 这个是开源项目。 你下载不给钱,引入 jar 不给钱,基于它开发项目不给钱,最后发现不好就骂一句辣鸡然后跑了。 什么都没给我,我什么都没骗到。 所以,这样的一锤子买卖 有什么意义??你觉得我会做吗? 你居然用处了 急功近利,投机取巧 八个字。。 我不知道你怎么想的 |
8
Joker123456789 OP @yiyi11 你说大版本才更新,那我问你:
1. 我一开始是 1.X 用的 netty,这时处于模仿 springboot 的阶段 2. 当我开始使用声明式 API 以后,我升级到 2.X,同时在此后发行过小版本,把 netty 换成了 tomcat 3. 当我丢弃 tomcat 采用 httpserver 的时候,我升级倒了 3.X,也就是现在这个版本。 请问,这样的大版本改动,有问题吗? 就知道张口就来,要不您也发布一个东西来让我挑挑刺??? 我保证挑得你找不着北。 口嗨谁不会啊。 |
9
tikazyq 2020-08-07 16:20:56 +08:00
去年三月份的项目,到目前为止应该发展了 1 年半了,star 数 300 不到,先赞一下楼主的开源毅力和努力程度👍
想法是不错,和主流框架有一些改进和创新,但是不知道具体解决了啥核心问题。现在框架类的项目基本是处于红海,竞争非常激烈,同质化严重。当一个优秀框架稳定下来,占了头部用户的时候,新入项目如果没什么创新和突出的优势,几乎是没什么市场的。例如 java 的 web 框架,一般都是首选 SpringBoot ;爬虫我会选 Scrapy ;前端我会选 Antd ;容器我会选 Docker ;编排我会选 K8S ; CI/CD 我会选 Jekins ;等等。 所以,我建议楼主可以放弃主推你框架,而是从业务层面来解决一些实际问题。要做一个通用框架,受欢迎的关键在于性能和易用性方面有质的飞跃,否则很难有用户使用。 |
10
tikazyq 2020-08-07 16:30:09 +08:00
至于官网上的英文说明,除了一些基本的语法错误(例如冠词 a/an 不分),专业术语的错误用法(注解翻译为 comment,这应该是注释才对),显得非常不专业,总体来说官网的排版和风格还是像模像样的。另外,文档虽然内容不多,但看得出来是下了功夫的,花了一些时间精心准备的。有多少人阅读我持怀疑态度,但还是支持一下楼主的匠人精神,希望越来越进步
|
11
madpecker009 2020-08-07 16:33:10 +08:00
@Joker123456789 淡定。。。
|
12
Joker123456789 OP @tikazyq 被发现了,,哈哈哈, 英文都是机翻的(用的谷歌翻译),我本人英文的水平其实很差。 你的那个建议,我听进去了,后面会往这方面考虑的,非常感谢。
|
13
cookii 2020-08-07 17:08:45 +08:00
虽然我是个菜鸡,我也来提一点小意见吧。
1.降低第三方包的耦合 打个比方,用默认用 FastJSON 没问题,但是在核心包中,框架中不要直接引入其他框架的包和类。自己定义 JsonParser 接口,提供几个常用实现,GsonJsonParser 、FastJsonJsonParser.....这样方便自己未来拓展(Maven 依赖可以用 provided),也方便使用者自己定义自己的 JsonParser 。 像数据库,连接池 ,HttpServer, Log ,等等也是如此。 2.用户的自由很重要 我看到有不少写死的地方,比如时间格式,定时器,redis 锁等等。做成用户可以定制其实不难,springboot 提供了很多优秀的案例,开源项目就是要兼容更多的情况,不能兼容的情况也要允许用户自己编码,不然很难照顾大全,只能满足自己的需求。 还有就是如果有自己的特色就更好了,目前看不到有痒点和痛点,希望能做出特色。 比我还是厉害的(滑稽 |
14
yiyi11 2020-08-07 17:16:09 +08:00 via Android
@Joker123456789 你还没回答我的第一个问题。
|
15
dnL 2020-08-07 17:19:06 +08:00
@gc528262067 说到点子上 LZ 不至于这么生气,拿版本号就喷 LZ 急功近利,投机取巧。任谁也受不了吧?这不活脱一个键盘侠么
|
17
yiyi11 2020-08-07 17:30:07 +08:00 via Android
@Joker123456789 “急功近利,投机取巧”说的是官网那段英文描述,为什么要骗人?如果是真实的我道歉。
|
18
yiyi11 2020-08-07 17:30:17 +08:00 via Android
“急功近利,投机取巧”说的是官网那段英文描述,为什么要骗人?如果是真实的我道歉。
|
21
pushback 2020-08-07 18:12:04 +08:00
楼上笑死我了
|
24
gowk 2020-08-07 23:26:57 +08:00 via Android
别吵了,有意思么,有这时间多写点代码不好吗😂
|
26
aitaii 2020-08-08 07:50:00 +08:00 via Android
帮楼上的请教一下楼主:
官网介绍中提到 >More than 100 companies have chosen Martian and have provided services to more than 200 individual developers 然后在 谁在使用 这个环节官网中的介绍只有几个国画风的 logo 。 是否愿意介绍一下哪些公司在用呢? |
27
tctc4869 2020-08-08 08:59:37 +08:00
现在很多 java mvc 框架,甚至融合持久层,同质化太严重了,导致想选的就那么几个(不过 Spring MVC 的确很啰嗦)。所以能不能有点其他比较有创意的突破。
|
28
Joker123456789 OP @aitaii 可以,待我后期整理一下
|