【问题标题】:Domain driven design implementation using Symfony and Doctrine使用 Symfony 和 Doctrine 的领域驱动设计实现
【发布时间】:2016-04-26 21:24:35
【问题描述】:

我是 symfony 的新手,我有一个关于在 Symfony 中使用 Doctrine 实现干净的领域驱动设计的问题

在 Zend 框架一中,我的结构如下

模型文件夹

用户(数据库中的文件夹和表)

Row.php(User 文件夹中的类名 Model_User_Row)

Rowset.php(User 文件夹中的类名 Model_User_Rowset)

Table.php(User 文件夹中的类名 Model_User_Table)

Repository.php(User 文件夹中的类名 Model_User_Repository)

Service.php(User 文件夹中的类名 Model_User_Service)

我希望使用 Doctrine 在 Symfony 中创建类似的结构(我知道 Doctrine 有它自己的方式)

我的问题是教义工具在 AppBundle 中创建一个实体文件夹和存储库文件夹并将所有内容放在这些文件夹中。

我的愿望是在 Symfony 中创建

AppBundle

模型(文件夹)

用户(文件夹)

User.php //用户文件夹中的实体

UserRepository.php // 用户文件夹中的存储库

我尝试更改以下代码

orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    naming_strategy: doctrine.orm.naming_strategy.underscore
    auto_mapping: false
    mappings:
      person:
        type:      annotation
        dir:       "%kernel.root_dir%/../src/AppBundle/Model/Person"
        prefix:    AppBundle\Model\Person
        alias:     AppBundle
        is_bundle: false

然后创建新的实体,但它没有工作

请指教

【问题讨论】:

  • 我的建议是停止与框架作斗争,并以默认方式进行,至少在最初是这样。熟悉框架后,您可能想要更改,或者它的工作方式可能更有意义。
  • 我可以接受 Symfony 的标准方式。我想知道在哪里存储我的服务类。我的服务类将与存储库对话。我不想直接从控制器使用存储库,因为这会在单元测试(创建模拟对象)中产生问题。大多数 symfony 代码示例直接与控制器中的存储库对话。

标签: symfony dns doctrine


【解决方案1】:

我和你有同样的顾虑,通常我会采用这种结构

Entity
  -- Model (here goes User.php)
  -- Repository (here goes UserRepository.php)
Services 
  -- Domain (my 100% business Logic, 100% covered by tests with mocks)
  -- FormBuilder (where I hydrate my formsType by their DTO etc..)
  -- ..etc..

因为我使用Entity作为顶层目录,所以你唯一需要的配置就是将Entities/Repositories移动到它们的目录下,并调整注解中的repositoryClass

【讨论】:

  • 你在github上有一些例子吗?
  • 它不在github上,但我回家后看看能不能在上面放一个基本的包结构
  • 我知道距离您的帖子@goto 已经过去了一段时间,但是如果您有对示例代码的参考,这将非常有帮助。
猜你喜欢
  • 2016-09-29
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 2015-08-04
相关资源
最近更新 更多