我有许多Soap Server类,其中大部分需要实现3种方法:
ping() // something to bounce a signal off to prove it has been reached
getCredentials($creds) // credentials to check sets session value
getCaller() // for logging, uses session value
由于它们构成了WSDL defn的一部分,因此需要公开。
我很确定这个(我把它命名为Soaplogin)需要是一个抽象类(因为它必须永远不能自己实例化)
然后扩展此核心的具体类具有自己的方法,其中没有一个是共享的。
我正在寻找最好使用的模式类型,并且有点困惑,虽然我认为模板方法恰好符合要求 - 但我可以简单地扩展SoapLogin类。
您可以向我提供有关最佳使用模式的建议,也许是此课程的首选名称。
(虽然这使用ZF1组件,但它不使用完整的MVC - 如果重要的话)
答案 0 :(得分:0)
如果您只想创建多个soap连接,这种模式可能是一个很好的解决方案。
另一个可能是使用界面。它会告诉你的程序,每个实现SoapItf的类(例如,如果你想要的话重命名)都能够执行soap方法。
如果你寻找一个演进的应用程序,也许你需要连接Rest webservice之后你可以创建一个抽象类Werbservice,两个类Soap和Rest扩展它,这两个类分别实现接口SoapItf和RestItf。
这种方法有助于使用多态性,这是OOP中的一个重要概念。
在这种情况下,我可以在不改变两者的情况下将方法添加到Soap或Rest。
之后如果您在示例中具有Soap特异性,则可以扩展Soap类。更容易发展应用程序并使用包体系结构(如果使用命名空间,则会很有趣)
答案 1 :(得分:0)
首选组合而不是继承。
你真正做的是创建完全独立的接口,只有偶然碰巧有相同的方法。
精细。总是做同样的通用方法 - 应该属于它自己的类。但不是所有这些方法的一类!每种方法一类!
然后,您可以将所有这些方法类添加到服务器类中,并以相同的方式添加所有特殊功能。
这样,您可以以任何方式组合任何通用函数,并在需要时仅将另一个添加到另一个API。
答案 2 :(得分:0)
在我看来,您可以使用模板模式来管理可在子类中扩展的公共资源。例如,您有一个soaplogin公共抽象类,可能有一些资源可供大多数子类使用。然后最好在超类中管理该资源,并在子类中传递回调以使用超类的资源。优点是您在一个地方管理资源。
例如,我的超类中有一个共同的资源。我可以创建一个回调传递资源作为参数。
interface ResourceCallback {
T call(Resource resource);
}
然后可以在超类中定义一个抽象方法,就像doWithResource(ResourceCallback回调)一样,所有子类现在都可以使用自己的方法实现资源。