LaraStore商城系统优化之:对模型代码进行整理和优化 2016-12-20


随着业务逻辑越来越复杂,模型作为数据库的映射里面的代码如果不做好规划,代码会越来越臃肿。

使用trait方法

Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait   为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait   和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。


下面我们举个例子,比如商品模型

use Illuminate\Database\Eloquent\Model;
use Phpstore\Repository\GoodsRepository;
use LaraStore\Cache\CacheCommon;
use LaraStore\Models\GoodsImage;


class Goods extends Model{

    use GoodsRepository,CacheCommon;
    protected $table = 'goods';
}

通过 use GoodsRepository  商品模型就继承了GoodsRepository类定义下的所有的方法。

这样在模型Goods中就像使用自身的方法一样使用GoodsRepository类中的方法。简化了Goods类,让代码更清晰。


这样在商品模型中,可以直接使用 $goods->url()就可以获取每个商品的链接。 (虽然这个url()方法在Goods类中并未定义)


在模型中定义额外的类处理相应的问题。比如 我们在商品相册模型中定义一个图片类,用来获取相册图片的链接。

商品图片存储介质有2种情况,存储在本地 或者存储在阿里云OSS网盘里面。

首先 ,我们来定义商品相册的模型

定义完商品相册模型后,我们可以在模型中定义一个图片方法



我们再来看看 这个图片类

【1】定义商品相册图片处理类

【2】构造函数注入商品相册模型 $gallery

class GoodsGalleryImage{

  use CommonTrait;
  protected $gallery;

  /*
  |-------------------------------------------------------------------------------
  |
  |  构造函数
  |
  |-------------------------------------------------------------------------------
  */
  public function __construct(GoodsGallery $gallery){

        $this->gallery         = $gallery;
  }
}


【3】定义获取相册的缩略图,商品详情页面图片以及商品原始图片


【4】我们可以加一个魔法方法,直接用对象属性的方式来获取对象函数里面的内容。(获取阿里云oss图片地址)


我们来看看 在tinker下面 演示下 获取商品图片地址

本文章为 LaravelStore官网原创 转载请注明出处。谢谢合作!