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

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

  •  
  •   DavidNineRoc May 2, 2018 2634 views
    This topic created in 2951 days ago, the information mentioned may be changed or developed.

    想建一个仓库存储一下这些代码,专门存储一些有用的代码片段,或者重构前和重构后的代码。 害怕遇到这样子的代码!!! 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[$ype] ?? array_shift($this->typeMethods); // 动态分类处理 $this->$method($request); return back()->with('status', '创建完成'); } /** * 普通文章的存储 */ protected function storeCommonArticle() { // do something } /** * 视频文章的存储 */ protected function storeVideoArticle() { } /** * 图片文章的创建 */ protected function storePictureArticle() { } } 

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

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

    @murmur 怎么说呢 Util != 质量的代码。
    还有我只是举一个例子,怎么不写 ifelse。而不是说优秀的代码,我倒是想让你们多写一点,让我多多吸收
    jacobma
        7
    jacobma  
       May 2, 2018 via Android
    觉得第一个代码其实挺好的
    kslr
        8
    kslr  
       May 2, 2018 via Android
    @DavidNineRoc 你没理解我的意思吧,大体就是和纯手撸没有区别
    About     Help     Advertise     Blog     API     FAQ     Solana     848 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 53ms UTC 19:29 PVG 03:29 LAX 12:29 JFK 15:29
    Do have faith in what you're doing.
    ubao msn 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