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

2018-05-02 10:14:05 +08:00
 DavidNineRoc

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

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()
    {

    }
}

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

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

@murmur 怎么说呢 Util != 质量的代码。
还有我只是举一个例子,怎么不写 ifelse。而不是说优秀的代码,我倒是想让你们多写一点,让我多多吸收
jacobma
2018-05-02 19:27:27 +08:00
觉得第一个代码其实挺好的
kslr
2018-05-02 23:31:43 +08:00
@DavidNineRoc 你没理解我的意思吧,大体就是和纯手撸没有区别

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

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

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

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

© 2021 V2EX