什么OOP模式可用于在多个;“步骤”;上课?
在OOP中,所有东西都是具有自己属性和方法的对象。但是,您通常希望运行一个流程,该流程跨越需要按顺序运行的多个步骤。例如,您可能需要下载一个XML文件,解析它并相应地运行业务操作。这至少包括三个步骤:下载、解组、解释解码请求 在一个非常糟糕的设计中,你会在一个方法中完成这一切。在稍微好一点的设计中,您可以将单个步骤放在方法中,或者更好地放在新类中。因为您想要测试和重用单个类,所以它们不应该相互了解。在我的例子中,一个中央控制类按顺序运行它们,将一个步骤的输出传递给下一个步骤。我注意到这样的控制和命令类往往增长很快,而且不太灵活或可扩展 因此,我的问题是:什么OOP模式可以用于实现业务流程,何时应用哪种模式?什么OOP模式可用于在多个;“步骤”;上课?,oop,design-patterns,Oop,Design Patterns,在OOP中,所有东西都是具有自己属性和方法的对象。但是,您通常希望运行一个流程,该流程跨越需要按顺序运行的多个步骤。例如,您可能需要下载一个XML文件,解析它并相应地运行业务操作。这至少包括三个步骤:下载、解组、解释解码请求 在一个非常糟糕的设计中,你会在一个方法中完成这一切。在稍微好一点的设计中,您可以将单个步骤放在方法中,或者更好地放在新类中。因为您想要测试和重用单个类,所以它们不应该相互了解。在我的例子中,一个中央控制类按顺序运行它们,将一个步骤的输出传递给下一个步骤。我注意到这样的控制和
我目前的研究: 这似乎是我现在正在使用的,但是一些定义说它只是管理“对等”类。我不确定它是否适用于一系列孤立的步骤 当使用上述多个中介时,您可能会将其称为。我想这将解决调解人不够灵活的问题
使用事件(可能与)我可以使单个步骤侦听特殊事件并发送不同的事件。这样,管道非常灵活,但也很难遵循和控制。责任链最适合这种情况。这几乎就是CoR的定义
如果使用Spring,可以考虑基于该模式的有趣的基于Spring的实现:
显然,没有spring,情况非常相似。责任链最适合这种情况。这几乎就是CoR的定义
如果使用Spring,可以考虑基于该模式的有趣的基于Spring的实现:
显然,没有spring,情况非常相似。我相信复合命令(的值)将符合您所描述的。在Eclipse中经常使用这些命令。我相信复合命令(的一个值)将符合您所描述的。这些应用在Eclipse中很常见。依赖项注入还不够吗?这使得您的代码可以重用和测试(根据您的要求),并且不需要使用一些复杂的设计模式
public final class SomeBusinessProcess {
private final Server server;
private final Marshaller marshaller;
private final Codec codec;
public SomeBusinessProcess(Server server, Marshaller marshaller, Codec codec) {
this.server = server;
this.marshaller = marshaller;
this.codec = codec;
}
public Foo retrieve(String filename) {
File f = server.download(filename);
byte[] content = marshaller.unmarshal(f);
return codec.decode(content);
}
}
依赖注入还不够吗?这使得您的代码可以重用和测试(根据您的要求),并且不需要使用一些复杂的设计模式
public final class SomeBusinessProcess {
private final Server server;
private final Marshaller marshaller;
private final Codec codec;
public SomeBusinessProcess(Server server, Marshaller marshaller, Codec codec) {
this.server = server;
this.marshaller = marshaller;
this.codec = codec;
}
public Foo retrieve(String filename) {
File f = server.download(filename);
byte[] content = marshaller.unmarshal(f);
return codec.decode(content);
}
}
你目前的研究听起来很到位。@Gordon谢谢。我害怕听到这个。我希望有更好的解决办法。你目前的研究听起来非常准确。@Gordon谢谢。我害怕听到这个。我希望有更好的解决办法。