首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >重构代码以减少PHP中的冗余

重构代码以减少PHP中的冗余
EN

Stack Overflow用户
提问于 2016-07-26 04:09:08
回答 2查看 83关注 0票数 0

我有几个共享公共逻辑的类。例如,class AddEmployee api负责向中添加一名员工。AddLocation负责添加人员的位置。类如下:

class AddEmployee
{
   public function Add()
   {
      $apiUrl = "https://api.abc.com/Employees";;

        $authParameters = array(
            'oauth_consumer_key' => $this->CONSUMER_KEY,

        );

        $xml .= <<<EOM
                <SuperFund>
                <ABN>$obj->abn</ABN>
                <Type>REGULATED</Type>
                </SuperFund>
                EOM;

        $queryParameters = array(
            'xml' => $xml
        );

        $response = $this->ProcesssRequestAndGetResponse('POST',$apiUrl,$authParameters,$queryParameters,$oauth_secret);

        return $response;

   }
}


class AddLocation
{
   public function Add()
   {
      $apiUrl = "https://api.abc.com/Locations";;

        $authParameters = array(
            'oauth_consumer_key' => $this->CONSUMER_KEY,

        );

        $xml .= <<<EOM
                <Location>
                <Address1>$obj->abn</Address1>
                <City>Dhaka</Citry>
                </Location>
                EOM;

        $queryParameters = array(
            'xml' => $xml
        );

        $response = $this->ProcesssRequestAndGetResponse('POST',$apiUrl,$authParameters,$queryParameters,$oauth_secret);

        return $response;

   }
}

在上述两个类中,只有xml部分不同,其他部分相同。将来还会添加其他新类,其中只有xml会有所不同。

我的问题是,我如何重构以从每个类中删除重复的内容?

哪种设计模式可以去掉重复的代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-26 04:29:03

class AddThing {
    public function Add() {//all your stuff, except it calls getXml()}
    public abstract function getXml();
}

class AddEmployee extends AddThing {
    public function getXml() { // get the employee XML }
}

class AddLocation extends AddThing {
    public function getXml() { // get the location XML }
}
票数 2
EN

Stack Overflow用户

发布于 2016-07-26 04:27:38

在这种情况下:“不要紧‘模式’...只要do it。”

很明显,您可以定义一个(protected ...)方法,该方法接受两个参数: URL和XML。只需将大部分逻辑拆分到该方法中,然后更改其他方法(public ...)方法来调用它。

还有(还有"IMHO"):“归根结底,‘设计模式’就是指导方针。”经验法则,如果你愿意的话。并不是你在现实生活中遇到的每一件事都会完全符合一个“模式”,你也不需要觉得“你必须找到一个”来证明你作为一个工程师决定要做的事情。

相反,应该非常务实地思考应用程序、工作组以及您预期将来需要进行的更改。尝试以这样一种方式设计方法,即当您的继任者面临不可避免的未来变化时,可能不必更改“百种方法”。(相反,多亏了你的远见卓识,他们只需要做一些改变。)在与你的经理和团队中的其他成员仔细讨论这件事后,使用你最好的判断。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38576561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档