9

我有一个项目,其中 DB 隐藏在 Web 服务(其中很多)后面。简而言之 - 直接访问数据库是不可能的。

我使用 Symfony2 并且每次当我有对象“存储数据”(例如:用户、汽车、房间)和服务(可从容器访问)/模型时,当涉及更重的逻辑时(例如TransactionMaker、RoomBooker、CarDestroyer 等)。

没有任何 ORM 描述的实体被选择而不是数组,因为框架提供了非常简单的方法来验证、构建表单和 IDE 智能感知。

现在它工作正常,但一些开发人员声称实体必须始终反映数据库中的表。真的吗?

4

1 回答 1

10

实体仅在配置为这样做时才映射到数据库表,从书中读取:

该类——通常称为“实体”,意思是保存数据的基本类——很简单,有助于满足应用程序中需要产品的业务需求。http://symfony.com/doc/current/book/doctrine.html#creating-an-entity-class

以比使用简单数组更正式的方式对数据建模是一种很好的做法,这就是它们存在的原因。

也许它们最常用于将数据映射到数据库,但这不是必需的。它们实现了作为数据容器的目的,以一种有意义的方式对应用程序的信息进行建模。(即在用户实体中对用户建模)

如果您不使用数据库来持久化您的实体,请随意使用它们来传递数据、创建表单、使用验证服务、安全性等等。创建一个服务以允许从 Symfony 应用程序访问 Web 服务上的信息也是一个好主意,这样您就可以拥有类似的东西:

$user = $this->get('some_persistance_service_you_write')->find($id,'user');
$user->setName('new value');
$err = $this->get('validator')->validate($user);
//....
$this->get('some_persistance_service_you_write')->persist($user);

当然,这是题外话,但它是一个示例,说明如何使用没有数据库访问权限的实体。

于 2013-01-22T20:46:06.517 回答