V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
sorra
V2EX  ›  Java

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

  •  2
     
  •   sorra ·
    sorra · Sep 8, 2015 · 4826 views
    This topic created in 3890 days ago, the information mentioned may be changed or developed.
    不再写这种代码:
    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 replies    2015-09-21 19:32:03 +08:00
    sorra
        1
    sorra  
    OP
       Sep 8, 2015
    开帖收集一下用户痛点
    embbnux
        2
    embbnux  
       Sep 8, 2015
    你可以基于 JRUBY 的 rails 代码,和你想要实现的蛮像的
    fwrq41251
        3
    fwrq41251  
       Sep 8, 2015
    repo 那个不就是 spring data 吗, object 的复制有各种 beanUtil
    mfaner
        4
    mfaner  
       Sep 9, 2015
    UserCard.setUser (User ) 或者 User.createCard (List<Post>) 这样呢
    领域层不是业务逻辑层吗,领域层怎么还用失血模型的
    预编译修改源代码那个叫注解处理器
    reeco
        5
    reeco  
       Sep 9, 2015 via iPhone
    可以看看 Jfinal
    gaitana
        6
    gaitana  
       Sep 9, 2015
    既然这样写了就不如干脆用动态语言了
    sorra
        7
    sorra  
    OP
       Sep 9, 2015
    @mfaner setUser 和 createCard 内部还是要赋值语句实现的,我把这个实现都干掉。
    注解处理器不够强, JRebel 的复杂度比较像我这种,不过它是装载时做的。
    sorra
        8
    sorra  
    OP
       Sep 9, 2015
    @fwrq41251 最后做出来应该会比 Spring Data 强。 BeanUtil 似乎不能把多个 object 拼装进一个模型。
    sorra
        9
    sorra  
    OP
       Sep 9, 2015
    @gaitana 诶嘿嘿,动态语言确实更彻底一些,我做的数据拼装其实很像 JS 。不过编译期检查是不是挺有用的呢?
    AgentK
        10
    AgentK  
       Sep 9, 2015
    groovy scala 笑而不语
    Hxu2M811KVSJqN75
        11
    Hxu2M811KVSJqN75  
       Sep 9, 2015
    有没有直接画完 ER 图,就帮你生成好所有 Web 前端代码(无论 DAO 还是 REST API )的开发框架。(提供一个 HTML5/FLASH 的 GUI Web 界面)
    程序员(或者 DBA )只要画好数据模型和关系, 定义几种增删改的逻辑。就自动生成好一套可用可测试可发布的框架代码。

    大多数中小系统基本都在重复做这些事。
    Comdex
        12
    Comdex  
       Sep 9, 2015
    要求无 xml 无注解, ok?
    r00tt
        13
    r00tt  
       Sep 9, 2015
    ruby 用户表示毫无压力, activerecord 用起来就是爽
    sorra
        14
    sorra  
    OP
       Sep 21, 2015
    已经在开发了—— https://github.com/sorra/answerer
    已参加 100offer 开源活动,求票票! http://i.100offer.com/projects?page=9 第一个
    另外,继续收集建议!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2345 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 15:39 · PVG 23:39 · LAX 08:39 · JFK 11:39
    ♥ Do have faith in what you're doing.