0

I have a number of Soap Server classes most of which will need to implement 3 methods:

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

As they form part of the WSDL defn they need to be public.

I am fairly sure this (I have christened it a Soaplogin) would need to be an abstract class (because it must never be instantiated on its own)

The concrete classes which extend then this core then have their own methods, none of which are shared.

I am searching for the best type of Pattern to use and am getting a bit confused, though I think a Template Method just about fits the bill - but I could just plain extend the SoapLogin class.

What advice can you give me on the best pattern to use, and maybe a preferred name for this class.

(while this uses ZF1 components it does not use full blown MVC - in case that was of importance)

4

3 回答 3

0

在我看来,您可以使用模板模式来管理可在子类中传播的公共资源。例如,您有一个soaplogin 通用抽象类,它可能有一些资源可供大多数子类使用。那么最好在超类中管理该资源并在子类中传递回调以使用超类的资源。优点是您在一个地方管理资源。

例如,我的超类中有一个公共资源。我可以创建一个回调传递资源作为参数。

interface ResourceCallback {
     T call(Resource resource);
}

然后可以在超类中定义一个抽象方法,如 doWithResource(ResourceCallback callback) 并且所有子类现在都可以使用他们自己的方法实现的资源。

于 2013-07-17T11:48:30.170 回答
0

更喜欢组合而不是继承。

你真正要做的是创建完全独立的接口,这些接口只是碰巧有相同的方法。

美好的。始终执行相同操作的通用方法 - 应该在它自己的类中。但不是所有这些方法的一个类!每个方法一个类!

然后,您可以将所有这些方法类添加到您的服务器类中,并以相同的方式添加所有特殊功能。

这样,您可以以任何方式组合任何通用函数,并在需要时仅将另一个添加到一个 API 中。

于 2013-07-17T11:43:23.930 回答
0

如果您只想创建几个肥皂连接,这种模式可能是一个很好的解决方案。

另一种可能是使用接口。它会告诉你的程序每个实现 SoapItf 的类(例如,如果你想重命名它)都能够执行soap方法。

如果您正在寻找一个不断发展的应用程序,那么您可能需要在之后连接 Rest webservice,以便您可以创建一个抽象类 Werbservice、两个类 Soap 和扩展它的 Rest,这两个类分别实现接口 SoapItf 和 RestItf。

这种方法有助于使用多态性,这是 OOP 中的一个重要概念。

类图

在这种情况下,我可以将方法添加到 Soap 或 Rest 而无需同时更改两者。

之后,如果您像示例中那样对 Soap 有特殊性,则可以扩展 Soap 类。开发应用程序和使用包架构会更容易(如果您使用命名空间会很有趣)

于 2013-07-17T10:41:09.130 回答