【问题标题】:Deal with business logic for entities with inheritance in Symfony 2.1在 Symfony 2.1 中处理具有继承的实体的业务逻辑
【发布时间】:2012-11-13 16:12:20
【问题描述】:

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

我的意思是,我有两个实体“Commute”和“SingleRide”以及一个名为 Ride 的抽象超类。这两个类共享一些逻辑,因此可以提供一个服务,但同时每个类都有自己的逻辑。

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

在这种情况下,如何以多态方式管理“游乐设施”?

【问题讨论】:

    标签: inheritance symfony business-logic


    【解决方案1】:

    在抽象类上添加任何共享逻辑。我的意思是,RIDES 的共同点。

    所有特定的实现都在孩子身上进行,他们做的事情别人没有做。

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

    【讨论】:

    • 感谢您的回答。我认为在 Symfony 中,实体类应该只操作要存储在数据库中的数据,而业务逻辑应该在这些类之外(在一些帮助服务中)。
    • 我的意思是,那些实体类也应该管理模板方法,比如“getLongDescription”?在那种情况下,我无法在实体类中使用翻译服务......我仍然有点困惑。还是谢谢!
    • 好吧,我不太确定你想做什么,但基本上,实体只是在数据存储(可能是数据库或任何其他来源)之间映射一些数据的一种方式,并且您的应用程序逻辑。在大多数情况下,它们只是带有一堆字段、getter 和 setter 的简单类。它们还可能包含一些基本逻辑,但不包含您的业务逻辑、模板或验证(有服务 -TWIG、验证器 - 可以做到这一点)。
    • 你应该做的是只保留实体中的数据,使用控制器获取所需的实体并将它们传递给 TWIG 模板,在那里你可以用任何给定的格式(html、csv、 json, xml...) 和翻译(使用模板上的翻译器组件)。如果你想翻译实体数据,你可以在你的实体上创建不同的字段,比如'en_description'、'fr_description'、'es_description',并创建一个像'getDescription(Locale)'、'getLongDescription(Locale)'这样的方法,真的取决于你的设计和你想要做什么。
    猜你喜欢
    • 2012-02-09
    • 2013-10-09
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多