php - 在这种情况下使用特征而不是继承或组合来重用代码有多糟糕?

标签 php inheritance composition traits

<分区>

我有一组扩展通用类的服务,该类在它们之间提供一些通用功能。

一组特定的这些服务有一个共同点:它们使用 API 中的特定资源,因此它们有很多共同的代码(连接到 API 并执行一些 GET 或 POST,应用 API要求,基本上改变端点和要传递的参数数量)。

我的问题是,将这段代码抽象为特征是否不好?并在需要使用该特定代码段的任何服务上重用它?

举个例子:

trait ApiResource {
    public function retrieve()
    {
        try {
            // apply logic of the resource
        } catch (\Exception $e) {
            return false;
        }
    }
}

class Departments extends Generic {
    use ApiResource;

    public function createCache(Cache $cache)
    {
        $cache->storeDepartments($this->retrieve('departments', 200));
    }
}

class Brands Generic {
    use ApiResource;

    public function createCache(Cache $cache)
    {
        $cache->storeBrands($this->retrieve('brands'));
    }
}

最佳答案

将它作为特征包含在内并不是固有的错误(双关语意),但我认为它作为 Generic 扩展的抽象类或甚至只是包含在 Generic 中。

大概这个方法将适用于您所有的 ApiResources,但它适用于您的ApiResources - 它不会用于任何其他类。所以 ApiResource 应该正常继承它。

Traits 通常用于一个类从多个源继承方法或多个不相关的类继承该方法——这里似乎都不是这种情况。我见过很少有 traits 适用的案例,这似乎不是其中之一。

关于php - 在这种情况下使用特征而不是继承或组合来重用代码有多糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37889806/

相关文章:

php - 使用 PHP 从 API 将数据上传到 Mysql DB

php - <?= 是什么意思?

javascript - JS 中基于 Mixin 和 Trait 的组合

composition - 在 After Effects 中增加合成的持续时间

Javascript 在列中不起作用

php - Cucumber:如何在 PHP 中编写代码片段/步骤定义?

c++ - 将基类动态转换为派生对象

c++ - 无法调用指针的打印函数

objective-c - 在类别中重写并在子类中再次重写的方法的调用优先级

java - 具有类特定属性的最佳解决方案