PHP中的验证设计模式';s Laravel(Ruby on Rails)

PHP中的验证设计模式';s Laravel(Ruby on Rails),php,ruby-on-rails,laravel,design-patterns,Php,Ruby On Rails,Laravel,Design Patterns,我在从我的中大型项目中选择验证设计模式时遇到了严重的问题。我知道有两个很不错,但我不知道该选哪一个: 1.模型内部验证。 在L4.2中有一个包名为:Ardent。他没有什么好办法。其中之一是在保存事件之前启用了验证句柄。这对小型项目尤其有用。缺点是验证逻辑直接保存在模型中 2.服务验证, 我知道的另一个好做法是通过服务验证。这意味着我们为负责写操作(主要也是一些读取操作)的模型创建服务。我们可以在任何保存(创建、更新等)之前在此管理验证。在我看来,这比我的第一个建议要好。缺点是-我们必须记住通过

我在从我的中大型项目中选择验证设计模式时遇到了严重的问题。我知道有两个很不错,但我不知道该选哪一个:

1.模型内部验证。 在L4.2中有一个包名为:Ardent。他没有什么好办法。其中之一是在保存事件之前启用了验证句柄。这对小型项目尤其有用。缺点是验证逻辑直接保存在模型中

2.服务验证, 我知道的另一个好做法是通过服务验证。这意味着我们为负责写操作(主要也是一些读取操作)的模型创建服务。我们可以在任何保存(创建、更新等)之前在此管理验证。在我看来,这比我的第一个建议要好。缺点是-我们必须记住通过服务输入所有模型的输入数据。否则,我们将无法直接从服务获取验证和其他内容


这两个是哪一个?或者某人有更好、更聪明的东西?:)

我的意见是,你说你有一个大中型项目,这就是为什么我认为你需要:

  • 数据存储库-仅用于存储和检索原始数据。这里的逻辑尽可能少
  • 商业模式-所有的智能都在这里,包括验证
  • 服务(即客户端访问)-非常薄的一部分,仅足以提供与客户端的连接

随着项目的发展,这将帮助您组织代码,以防您需要各种存储库(可能是因为您的项目规模)。

我的意见是,您说您有一个中型项目,这就是为什么我认为您需要:

  • 数据存储库-仅用于存储和检索原始数据。这里的逻辑尽可能少
  • 商业模式-所有的智能都在这里,包括验证
  • 服务(即客户端访问)-非常薄的一部分,仅足以提供与客户端的连接

随着项目的发展,这将帮助您组织代码,并在您需要各种存储库的情况下(可能是因为您的项目规模)。

我个人支持#2,原因如下:

  • 模特们往往会变得臃肿。使用设计良好的模块有助于重构和代码组织/管理
  • 在大多数情况下,独立的验证模块更易于测试和调试
  • 模型中的验证将抽象从模型泄漏到视图,反之亦然
  • 减少对国家的管理。对于Rails,通过将验证错误存储在特定的
    errors
    对象中来处理验证。该操作相当不透明,容易混淆和出错,尤其是在更新嵌套记录时

就个人而言,我支持#2,原因如下:

  • 模特们往往会变得臃肿。使用设计良好的模块有助于重构和代码组织/管理
  • 在大多数情况下,独立的验证模块更易于测试和调试
  • 模型中的验证将抽象从模型泄漏到视图,反之亦然
  • 减少对国家的管理。对于Rails,通过将验证错误存储在特定的
    errors
    对象中来处理验证。该操作相当不透明,容易混淆和出错,尤其是在更新嵌套记录时