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

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

大多数中小系统基本都在重复做这些事。
Comdex
2015-09-09 11:34:55 +08:00
要求无 xml 无注解, ok?
r00tt
2015-09-09 12:49:01 +08:00
ruby 用户表示毫无压力, activerecord 用起来就是爽
sorra
2015-09-21 19:32:03 +08:00
已经在开发了—— https://github.com/sorra/answerer
已参加 100offer 开源活动,求票票! http://i.100offer.com/projects?page=9 第一个
另外,继续收集建议!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/219252

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX