Inheritance 处理Symfony 2.1中具有继承的实体的业务逻辑

Inheritance 处理Symfony 2.1中具有继承的实体的业务逻辑,inheritance,symfony,business-logic,Inheritance,Symfony,Business Logic,我读过,实体的业务逻辑应该在单独的类(服务)中,而不是在实体类中。这听起来对我来说是正确的,没有问题,但是当存在实体继承时会发生什么呢 我的意思是,我有两个实体“通勤”和“单程乘车”,其中有一个抽象的超类叫做“乘车”。这两个类共享一些逻辑,因此为它们提供服务是可以的,但同时每个类都有自己的逻辑 例如,如果我想得到一个“骑乘描述”,它将根据实体类的不同而有所不同,我如何使用一个“骑乘”服务来处理这个问题?我应该为每个骑乘子类创建服务吗?(重复实体结构) 在这种情况下,如何以多态方式管理“骑乘”?在

我读过,实体的业务逻辑应该在单独的类(服务)中,而不是在实体类中。这听起来对我来说是正确的,没有问题,但是当存在实体继承时会发生什么呢

我的意思是,我有两个实体“通勤”和“单程乘车”,其中有一个抽象的超类叫做“乘车”。这两个类共享一些逻辑,因此为它们提供服务是可以的,但同时每个类都有自己的逻辑

例如,如果我想得到一个“骑乘描述”,它将根据实体类的不同而有所不同,我如何使用一个“骑乘”服务来处理这个问题?我应该为每个骑乘子类创建服务吗?(重复实体结构)


在这种情况下,如何以多态方式管理“骑乘”?

在抽象类上添加任何共享逻辑。我的意思是,骑自行车有共同之处

所有具体的实现都是在孩子身上进行的,他们做的事情是其他人做不到的


使用服务来放置与特定类型无关的逻辑,这些逻辑可以在一系列不同的情况下使用。(例如:模板、数据库访问、日志记录、文件访问等都是Symfony服务,它们是通用功能,可以在其他地方注入,但不与任何实体或特定功能结合)

感谢您的回答。我认为在Symfony中,实体类应该只操作要存储在数据库中的数据,而业务逻辑应该在这些类之外(在某些帮助器服务中)。我的意思是,这些实体类还应该管理模板方法,比如“getLongDescription”?在这种情况下,我无法在实体类中使用translator服务…我仍然有点困惑。无论如何谢谢你!嗯,我不太确定您想做什么,但基本上,实体只是在数据存储(可能是数据库或任何其他源)和应用程序逻辑之间映射某些数据的一种方式。在大多数情况下,它们只是一组字段、getter和setter的简单类。它们也可能包含一些基本逻辑,但不包括业务逻辑、模板或验证(有服务——TWIG、validator——可以这样做)。您应该做的是只在实体中保留数据,使用控制器获取所需的实体,并将其传递到TWIG模板,在该模板中可以以任何给定格式呈现它们(html、csv、json、xml…)和翻译(使用模板上的translator组件)。如果要转换实体数据,可以在实体上创建不同的字段,如“en_description”、“fr_description”、“es_description”,并创建类似“getDescription(Locale)”和“getLongDescription(Locale)”的方法,这实际上取决于你的设计和你想做什么。