0

我正在寻找一种模式来设计我的应用程序。我有固定数量的实体类。例如 PostEntity、ArticleEntity、DocumentEntity。它们都是抽象类“实体”的子类。到目前为止,它看起来很简单。今天我有一个新的需求:实体类的实现会因系统而异,也就是说,我们会有几个系统:SystemA、SystemB、SystemC。每个系统都应该实现自己的 PostEntity、ArticleEntity、DocumentEntity 类。

您将如何以合理的方式创建类?

简单的方法是为每个系统创建一个文件夹并以这种方式放置类:SystemAPostEntity、SystemAArticleEntity、SystemADocumentEntity。等等。然后,也许使用工厂方法来创建对象。例如,要获取“SystemA”的“PostEntity”对象,工厂应使用实体类型的开关/案例,并在此开关/案例中使用系统的另一个开关/案例。这种方式对我来说似乎不正确。我希望你有另一个想法。

谢谢

4

1 回答 1

0

如果您必须处理多个实体,并且每个实体在每个系统中都有不同的行为集,那么您很可能会出现指数级的爆炸式增长。而且我不认为那部分是错误的,它只是代表了事物的本来面目。恕我直言,在这里寻找的唯一警告是如果您开始复制代码。

一开始采用子类化方法对我来说似乎没问题(即具有Entity>> PostEntity>> SystemAPostEntity)。然后你可以实现一个抽象工厂,为每个系统创建一个具体的工厂。你最终会得到类似的东西:

abstract class SystemFactory
{
public createPost(params);
...
}

class SystemAFactory extends SystemFactory
{
public createPost(params) 
  {
      return new SystemAPostEntity(params);
  }
}

这样,每个系统都会有一个为其创建对象的工厂。

需要考虑的一件事是给定系统的所有实体是否共享一些共同的行为(例如,它们必须携带时间戳以及与之相关的行为)。在这种情况下,您应该尝试将常见行为归为一个类并使用委托,而不是在每个SystemX*类中复制代码。某些语言具有Trait支持,这可以帮助您避免对委托进行编码。

高温高压

于 2013-03-12T12:00:16.500 回答