手続き型 PHP で「コメント」および「返信」システムの実用的な実装を作成しました。OOP を学びたいので、古いコードを SOLID の原則に従って OOP に変換します。私が読んでいる本の中で、著者は、クラスは「1つの」ことを1つだけ行うべきだと言っています。
私のコメントと返信システムでは、同じクラス名で「id」が異なるいくつかの「div」要素を動的に生成します。私が生成しているものの例は、ここで見ることができます。
コードをより簡単に保守できるように、コードを関数に分割したいと考えていますが、これを行う最善の方法を理解するのに苦労しています。たとえば、ネストされた div がいくつかあります。
<div class="content">
<div class="photoContainer" id="1"> <img src="http://placekitten.com/200/200" /> </div>
<div class="commentReplyContainer" id="1">
<div class="commentBox" id="1">
<form method="post">
<textarea name="comment"></textarea>
<input type="submit" />
</form>
</div>
<div class="commentEven">Hello I am a comment!</div>
</div>
</div>
<div class="content">
<div class="photoContainer" id="2"> <img src="http://placekitten.com/200/300" /> </div>
<div class="commentReplyContainer" id="2">
<div class="commentBox" id="2">
<form method="post">
<textarea name="comment"></textarea>
<input type="submit" />
</form>
</div>
<div class="commentEven">Hello I am another comment!</div>
</div>
</div>
divdivs
のようにすぐに閉じられるものもあります。photoContainer
また、commentBox
フォームを内部に追加した直後にdivが閉じられます。私が目にする問題はcontent
、すべてのコンテンツがその中に追加された後に div が閉じられ、commentReplyContainer
. したがって、SOLID の原則に従ってこれを OOP コードに変換する場合、div を生成するクラス、content
div を生成する別のクラスなどを用意する必要がありphotoContainer
ます。そのメソッドを使用する場合、content
div を生成するが閉じないクラスを作成しphotoContainer
、予想されるコンテンツで div を生成して閉じ、最後に呼び出されてcontent
div を閉じるクラスを作成する必要があります。これが、div を希望どおりにネストできる唯一の方法であるため、正しいですか?
<?php
class CreateCommentSystem {
public function generateContentDiv(){
$content = <<<EOF
<div class="content" style="background-color: #302058; width: 100px; height: 200px">
EOF;
echo $content;
}
public function generatePhotoContainer(){
$photoContainer = <<<EOF
<div class="photoContainer" style="background-color: #df5320; width: 40px; height: 20px"> </div>
EOF;
echo $photoContainer;
}
public function closeContentDiv() {
$closeContentDiv = <<<EOF
</div>
EOF;
echo $closeContentDiv;
}
}
?>
次に、次のように実行します
$divs = new CreateCommentSystem;
$divs->generateContentDiv();
$divs->generatePhotoContainer();
$divs->closeContentDiv();
私は正しい道を進んでいますか、それとも私の理解は完全に間違っていますか? たぶん、誰かが指摘できることに気付いていない、もっと良い方法があるかもしれません。私が求めていることを理解していただけるよう、十分に説明したことを願っています。