我在决定班级责任时遇到了问题。
我有 3 个 html 表单:
- 对于每个表单,都有一个 html 模板,其中包含一些文本和要包含的表单的标记
- 每个表单都需要验证,如果有错误,则需要重新显示 (1) 中的模板和表单,以及一些错误消息。只有一些字段在不同的表单中是通用的。
- 如果没有错误,则需要邮寄结果消息。每个表单都有一个结果邮件模板。
我发现很难为这个问题决定一个好的班级计划。一种可能性是按功能分离类
- CheckFormData:检查表单数据
- DisplayForm:显示有/无错误的表单(或者也分开这个?)
- 电子邮件表格:电子邮件表格。
我对此不确定。关于一种特定形式的领域的知识分散在各个类别中。
有一些工作流程。也许我还应该有一个工作流类:
class FormSubmitWorkFlow
{
function start()
{
$this->displayForm->render();
}
function processFormData($data)
{
$this->checkForm->setData($data);
if (!$this->checkForm->isValid()) {
$errors = $this->checkForm->getErrors();
$this->displayForm->setData($data)->setErrors($errors)->render();
} else {
$this->emailForm->setData($data)->email();
}
}
function setDisplayForm(DisplayForm $df)
{
$this->displayForm = $df;
}
function setCheckForm(CheckForm $cf)
{
$this->checkForm = $cf;
}
function setEmailForm(CheckForm $ef)
{
$this->emailForm = $ef;
}
}
对于每种表单类型(请记住,其中有 3 个),我需要一个
CheckForm
,EmailForm
和DisplayForm
班级。
3*3 = 9 个类 + 3 个基类 = 12 个类。
此外,您想将正确的 CheckForm-subclass 和 EmailForm-subclass 注入工作流程,它们都需要具有相同的表单类型。也许我们需要为此创建一个 FormWorkFlowFactory。这样一共有13 个类。
现在我觉得我做错了可怕的事情。如果我有FormSubmitWorkFlow
一个模板方法类,我可以创建 3 个子类,但每个子类会混合不同的职责。
你如何改进这一点,你能激发你的答案,即什么方法引导你得到答案?
编辑:虽然当前唯一的答案很有用,但很高兴看到同意它的人的一些投票,或者我想听到社区提供更好的解决方案。我是唯一一个赞成这个答案的人。这个问题可以使用更多的输入,所以请随时提供:-)