Martian 框架发布了 3.0.29 版本 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Joker123456789
V2EX    Java

Martian 框架发布了 3.0.29 版本

  •  
  •   Joker123456789 2020-08-06 23:32:48 +08:00 3574 次点击
    这是一个创建于 1966 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Martian 原名叫 Mars-Java,为了避免跟 java 商标产生冲突,所以改名了。

    先说点题外话

    在遭受了 100 多条评论后,我认识到了一些问题,其中最大的就是 接口受理的请求方式太少了,在某些场景下不够用。

    首先呢,我得在解释一次:Martian 是可以接收任意 http 请求的,只不过 api 接口只受理这么几种,我的限制不是做在服务上的,而是做在接口上,所以呢 ajax 发出的那个 option 是可以正常接收并响应 200 的,完全没问题。

    希望大家以后不要在误解咯。

    本次更新的点

    1. 接口受理的请求方式更多了,新增了 PUT 和 DELETE,也就是目前为止,接口可以受理 GET,POET,DELETE,PUT 四种请求方式了, [为什么不全支持,暂时不予解释] 。

    2. API 新增 @MarsReference 注解

    新增的 PUT 和 DELETE 怎么用

    很简单,跟之前的 GET,POST 一样设置,只不过 ReqMethod 里面多了两个选项。

    @RequestMethod(ReqMethod.PUT) String expUploadRequest(ExpVO expVO) 

    @MarsReference 注解是啥

    我们目前的声明式 API,采用的如下机制:

    • 创建 interface -> 创建实现类 -> 在 interface 上加上 MarsApi 注解

    这样会出现一些局限,那就是一个 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); } 
    1. beanName 属性: 这里也可以引用一个 bean,如果这里引用了就以这个为主,如果这里没引用就以 interface 上的全局为主
    2. refName 属性: 要引用的资源,可以是方法名也可以是属性名,如果不设置,默认为这个方法的名称
    3. refType 属性: 用来标记 refName 里设置的是方法名还是属性名,默认为方法名

    从这一刻开始,interface 和实现类彻底解耦了,他们不再是父子关系(父子关系那一套也一样兼容),一个 interface 可以引用多个 bean 里面的方法或者属性,在一定程度上增加了 interface 的灵活性。

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

    28 条回复    2020-08-08 10:48:09 +08:00
    tao147258
        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
    tao147258
        2
    tao147258  
       2020-08-07 09:47:02 +08:00
    补充下,能看出作者还是很有追求的,加油!!!!!
    Joker123456789
        3
    Joker123456789  
    OP
       2020-08-07 10:34:52 +08:00
    @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 被大众使用,估计还要好几年。

    最后回到原点:我真心求教 我的水平和经验 的不足,具体体现在哪些方面,真心求教。

    期待您的回复。
    Joker123456789
        4
    Joker123456789  
    OP
       2020-08-07 11:08:19 +08:00
    @tao147258 再请教个问题: 我是 java 程序员,一直都是做应用层的,如果想做架构层 哪怕是去公司的架构组做个程序员也好, 如果想往这个方向走,应该怎么办?

    因为我看 java 招牌的信息都是招应用层程序员, 架构类的职位凤毛菱角。
    yiyi11
        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 的版本,大版本号都是积累大量的改动才发布的,你这起飞速度也太快了吧。
    给人的感觉就是急功近利,投机取巧。
    Joker123456789
        6
    Joker123456789  
    OP
       2020-08-07 13:49:37 +08:00
    @yiyi11 版本号也能喷?? 我下次更新写 100.X 都行,你管得着吗? springboot 的版本号定义规则跟我有个屁关系?我下次吧小数点去掉,每次更新都整数上升,1 变 2,2 变 3 都行,关你屁事?

    还有啊,你不想用就出门左拐,在这喷什么呢?说的像我在求你一样。

    还有啊,这是开源项目,用户会直接给我报酬吗? 会吗? 急功近利这四个字你怎么 说出来的?

    说的就像我骗一个是一个一样,,我能骗到啥?? 是别人 pull 一次我能获得一块钱,还是别人进我的官网一次我能获得一块钱?? 还是别人引用一次我的 maven 坐标 我能获得一块钱??

    不形成巨大的用户规模,会有稳定的赞助吗??? 用户来一个走一个 我能形成巨大稳定的规模吗?? 会吗??

    这么大个人了,动动脑子。
    Joker123456789
        7
    Joker123456789  
    OP
       2020-08-07 14:03:01 +08:00
    @yiyi11 商业项目,卖出一个赚一笔钱,哪怕都是一锤子买卖,那也没关系,反正钱骗到手了。

    但是,但是!!! 这个是开源项目。

    你下载不给钱,引入 jar 不给钱,基于它开发项目不给钱,最后发现不好就骂一句辣鸡然后跑了。 什么都没给我,我什么都没骗到。

    所以,这样的一锤子买卖 有什么意义??你觉得我会做吗?

    你居然用处了 急功近利,投机取巧 八个字。。 我不知道你怎么想的
    Joker123456789
        8
    Joker123456789  
    OP
       2020-08-07 14:18:00 +08:00
    @yiyi11 你说大版本才更新,那我问你:

    1. 我一开始是 1.X 用的 netty,这时处于模仿 springboot 的阶段
    2. 当我开始使用声明式 API 以后,我升级到 2.X,同时在此后发行过小版本,把 netty 换成了 tomcat
    3. 当我丢弃 tomcat 采用 httpserver 的时候,我升级倒了 3.X,也就是现在这个版本。

    请问,这样的大版本改动,有问题吗?

    就知道张口就来,要不您也发布一个东西来让我挑挑刺??? 我保证挑得你找不着北。 口嗨谁不会啊。
    tikazyq
        9
    tikazyq  
       2020-08-07 16:20:56 +08:00
    去年三月份的项目,到目前为止应该发展了 1 年半了,star 数 300 不到,先赞一下楼主的开源毅力和努力程度

    想法是不错,和主流框架有一些改进和创新,但是不知道具体解决了啥核心问题。现在框架类的项目基本是处于红海,竞争非常激烈,同质化严重。当一个优秀框架稳定下来,占了头部用户的时候,新入项目如果没什么创新和突出的优势,几乎是没什么市场的。例如 java 的 web 框架,一般都是首选 SpringBoot ;爬虫我会选 Scrapy ;前端我会选 Antd ;容器我会选 Docker ;编排我会选 K8S ; CI/CD 我会选 Jekins ;等等。

    所以,我建议楼主可以放弃主推你框架,而是从业务层面来解决一些实际问题。要做一个通用框架,受欢迎的关键在于性能和易用性方面有质的飞跃,否则很难有用户使用。
    tikazyq
        10
    tikazyq  
       2020-08-07 16:30:09 +08:00
    至于官网上的英文说明,除了一些基本的语法错误(例如冠词 a/an 不分),专业术语的错误用法(注解翻译为 comment,这应该是注释才对),显得非常不专业,总体来说官网的排版和风格还是像模像样的。另外,文档虽然内容不多,但看得出来是下了功夫的,花了一些时间精心准备的。有多少人阅读我持怀疑态度,但还是支持一下楼主的匠人精神,希望越来越进步
    td width="10" valign="top">
    madpecker009
        11
    madpecker009  
       2020-08-07 16:33:10 +08:00
    @Joker123456789 淡定。。。
    Joker123456789
        12
    Joker123456789  
    OP
       2020-08-07 16:55:36 +08:00
    @tikazyq 被发现了,,哈哈哈, 英文都是机翻的(用的谷歌翻译),我本人英文的水平其实很差。 你的那个建议,我听进去了,后面会往这方面考虑的,非常感谢。
    cookii
        13
    cookii  
       2020-08-07 17:08:45 +08:00
    虽然我是个菜鸡,我也来提一点小意见吧。

    1.降低第三方包的耦合
    打个比方,用默认用 FastJSON 没问题,但是在核心包中,框架中不要直接引入其他框架的包和类。自己定义 JsonParser 接口,提供几个常用实现,GsonJsonParser 、FastJsonJsonParser.....这样方便自己未来拓展(Maven 依赖可以用 provided),也方便使用者自己定义自己的 JsonParser 。
    像数据库,连接池 ,HttpServer, Log ,等等也是如此。

    2.用户的自由很重要
    我看到有不少写死的地方,比如时间格式,定时器,redis 锁等等。做成用户可以定制其实不难,springboot 提供了很多优秀的案例,开源项目就是要兼容更多的情况,不能兼容的情况也要允许用户自己编码,不然很难照顾大全,只能满足自己的需求。

    还有就是如果有自己的特色就更好了,目前看不到有痒点和痛点,希望能做出特色。
    比我还是厉害的(滑稽
    yiyi11
        14
    yiyi11  
       2020-08-07 17:16:09 +08:00 via Android
    @Joker123456789 你还没回答我的第一个问题。
    dnL
        15
    dnL  
       2020-08-07 17:19:06 +08:00
    @gc528262067 说到点子上 LZ 不至于这么生气,拿版本号就喷 LZ 急功近利,投机取巧。任谁也受不了吧?这不活脱一个键盘侠么
    yiyi11
        16
    yiyi11  
       2020-08-07 17:29:19 +08:00 via Android
    @dnL “急功近利,投机取巧”说的是官网那段英文描述,为什么要骗人?如果是真实的我道歉。
    yiyi11
        17
    yiyi11  
       2020-08-07 17:30:07 +08:00 via Android
    @Joker123456789 “急功近利,投机取巧”说的是官网那段英文描述,为什么要骗人?如果是真实的我道歉。
    yiyi11
        18
    yiyi11  
       2020-08-07 17:30:17 +08:00 via Android
    “急功近利,投机取巧”说的是官网那段英文描述,为什么要骗人?如果是真实的我道歉。
    dnL
        19
    dnL  
       2020-08-07 17:39:08 +08:00
    @yiyi11 你是个杀人犯,如果你没杀人我道歉
    yiyi11
        20
    yiyi11  
       2020-08-07 17:49:48 +08:00 via Android
    @dnL 没必要,回到这个项目的讨论就好,是我的错我就认。
    pushback
        21
    pushback  
       2020-08-07 18:12:04 +08:00
    楼上笑死我了
    haozhang
        22
    haozhang  
       2020-08-07 21:55:11 +08:00 via Android
    @yiyi11 那你认一下错啊,手动狗头
    yiyi11
        23
    yiyi11  
       2020-08-07 22:11:39 +08:00
    @haozhang 所以我想问那段英文描述的真实性,作者到现在都不给我一个正面的答复?
    gowk
        24
    gowk  
       2020-08-07 23:26:57 +08:00 via Android
    别吵了,有意思么,有这时间多写点代码不好吗
    haozhang
        25
    haozhang  
       2020-08-08 00:59:54 +08:00 via Android
    @yiyi11 所以你倒是看看作者的回复啊,小伙子
    aitaii
        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 。
    是否愿意介绍一下哪些公司在用呢?
    tctc4869
        27
    tctc4869  
       2020-08-08 08:59:37 +08:00
    现在很多 java mvc 框架,甚至融合持久层,同质化太严重了,导致想选的就那么几个(不过 Spring MVC 的确很嗦)。所以能不能有点其他比较有创意的突破。
    Joker123456789
        28
    Joker123456789  
    OP
       2020-08-08 10:48:09 +08:00
    @aitaii 可以,待我后期整理一下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1326 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 23:58 PVG 07:58 LAX 15:58 JFK 18:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86