php使用扩展,实现或特性来处理未重用的代码

时间:2017-03-09 10:11:49

标签: php

我正在编写一个php脚本,它从json文件中提取数据并将其映射/保存到DB中的适当结构中。根据文件的内容会有一些细微的变化。现在我想知道哪个选项最适合代码。

假设: 代码不用作其他代码中的组件 这些类不是实例化的,而只是静态方法的集合。

  
      
  1. 将所有方法放在一个类中:
  2.   
class Extractor {
    public static function readFile() { }
    public static function saveToDB() { }
    public static function mapResumeData() { }
    public static function mapEducationData() { }
}
  
      
  1. 根据提取内容提供基类Extractor和各个Childclasses:
  2.   
class Extractor {
    public static function readFile() { ... }
    public static function saveToDB() { ... }
}

class ResumeExtractor extends Extractor {
    public static function mapData() { ... }
}

class EductionExtractor extends Extractor {
    public static function mapData() { ... }
}
  
      
  1. 也使用界面(我应该总是这样做吗?最佳做法?):
  2.   
 interface IExtractor {
       public static function readFile();
       public static function saveToDB();
       public static function mapData();
    }

    class Extractor {
        public static function readFile() { ... }
        public static function saveToDB() { ... }
    }

    class ResumeExtractor extends Extractor implements IExtractor {
        public static function mapData() { ... }
    }

    class EductionExtractor extends Extractor implements IExtractor {
        public static function mapData() { ... }
    }
  
      
  1. 不要使用类,只需将所有函数放在命名空间中
  2.   
 use namespace Extractor;
    function readFile();
    function saveToDB();
    function mapData();
  
      
  1. 使用特征
  2.   

1 个答案:

答案 0 :(得分:1)

如果不知道“轻微变化”有多么微小,那么建议一种方法胜过另一种方法有点困难。但是,您的代码显然涉及文件读取,映射和数据库。有些人会使用有状态对象而不是静态类将这些内容拆分为专用的Readers,DataMappers和DBAL层。

我的建议是让它适用于您的案例以某种方式,例如编写一个案例的代码,然后复制或分支变体。然后检查提取抽象是否有意义以及如何抽象。首先提出一个好的抽象并不容易。当你发现它不是你需要的时候,改变抽象通常会更加昂贵。

  

也使用界面(我应该总是这样做吗?最佳做法?):

一般建议是program towards an interface。一个好处是,如果您使用类型提示,在使用代码时更换具体实现会更容易。但是,如果您没有多个实现,则不需要接口。我通常推迟创建一个界面,直到我碰巧需要第二件事。如果这些东西都共享一些代码,我会创建一个抽象类型。