关于处理体力劳动类代码的烦恼

2017-04-27 21:15:33 +08:00
 lostvincent
一行内说完版
『面对多个简单的小项目,大量基础的 CURD 和对应页面,如何减少时间的浪费?』

========================= 正文 =========================

背景:
>> 有一堆小项目,在基础代码编写的时候浪费了不少时间,但是有尝试去改变

目前做法:
>> 自己写了一个代码生成器,读取配置文件生成基础代码,只需要设定名字、字段、验证规则等几个基本的字段,然后一键生成。

现状:
- 若是手写,太费时间和精力,非常不喜欢
- 若是依靠自动生成器的话,因为虽然是基础 CURD,但是需要注意的小细节还是不少,而且也不能忽略(比如处理
user.favorite 这种有上下级关系的 Resource 路由),否则还得去调一遍,节省的时间就有限了,然而要实现这些细节的话,生成器的架构实现暂且不谈,编写配置文件的地方又要变多,同样省不了太多时间

目前做法:
>> 简单的整合了下生成器,先简单的生成下,然后一个个看过去,再调下细节问题。

问题内容:
>> 怎么处理这种代码,有什么好的生成工具(感觉只能自己定制了)或者是别的解决方案么?

========================= 吐槽部分(选看)=========================

最近做了一系列小的项目,其实以前也不少。这些项目基本都在一个星期内完成,而且每天也只需要花小几个小时即可。

每次开一个新坑,要开项目,配置,引包,建数据库、路由。这些虽然烦还能接受,更烦的就是建完数据库要写基础的 CURD,都是对着字段一个个写验证,然后做增删改。由于这是后台部分,还要对着写展示,详情,编辑什么的页面。简单来说就是要写各个 Model 的 Resource 控制器,顺带还要写对应的 View。

然后吧,既然是后台,那基本的筛选什么也要吧,然后又是一堆搜索框的东西。写完后又想到要要那的小功能。

其他的先不管,只看最基本的 CURD 以及对应的后台管理页面。控制器层面,每个都只需要那 7 个方法(小部分可能只需要特定的几个),然后我写的时候,经常就是复制一个,改下 Model 的引用,变量名,改下验证字段和规则,改下最后 return 的参数以及路径等等。全部是机械式操作,毫无技术含量,费眼也费力。

(这里提一下,我是用 Laravel 开发的,部署部分就不赘述了)

然后写完控制器,又要去把页面一个个撸出来,列表页、搜索表单、详情显示、修改编辑等,又是要对着字段一个个来,眼睛也累,大多数也都是复制黏贴,改改字段名,改改 input 标签的值什么的

然后最后页面和控制器联调一下,把之前快速无趣劳动中的手误、脑抽、外星人在我键盘上乱按(这条有待考证)导致的错误修掉。

最后完工,开始写正真的需求部分代码了。然而这部分基础,至少占了我三四成的时间,感觉实在是浪费,当然也有因为我经验少的原因。

========================= 关于代码生成器(选看) =========================

我开始写这玩意儿的时候是想省力,不过由于经验实在有限,第一版的时候基本不能用被我咔掉了,整个项目删掉。

最近写了第二版,勉强能用吧,昨天刚帮忙紧急生成了一个小项目,顺带发现了点不足然后干掉了。

如果很多细节的地方能解决,那也算是一个偷懒小工具了。不过现在就是解决不了,比较烦,因为有一部分内容,加到配置中加不好,不加又要生成完一个个改,简单来说就是有这样那样的小毛病导致不能用的顺心。

希望等我以后经验多了能构建好这个工具吧。写完数据库和路由,一键生成管理页面,想想还是蛮有意思的。

最后,感谢愿意点进来看的朋友 ( ´_ゝ`)
1331 次点击
所在节点    问与答
6 条回复
liprais
2017-04-27 21:36:27 +08:00
Rails
billlee
2017-04-27 22:05:30 +08:00
为什么要用代码生成,用继承不行吗?你看 MFC 和 Qt, 高下立判
jybox
2017-04-27 22:57:25 +08:00
我之前在知乎的回答:

其实我们每天都在用的编译器、虚拟机都是「代码生成器」,目的当然是帮助你站在更高的抽象层次去解决问题,但使用代码生成器也应该遵守一个原则 —— 生成出来的代码不应进入版本控制、不应修改生成的代码,甚至都不要尝试去阅读生成的代码,否则就会适得其反,再次陷回更低层次的代码。

关于你这个情况,我觉得不要去尝试「生成代码」,而是创建一个「项目框架」,然后让业务逻辑变成「可配置」的。Laravel 的话也有一些这样的项目 https://github.com/z-song/laravel-admin
sagaxu
2017-04-27 23:10:15 +08:00
Java 的话,有 spring-data-jpa 和 spring-data 和 spring-data-rest
anyele
2017-04-27 23:26:30 +08:00
用 CMS
lostvincent
2017-04-28 13:32:37 +08:00
@billlee 只是单纯的给很多表写基础 CURD,继承不太合适( PHP 开发)

@jybox 感谢提醒,配置这个方向我确实没深入考虑,不过看了 Github 的项目之后,感觉目前我的生成器蛮接近,区别在于我的更为初级(简陋)。
对于尝试阅读生成的代码这部分,我同意不应该过多的去了解,但是「手工简单修改代码」级别的还是必要的

@sagaxu PHP 开发者,而且业务上暂时不会考虑 Java,:)

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

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

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

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

© 2021 V2EX