クラスの責任を決めるのに問題があります。
私は3つのhtmlフォームを持っています:
- フォームごとに、含まれるフォームのテキストとマーカーを含むhtmlテンプレートがあります。
- エラーが発生した場合は、各フォームを検証する必要があります。テンプレートと(1)のフォームを、いくつかのエラーメッセージとともに再表示する必要があります。一部のフィールドのみが、さまざまなフォームに共通しています。
- エラーがない場合は、結果メッセージをメールで送信する必要があります。フォームごとに結果メールテンプレートがあります。
この問題に適したクラススキームを決定するのは非常に難しいと思います。1つの可能性は、機能によってクラスを分離することです
- CheckFormData:フォームデータのチェック
- DisplayForm:エラーの有無にかかわらずフォームを表示します(またはこれも分離しますか?)
- EmailForm:emailform。
これについてはよくわかりません。ある特定の形式の分野に関する知識は、さまざまなクラスに分散しています。
いくつかのワークフローがあります。多分私はワークフロークラスも持っているべきです:
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つのサブクラスを作成することもできますが、各サブクラスは異なる責任を混合します。
これをどのように改善できますか。また、答えをやる気にさせることができますか。つまり、どの方法で答えを導き出すことができますか。
編集:現在の唯一の答えは有用ですが、それに同意する人々からの投票を見るのはいいことです。あるいは、コミュニティからより良い解決策を聞きたいです。この答えに賛成したのは私だけです。この質問はより多くの入力を使用する可能性があるので、遠慮なく提供してください:-)