在这种情况下,学说继承还是只是联想?

时间:2016-09-20 14:01:34

标签: class oop doctrine-orm relationship symfony

我遇到了这个问题,我将我的类图转换为symfony代码。我有一个Project类和一个ProjectType类。通常,您会说项目属于某种项目类型,这意味着继承(IS A)关系。现在学说关于继承:

  

映射的超类是提供的抽象或具体类   持久化实体状态及其子类的映射信息,   但这本身并不是一个实体。

这个想法是可以制作不同的项目类型(它们应该是可管理的)。如果doctrine在这个例子中说ProjectType不是一个实体,那么我就无法实例化它们。所以我想到了OneToMany的关联。这是正确的OOP吗?

1 个答案:

答案 0 :(得分:1)

您可以指定抽象类中实体之间的关系,如果关系在具体实体中发生变化,则可以覆盖它。

例如,您有一个名为Project的抽象类,它与ProjectType有很多关系。

然后创建两个从Project扩展的实体,名为GreenProject和RedProject。 GreenProject只能关联一个ProjectType,因此基类中定义的关系是可以的。

他们的RedProject可以有多个ProjectType,因此是ManyToMany关系。然后,您必须通过重新声明RedProject类中的$ projectType属性并使用apropiate注释来覆盖基类中的现有关系。

例如,您可以在一个包中分发超级语言,并使用它们在AppBundle中扩展它们。这用于FosUserBundle(用户类),FosOauthBundle(例如客户端和令牌类)等。

相关问题