高质量优秀代码片段,工作中能用到的有哪些? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DavidNineRoc
V2EX    问与答

高质量优秀代码片段,工作中能用到的有哪些?

  •  
  •   DavidNineRoc 2018-05-02 10:14:05 +08:00 2305 次点击
    这是一个创建于 2722 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想建一个仓库存储一下这些代码,专门存储一些有用的代码片段,或者重构前和重构后的代码。 害怕遇到这样子的代码!!! KMG78z0qiI.png 举个栗子:

    • 多 ID 查找
    class ArticleController { public function index(Request $request) { $ids = $request->input('ids'); // 得到的是字符串数组,转成整型 ['2', '4', '6'] foreach ($ids as &$id) { $id = intval($id); } $articles = Article::whereIn($ids)->get(); return $articles; } // 用原生 PHP 函数减少代码量 public function resonIndex(Request $request) { $ids = $request->input('ids'); // 得到的是字符串数组,转成整型 ['2', '4', '6'] $ids = array_map('intval', $ids); $articles = Article::whereIn($ids)->get(); return $articles; } } 
    • 多类型文章创建
    class ArticleController { public function store(Request $request) { $articleData = $request->only(['title', 'type', 'body']); // 普通文章 if ($articleData['type'] == 1) { // do something } // 视频文章 elseif ($article['type'] == 2) { // do something } // 图片文章 elseif ($article['type'] == 3) { // do something } else { // 默认存储普通文章 } return back()->with('status', '创建完成'); } } 
    • 之后
    <?php class ArticleController { // 文章类型对应的方法 protected $typeMethods = [ 'storeCommonArticle', 'storeVideoArticle', 'storePictureArticle' ]; public function store(Request $request) { $type = $request->input('type'); $method = $this->typeMethods[$type] ?? array_shift($this->typeMethods); // 动态分类处理 $this->$method($request); return back()->with('status', '创建完成'); } /** * 普通文章的存储 */ protected function storeCommonArticle() { // do something } /** * 视频文章的存储 */ protected function storeVideoArticle() { } /** * 图片文章的创建 */ protected function storePictureArticle() { } } 

    大伙都来秀一下自己见过或者用过的优秀代码。

    第 1 条附言    2018-05-02 11:23:38 +08:00
    数组的索引访问忘记写了>_<
    8 条回复    2018-05-02 23:31:43 +08:00
    mcfog
        1
    mcfog  
       2018-05-02 11:09:23 +08:00
    然而例子的代码质量并不高
    DavidNineRoc
        2
    DavidNineRoc  
    OP
       2018-05-02 11:24:00 +08:00
    @mcfog 嗯,所以亮出你的代码吧
    kslr
        3
    kslr  
       2018-05-02 13:27:51 +08:00
    文章类型应该交给 model,验证用 validation 把所有拆分开。这样既灵活,也能用事件等等。感觉楼主这样用和直接手写 PHP 有什么区别
    kslr
        4
    kslr  
       2018-05-02 13:31:42 +08:00
    我个人的习惯是所有定义为资源控制器,根据接口操作数据,如果有分类就添加一对多关联等等。
    像文章类型都在模型内部转换好
    murmur
        5
    murmur  
       2018-05-02 13:35:25 +08:00   1
    一般都是直接找成组的 util 代码收集多了 自己的 util 也快赶上别人的 util 了
    DavidNineRoc
        6
    DavidNineRoc  
    OP
       2018-05-02 17:41:35 +08:00
    @kslr 你不明白我的意思,我的旨意是少些 ifelse,而不是深层。 而且文章类型交给 model ?创建的时候,Model 都没有存在,你怎么判断。
    你偏要说分层的话,我还想说,有类型判断的话,应该用 repository 层,Model 层只应该处理关联关系和重写基类的方法。而且我的哪里有用到验证了?

    @murmur 怎么说呢 Util != 质量的代码。
    还有我只是举一个例子,怎么不写 ifelse。而不是说优秀的代码,我倒是想让你们多写一点,让我多多吸收
    jacobma
        7
    jacobma  
       2018-05-02 19:27:27 +08:00 via Android
    觉得第一个代码其实挺好的
    kslr
        8
    kslr  
       2018-05-02 23:31:43 +08:00 via Android
    @DavidNineRoc 你没理解我的意思吧,大体就是和纯手撸没有区别
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1170 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 23:30 PVG 07:30 LAX 16:30 JFK 19:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86