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

Martian 框架发布了 3.0.29 版本

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

    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,这应该是注释才对),显得非常不专业,总体来说官网的排版和风格还是像模像样的。另外,文档虽然内容不多,但看得出来是下了功夫的,花了一些时间精心准备的。有多少人阅读我持怀疑态度,但还是支持一下楼主的匠人精神,希望越来越进步
    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   ·   实用小工具   ·   1450 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 17:35 · PVG 01:35 · LAX 09:35 · JFK 12:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.