循环依赖,好还是坏?

时间:2014-03-14 14:15:33

标签: php oop design-patterns

出于教育和实际目的,我制作了某种个人框架,并遇到了一个我想分享的设计问题。

我有一个Component命名空间,它包含各种类的组件(即可重用ViewModels的位)。其中一个是Component\Form,一个用于从模型构建表单模板的生成器类。一段时间后,我意识到需要一些Validation服务类,这将执行非模型特定的验证,比如检查验证码。

问题是,我的默认表单验证会累积错误消息并在一个地方显示它们。因此,要实现此目的,我的Validator类需要有权访问FormForm类通过setter注入添加Validator类。

因此,这会产生循环依赖。从一方来说,FormValidator类的依赖性(虽然是可选的),从另一方面来说,我必须在每个{{1}注入一个Form类}} 我加。我想知道,如果这种方法从OOP设计的角度来看是好的,如果没有,那么可能会出现什么问题,我怎么可能解决它。

对不起,我没有提供任何相关代码,我认为需要太多空间才能阅读,但如果有必要,我会很乐意发布任何内容以澄清具体时刻。问题

2 个答案:

答案 0 :(得分:2)

我认为验证器不应该依赖于表单,因为它不应该显示错误。表单可以要求验证者根据某些规则检查一些原始输入。如果验证失败,验证程序可能会返回错误代码或消息,表单可以根据该错误代码或消息显示错误。显示该错误不是验证器的工作。

答案 1 :(得分:0)

我会说你错过了某种mvc。我会保证验证器依赖于表单,因为它必须访问所有数据并且传递原始值将是繁琐和复杂的(比较两个密码,验证码,检查一个字段是否长于5,只有当另一个字段短于3)。但我不认为表格取决于验证者。因为表格不知道是否需要验证。有时您需要触发验证器A和B,有时需要触发B和C.并且表单并不具备做出该决定的知识。这是控制人员的工作。我会添加一些ValidationGroup / ValidatorHandler等,它引用一个表单和(一组)验证器。然后控制器将触发正确的验证器组