Laravel/PHP 重构代码以使用相同的不同模式

我正在使用 Laravel (PHP)。我想重构下面的代码以要求 A 类和 B 类使用相同的 funsth()。funSth() 在两个类中重复,而唯一的区别是模型。


有没有办法可以简化到下面?是否可以将其重构为第二个代码?


当前的:


class A {


    public function funSth(){

        Models\Profile::create();

    }


    public function main(){

        $this->funA();

    }

}


class B {

    public function funSth(){

        Models\Location::create();

    }


    public function main(){

        $this->funB();

    }

}

预期的:


class A {

    public function main(){

        (new Y)->funSth();

    }

}


class B {

    public function main(){

        (new Y)->funSth();

    }

}


class Y {

    public function funSth(){

         Models\AnyModel::create();

    }

}


侃侃尔雅
浏览 131回答 2
2回答

Smart猫小萌

经过一段时间的研究。这是我的解决方案。use Illuminate\Database\Eloquent\Model;trait Y{    protected function create(Model $model, array $attributes){        model->create($attributes);    }}因此,对于 A 类和 B 类:class A {    use Y;    public function main($data){        $this->create((new Models\ModelAA), $data)    }}class B {    use Y;    public function main($data){        $this->create((new Models\ModelBB), $data)    }}基本思想是使用Illuminate\Database\Eloquent\Modeltrait Y 中的抽象类并在其之前初始化模型。
打开App,查看更多内容
随时随地看视频慕课网APP