不再写这种代码:
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 已经够好用了,还能不能更加简化呢?
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 已经够好用了,还能不能更加简化呢?