我正在尝试实现一个简单的验证器类系统,它尊重 SOLID 原则并用于单元测试目的。
假设我有一些简单的验证器(强制、整数、大于...),现在我想实现一个更复杂的验证器,它调用几个简单的验证器(例如使用一些验证器的表单验证器)
这非常受 Zend 和其他框架的启发。
问题是,这里如何应用或违反 SOLID 原则,以及应该如何对这个模型进行单元测试?
我想我可以轻松地对每个简单的验证器进行单元测试,但不能对复杂的 FormValidator 进行单元测试
interface ICheckable
{
public function check($data);
}
class MandatoryValidator implements ICheckable
{
private $_property;
public function __construct($property)
{
$this->_property = $property;
}
public function check($data)
{
return isset($data[$property]);
}
}
class IntegerValidator implements ICheckable
{
...
}
class FormValidator implements ICheckable
{
public function check($data)
{
$mandatoryValidator = new MandatoryValidator(array('LOGIN'));
if ($mandatoryValidator->check($data) == false)
{
return false;
}
$integerValidator = new IntegerValidator();
if ($integerValidator->check($data['AMOUNT']) == false)
{
return false;
}
...
return true;
}
}