我正在寻找一种模式来设计我的应用程序。 我有固定数量的实体类。例如。 PostEntity,ArticleEntity,DocumentEntity。它们都是抽象类'Entity'的子类。 到目前为止看起来很简单。今天我得到了一个新的要求:实体类的实现将因系统而异,这意味着,我们将有几个系统:SystemA,SystemB,SystemC。每个系统都应该实现自己的PostEntity,ArticleEntity,DocumentEntity类。
您将如何以合理的方式创建课程?
简单的方法是为每个系统创建一个文件夹,并以这种方式放置类:SystemAPostEntity,SystemAArticleEntity,SystemADocumentEntity。等等。 然后,可以使用Factory方法创建对象。例如,要获得'SystemA'的'PostEntity'对象,工厂应使用实体类型的开关/案例,并在此开关/案例中使用系统的另一个开关/案例。这种方式对我来说似乎不正确。我希望你有另一个想法。
由于
答案 0 :(得分:0)
如果您必须处理多个实体,并且每个实体每个系统都有不同的行为集,那么您很可能会出现指数类爆炸。我不认为这部分是错的,它只是代表事物的方式。恕我直言,这里唯一要注意的警告是你是否开始复制代码。
采用子类化方法对我来说似乎没问题(即Entity
>> PostEntity
>> SystemAPostEntity
)。然后,您可以实现Abstract Factory,为每个系统创建一个具体的工厂。你最终会得到类似的东西:
abstract class SystemFactory
{
public createPost(params);
...
}
class SystemAFactory extends SystemFactory
{
public createPost(params)
{
return new SystemAPostEntity(params);
}
}
通过这种方式,每个系统都有一个工厂,可以为它创建对象。
要考虑的一件事是,给定系统的所有实体是否共享某些共同行为(例如,它们必须携带时间戳以及与之相关的行为)。在这种情况下,您应该尝试将该常见行为分组到一个类中,并使用委派而不是复制每个SystemX*
类中的代码。有些语言有Trait支持,这可能会帮助您避免编写委派代码。
HTH