php – Symfony 2中的DDD – 如何与Validator服务交互?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – Symfony 2中的DDD – 如何与Validator服务交互?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
前段时间我开始玩DDD了.目前,我所有的课程都是POPO.几乎所有内容都是完整的,但我想在持久性之前验证我的实体.

我已经知道在哪里放置验证(命令/用例对象),但理想情况下我想在应用程序/基础架构层中使用验证器服务.对我来说,验证应该是域层的一部分,但如果我把它放在那里,我会有很多重复.

你遇到过这样的问题吗?那有什么合理的解决方案吗?谢谢大家!

解决方法

不要混淆验证类型,我知道它混淆并且不容易分离概念并以正确的方式执行,但不要放弃.

有业务验证应该属于您的域,并且不使用任何外部组件/框架来验证(因为您的域应该是最干净和最自然的),以及应用程序验证,它应检查URL是否有效,如果用户已通过身份验证,您可以使用Symphony或任何您想要的框架/插件.

您的域名应该是最自然和最干净的,您甚至可以将其展示给业务分析师并讨论事情.您放入域中的验证应遵循此概念,这意味着业务分析师甚至可以指向您,如果验证是正确的,并建议更改,如果是这种情况.实际上,在我工作的地方,有时甚至是关键用户都会看到域名(@L_512_6@和图表)并指出事情.

现在假设您确实要验证URL是否在您的域内有效,并且不遵循始终有效方法(建议使用),您可以假设应用程序层已经为您验证了URL.相反,您确实希望在域中有一行代码,明确地尝试验证URL.如果这是一个要求(我反对,但我正在给它一个可能的解决方案),我会这样做:

// This would belong to your domain...
interface IValidator
{
    public function IsValidURL($url);
}

class Foo
{
    public function SaveURL($url,$validator)
    {
        if (!$validator instanceof IValidator)
            throw new Exception("Invalid validator PRoviden to Foo!");
        if (!$validator->IsValidURL($url))
            throw new Exception("The URL $url is not valid!");
        // Do LOGic
    }
}

// ...and this to your Application Layer
class SymphonyValidator implements IValidator
{
    public function IsValidURL($url)
    {
        // use Symphony validator or any other framework/plugin
    }
}


VAR foo = new Foo();
var validator = new SymphonyValidator();
foo->SaveURL("invalidUrl",validator);

但请记住,这只是在您的域中调用验证方法的一种解决方法,注入第三方组件来完成艰苦的工作.我个人反对一点,但如果有人问你“你在哪里保证URL有效?我在你的域名中找不到它”你可以这样做(我认为URL验证不适合商业,但是对于infra / app图层)

实际上,域仍然不能保证URL是有效的,因为验证仍由应用层提供(如果Validator类总是返回true会怎样?),这就是我反对这一点的原因.无论如何,如果您需要此功能,至少如果您从symphony更改为任何其他类型的验证器,您的域将保持不变,并且您的域不会耦合到特定的第三方库,并且任何应用程序都可以提供自己的Validator(因为您的域名)可以被web应用程序,移动,桌面,外部API调用等应用程序使用.

脚本宝典总结

以上是脚本宝典为你收集整理的php – Symfony 2中的DDD – 如何与Validator服务交互?全部内容,希望文章能够帮你解决php – Symfony 2中的DDD – 如何与Validator服务交互?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。