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

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

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

    想建一个仓库存储一下这些代码,专门存储一些有用的代码片段,或者重构前和重构后的代码。 害怕遇到这样子的代码!!! 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   ·   我们的愿景   ·   实用小工具   ·   987 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:48 · PVG 06:48 · LAX 15:48 · JFK 18:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.