Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉威尔建筑-我把这门课放在哪里?_Php_Laravel_Eloquent_Directory Structure_Laravel 5.1 - Fatal编程技术网

Php 拉威尔建筑-我把这门课放在哪里?

Php 拉威尔建筑-我把这门课放在哪里?,php,laravel,eloquent,directory-structure,laravel-5.1,Php,Laravel,Eloquent,Directory Structure,Laravel 5.1,让我来设定场景: 我有一个“Item”类,它有不同的食物项目(如胡萝卜、苹果等)。 这将链接到“items”表。这里一切都好 在我从中迁移的旧框架中,我还有一个“Complete Protein”类,在构造函数中需要一个Item对象。这个“CompleteProtein”对象将能够执行复杂的查询和方法,并包含关于什么是“完整蛋白质”的一般信息 这件衣服在拉威尔哪里合适?它似乎不是一个有说服力的模型,因为它与数据库中的任何表都没有直接关系,但它确实执行数据库查询。它确实有依赖项注入(Item),以

让我来设定场景:

我有一个“Item”类,它有不同的食物项目(如胡萝卜、苹果等)。 这将链接到“items”表。这里一切都好

在我从中迁移的旧框架中,我还有一个“Complete Protein”类,在构造函数中需要一个Item对象。这个“CompleteProtein”对象将能够执行复杂的查询和方法,并包含关于什么是“完整蛋白质”的一般信息

这件衣服在拉威尔哪里合适?它似乎不是一个有说服力的模型,因为它与数据库中的任何表都没有直接关系,但它确实执行数据库查询。它确实有依赖项注入(Item),以及类中的复杂方法和常量


我该不该把这些放进“Item”类?我觉得那会很乱。

这是服务类的。不管您选择什么样的框架,我都会这样命名


有些人更喜欢名为“服务”的文件夹(和名称空间),其他人更喜欢使用静音域驱动的方法(可能是一个名为“蛋白质”的文件夹来保存它?),但这取决于您。

它是一个服务类。不管您选择什么样的框架,我都会这样命名


有些人喜欢一个名为“服务”的文件夹(和名称空间),其他人喜欢使用一种无声的域驱动方法(也许是一个名为“蛋白质”的文件夹来保存它?),但这取决于你。

你真的不需要有说服力的模型。我甚至不使用雄辩(但绝对喜欢拉威尔的其余部分)。我甚至不使用ORM(甚至不使用Doctrine2)。但是,如果你仍然喜欢使用它,认为它是你的基础设施的一部分,而不是你的业务领域的一部分。在like
findByEmail()
save()
中进行有说服力的调用。许多人将存储库作为一个接口,因此他们可以交换服务提供者中的实现以进行测试(在这里,您使用内存中的存储库实现,可能只是将内容存储在阵列中)。同样,我不会从这些存储库返回雄辩的模型,而是返回水合域对象

您所描述的是您的业务领域中的一个实体。这可能是您的业务域中的域服务,但听起来更像一个实体(在DDD中)。我会将该实体放在类中的如下位置:

app\
  Domain\
     CompleteProteins\
         CompleteProtein.php
         CompleteProteinRepository.php
     Items\
         Item.php
         ItemRepository.php
     (maybe some domain service classes here as well)
  Http\
  Queries\
  Helpers\
  Services\ (<-- maybe application level services here)
  etc...
这是编写和封装规则的好方法。对于新开发人员来说,很容易看到构成业务的所有“东西”。如果您的开发人员希望进行一些持久化,那么您可以指示他/她“转到存储库”。这里和那里没有一次性的查询!没有零星的ORM调用(假装您的关系数据库是OO)!你也可以在你的域对象上有一个方法,比如
markAsDeleted
(或者更好的方法是
markAsErroneous
),这样当你用
->persist
将它发送到存储库时,存储库可以在你的对象上查找一个标志,并知道如何删除它。这允许您向删除添加逻辑。研究使用PHP反射类为存储库提供对水合物/脱水域对象访问的技术。Zend框架有一个我喜欢使用的很好的基础框架。存储库也适用于大规模收集,如计算


(注意:我在上面列出了一个名为
querys
的文件夹,供您为阅读查询情况创建类。在许多情况下,如果您只想在整个应用程序的屏幕上显示信息,则无需从存储库中获取完整的实体。谷歌“命令查询分离”。)

你不需要有说服力的模型。我甚至不使用雄辩(但绝对喜欢拉威尔的其余部分)。我甚至不使用ORM(甚至不使用Doctrine2)。但是,如果你仍然喜欢使用它,认为它是你的基础设施的一部分,而不是你的业务领域的一部分。在like
findByEmail()
save()
中进行有说服力的调用。许多人将存储库作为一个接口,因此他们可以交换服务提供者中的实现以进行测试(在这里,您使用内存中的存储库实现,可能只是将内容存储在阵列中)。同样,我不会从这些存储库返回雄辩的模型,而是返回水合域对象

您所描述的是您的业务领域中的一个实体。这可能是您的业务域中的域服务,但听起来更像一个实体(在DDD中)。我会将该实体放在类中的如下位置:

app\
  Domain\
     CompleteProteins\
         CompleteProtein.php
         CompleteProteinRepository.php
     Items\
         Item.php
         ItemRepository.php
     (maybe some domain service classes here as well)
  Http\
  Queries\
  Helpers\
  Services\ (<-- maybe application level services here)
  etc...
这是编写和封装规则的好方法。对于新开发人员来说,很容易看到构成业务的所有“东西”。如果您的开发人员希望进行一些持久化,那么您可以指示他/她“转到存储库”。这里和那里没有一次性的查询!没有零星的ORM调用(假装您的关系数据库是OO)!你也可以在你的域对象上有一个方法,比如
markAsDeleted
(或者更好的方法是
markAsErroneous
),这样当你用
->persist
将它发送到存储库时,存储库可以在你的对象上查找一个标志,并知道如何删除它。这允许您向删除添加逻辑。研究使用PHP反射类为存储库提供对水合物/脱水域对象访问的技术。Zend框架有一个我喜欢使用的很好的基础框架。存储库也适用于大规模收集,如计算

(注意:我在上面列出了一个名为
querys
的文件夹,供您为阅读查询情况创建类。在许多情况下,如果您只想在整个应用程序的屏幕上显示信息,则无需从存储库中获取完整的实体。谷歌“命令查询分离”。

听起来像是,所以我建议在
模型中
,或者创建一个
文件夹听起来像一个,所以我建议在
模型中
,或者cr中