V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lostvincent
V2EX  ›  问与答

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

  •  
  •   lostvincent · 2017-04-27 21:15:33 +08:00 · 1391 次点击
    这是一个创建于 2759 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一行内说完版
    『面对多个简单的小项目,大量基础的 CURD 和对应页面,如何减少时间的浪费?』

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    @sagaxu PHP 开发者,而且业务上暂时不会考虑 Java,:)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   960 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:40 · PVG 05:40 · LAX 13:40 · JFK 16:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.