打算做一个智能 Java Web 框架,自动写代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sorra
V2EX    Java

打算做一个智能 Java Web 框架,自动写代码

  •  2
     
  •   sorra
    sorra 2015-09-08 23:22:30 +08:00 4607 次点击
    这是一个创建于 3744 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不再写这种代码:
    User user = userReo.get (id );
    List<Post> posts = postRepo.recentByUserId (id );
    UserCard userCard = new UserCard ();
    userCard.setId (user.getId ());
    userCard.setName (user.getName ());
    userCard.setAvatar (user.getAvatar ());
    userCard.setPosts (posts );

    而是写这种:
    User user = findById (id );
    Posts posts = recentByField ("userId", id );
    UserCard userCard = autobuild (user, posts );

    findById, recentByField, autobuild 是用来防止 IDE 报错的空方法:
    <T> T autobuild (Object... args )
    编译时追加一个预编译阶段,根据上下文信息,推导生成实现代码,并修改原代码使其调这个实现。
    userRepo, postRepo 这些依赖,会自动添加相应的注入。

    数据的互转、拼装,不用写一坨代码了。对提供数据的 Repository ,不用手动注入了! AOP 也可以直接生成!
    生成的是可读的、平铺直叙的代码,可用于调试,不用去调试九拐十八弯、各种反射的框架代码了。
    无聊代码大减!远离可能出错的手写代码,远离未来的遗留代码。

    理想的结果是使用者只需表达业务逻辑,不用管细节。
    三层架构的表现层、领域层、数据源层,已经简化两层了。
    至于表现层,感觉 Spring MVC 已经够好用了,还能不能更加简化呢?
    14 条回复    2015-09-21 19:32:03 +08:00
    sorra
        1
    sorra  
    OP
       2015-09-08 23:38:12 +08:00
    开帖收集一下用户痛点
    embbnux
        2
    embbnux  
       2015-09-08 23:42:21 +08:00
    你可以基于 JRUBY 的 rails 代码,和你想要实现的蛮像的
    fwrq41251
        3
    fwrq41251  
       2015-09-08 23:43:02 +08:00
    repo 那个不就是 spring data 吗, object 的复制有各种 beanUtil
    mfaner
        4
    mfaner  
       2015-09-09 00:51:43 +08:00
    UserCard.setUser (User ) 或者 User.createCard (List<Post>) 这样呢
    领域层不是业务逻辑层吗,领域层怎么还用失血模型的
    预编译修改源代码那个叫注解处理器
    reeco
        5
    reeco  
       2015-09-09 01:01:13 +08:00 via iPhone
    可以看看 Jfinal
    gaitana
        6
    gaitana  
       2015-09-09 01:04:38 +08:00
    既然这样写了就不如干脆用动态语言了
    sorra
        7
    sorra  
    OP
       2015-09-09 02:47:39 +08:00
    @mfaner setUser 和 createCard 内部还是要赋值语句实现的,我把这个实现都干掉。
    注解处理器不够强, JRebel 的复杂度比较像我这种,不过它是装载时做的。
    sorra
        8
    sorra  
    OP
       2015-09-09 02:49:02 +08:00
    @fwrq41251 最后做出来应该会比 Spring Data 强。 BeanUtil 似乎不能把多个 object 拼装进一个模型。
    sorra
        9
    sorra  
    OP
       2015-09-09 02:52:19 +08:00
    @gaitana 诶嘿嘿,动态语言确实更彻底一些,我做的数据拼装其实很像 JS 。不过编译期检查是不是挺有用的呢?
    AgentK
        10
    AgentK  
       2015-09-09 05:31:05 +08:00
    groovy scala 笑而不语
    Hxu2M811KVSJqN75
        11
    Hxu2M811KVSJqN75  
       2015-09-09 11:12:14 +08:00
    有没有直接画完 ER 图,就帮你生成好所有 Web 前端代码(无论 DAO 还是 REST API )的开发框架。(提供一个 HTML5/FLASH 的 GUI Web 界面)
    程序员(或者 DBA )只要画好数据模型和关系, 定义几种增删改的逻辑。就自动生成好一套可用可测试可发布的框架代码。

    大多数中小系统基本都在重复做这些事。
    Comdex
        12
    Comdex  
       2015-09-09 11:34:55 +08:00
    要求无 xml 无注解, ok?
    r00tt
        13
    r00tt  
       2015-09-09 12:49:01 +08:00
    ruby 用户表示毫无压力, activerecord 用起来就是爽
    sorra
        14
    sorra  
    OP
       2015-09-21 19:32:03 +08:00
    已经在开发了 https://github.com/sorra/answerer
    已参加 100offer 开源活动,求票票! http://i.100offer.com/projects?page=9 第一个
    另外,继续收集建议!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5190 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 07:16 PVG 15:16 LAX 23:16 JFK 02:16
    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