4

好的,所以我试图对所有这些模式有所了解。

好的,所以我在 CodeIgniter 中编写了一个应用程序,它需要能够使用 SOAP(可能是 XML、逗号分隔等)将有关汽车和客户的数据发送到不同类型的公司。

但他们都需要同样的东西。

我想让它尽可能动态,并确保它易于编写测试。

因此,该服务应该采取一些措施:

  • 处理程序
  • 申请人 [1-2]
  • 参数
  • 目的

我开始创建不同的课程

Gr8Exp NordCar SwePerf

每个实现接口iServiceRequest

interface iServiceRequest{
    /**
     * Send the request to the company server.
     */
    function sendRequest();
    /**
     * Saves the response into the database.
     */
    function saveResponse();
    /**
     * Prepares the request to the company, setting info from form and shit.
     */
    function prepareRequest();
    /**
     * Soap, XML, CSV, JSON
     * @param type $method
     */
    function setRequestHandler(iServiceRequestHandler $handler);
}

然后他们需要根据我放入的处理程序来构建 Soap、XML、CSV、JSON 请求。

在那些需要被验证的人之后(不是所有人都这样做了),我使用了:

interface iAdaptServiceRequest{
    /**
     * Structure the array information and put it into an object structure in the right place.
    */
    function structure(array $info);
    /**
     * Make all the checks for the function
     */
    function validateInfo();
}

但是我被卡住了,当我只使用 SOAP 请求时它工作得非常好;但现在。由于我需要以不同的方式格式化它们,因此对每种类型的请求或我不知道该怎么做的公司使用不同的处理程序。我可以将它们放在不同的文件夹中并在不同的文件夹中重新创建类。但这不是一个好习惯,因为我一直在重复代码。

最后我想运行一些这样的链接:

$result = $m->prepareRequest()->sendRequest()->saveResponse();

有什么建议么??

4

3 回答 3

3

恕我直言:

-- 创建/使用前端控制器。

-- 前端控制器确定使用哪个请求处理程序(JSON、SOAP、XML 等)。

-- 请求处理程序生成一个通用的“请求”对象,该对象在所有接口中的行为都相同,基本上将变量放入“请求对象”内的通用命名格式

-- 它确定将请求发送到哪个服务并将请求对象发送到那里

-- 服务处理请求对象并生成响应对象

-- 控制器创建一个适当的 (JSON/SOAP/XML) 视图对象来将响应对象处理为正确的视图类型,并且视图将您的响应输出为该类型。

于 2013-04-15T19:13:26.440 回答
0

我会使用类似你的东西:$result = $m->prepareRequest('JSON')->sendRequest()->saveResponse();,但指定我发送的数据格式。

该方法prepareRequest(string $type)将检查格式并调用另一种方法将您的数据转换为相应的格式。

像这样的东西:

function prepareRequest(string $type){
     if ($type == 'json'){
          $this->convert2json();
     }
     if ($type == 'xml'){
          $this->convert2xml();
     }
     // And so on
}
于 2013-04-15T22:00:48.967 回答
0

关于 MVC 或观察者模式经常存在混淆。这不是这种模式适用的情况。在 MVC 模式中,视图和模型是相互关联的。视图必须根据主题的信息进行自我更新。数据库中的视图和基础表就是一个很好的例子。这不是你想要的。

适合这个问题的设计模式是建造者模式。Builder 模式由四种协作的类类型组成:1. Builder,2. ReaderManager,3. ConverterManager,和 4. DataObject。ReaderManager 正在使用解释器模式。可以使用状态模式进行转换。ReaderManager(一些 DataObject)的输出是 ConversionManager 的输入。这可以使用抽象类而不是接口来完成(我更喜欢以数据为中心的类)。Builder 将 ReaderManager 与 ConverterManager 连接起来,并负责数据的传输。

几年前,我写过关于设计模式的文章。构建器模式是我描述的模式之一,这是该页面的链接: http ://www.loekbergman.nl/InsideArchitecture/TheProcess/DesignPatterns/Builder 它显示了该模式的 UML 图。在下一个链接中,您可以下载包含一些设计模式示例的 jar。其中之一是构建器模式: http ://www.loekbergman.nl/InsideArchitecture/DownloadsAndLicense 我在几年前编写了这段代码,因此我给你这个代码没有保证。(在这种情况下,这是正确的术语吗?)在代码中,您可以看到一个名称为规范的文件夹。这是解释器模式的另一个例子。(在 Builder 模式中当然也有这种模式的一个例子)。

完整的是 MVC 的链接 - 模式: http ://www.loekbergman.nl/InsideArchitecture/TheProcess/DesignPatterns/Observer 和解释器模式: http ://www.loekbergman.nl/InsideArchitecture/TheProcess/DesignPatterns /翻译

于 2013-04-17T20:52:46.827 回答