我有一个导入一些用户的类,转换用户信息然后将其插入数据库。我在文件ImportEmployees
上有一个方法,它调用另外两个类来导入数据。一个类使某些用户匹配某些条件,另一个类处理剩余的用户。除了一种方法之外,这两个类完全相同。这一种方法正确地提取用户数据,因此它将调用另外两个不同的类。什么是良好的设计模式,可以很好地处理这个问题,或者更好的方法来解决这个问题,以消除代码重复。
以下是入口点类ImportEmployees
:full class here
public function handle()
{
handle(new ImportNapaUsers($this->file));
handle(new ImportNonNapaUsers($this->file));
}
ImportNapaUsers
班级:full class here
private function extractUsers()
{
$users = new ExtractNapaUsers($this->users);
$this->napaUsers = $users->getUsers();
}
ImportNonNapaUsers
班级:full class here
private function extractUsers()
{
$users = new ExtractNonNapaUsers($this->users);
$this->napaUsers = $users->getUsers();
}
$this->users
在这两个方面完全相同。此外,除extractUsers
方法外,两个类都相同。
答案 0 :(得分:1)
我试着详细说明:
new XYZ
private function extractUsers()
{
$users = new ExtractNonNapaUsers($this->users);
$this->napaUsers = $users->getUsers();
}
静态调用此函数,也使用oop 和
private
因为方法是$this->extractUsers(new ExtractNonNapaUsers($this->users));
,所以会更好:
private function extractUsers($users)
{
$this->napaUsers = $users->getUsers();
}
方法变为
foo
这是一个非常复杂的主题,您应该阅读更多相关内容:
https://de.wikipedia.org/wiki/Dependency_Injection
Object Oriented PHP Best Practices
:)
答案 1 :(得分:1)
我不会用设计模式过度复杂化。你需要的是继承和抽象类。
使用抽象方法extractUsers()创建一个抽象类ImportSomeUsers
,如下所示
abstract class ImportSomeUsers {
...
abstract protected function extractUsers();
}
然后通过扩展ImportSomeUsers
类来定义您的类:
class ImportNapaUsers extends ImportSomeUsers {
protected function extractUsers() {
$users = new ExtractNapaUsers($this->users);
$this->napaUsers = $users->getUsers();
}
}
class ImportNonNapaUsers extends ImportSomeUsers {
protected function extractUsers() {
$users = new ExtractNonNapaUsers($this->users);
$this->napaUsers = $users->getUsers();
}
}