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

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

  •  2
     
  •   sorra ·
    sorra · 2015-09-08 23:22:30 +08:00 · 4019 次点击
    这是一个创建于 3151 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不再写这种代码:
    User user = userRepo.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 笑而不语
    lchy
        11
    lchy  
       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   ·   我们的愿景   ·   实用小工具   ·   3182 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 282ms · UTC 14:48 · PVG 22:48 · LAX 07:48 · JFK 10:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.