我正在编写一个php脚本,它从json文件中提取数据并将其映射/保存到DB中的适当结构中。根据文件的内容会有一些细微的变化。现在我想知道哪个选项最适合代码。
假设: 代码不用作其他代码中的组件 这些类不是实例化的,而只是静态方法的集合。
- 将所有方法放在一个类中:
醇>
class Extractor {
public static function readFile() { }
public static function saveToDB() { }
public static function mapResumeData() { }
public static function mapEducationData() { }
}
- 根据提取内容提供基类Extractor和各个Childclasses:
醇>
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() { ... }
}
- 也使用界面(我应该总是这样做吗?最佳做法?):
醇>
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() { ... }
}
- 不要使用类,只需将所有函数放在命名空间中
醇>
use namespace Extractor;
function readFile();
function saveToDB();
function mapData();
- 使用特征
醇>
答案 0 :(得分:1)
如果不知道“轻微变化”有多么微小,那么建议一种方法胜过另一种方法有点困难。但是,您的代码显然涉及文件读取,映射和数据库。有些人会使用有状态对象而不是静态类将这些内容拆分为专用的Readers,DataMappers和DBAL层。
我的建议是让它适用于您的案例以某种方式,例如编写一个案例的代码,然后复制或分支变体。然后检查提取抽象是否有意义以及如何抽象。首先提出一个好的抽象并不容易。当你发现它不是你需要的时候,改变抽象通常会更加昂贵。
也使用界面(我应该总是这样做吗?最佳做法?):
一般建议是program towards an interface。一个好处是,如果您使用类型提示,在使用代码时更换具体实现会更容易。但是,如果您没有多个实现,则不需要接口。我通常推迟创建一个界面,直到我碰巧需要第二件事。如果这些东西都共享一些代码,我会创建一个抽象类型。