5

私は今、このプロジェクトの別のプログラマーとの議論に巻き込まれているようです。彼は、ビューにはメリットがないと考えています。彼は、PHP が次のようなシステムを提案しています。

$draw = new Draw;
$nav = $draw->wideHeaderBox().
$draw->left().
    $draw->image().
        Image::get($image,60,array('id'=>'header_image')).
    $draw->imageEnd().
$draw->leftEnd().
$draw->left(10).
    '<div id="header_text">'.
        self::defaultSectionText().
    '</div>'.
$draw->leftEnd().

など(これはコントローラーにあります)。これに対する彼の議論は、実際にはある程度理にかなっています。彼は、再設計があれば、HTML を 1 か所で変更するだけで、どこでも自動的に変更されると主張しています。しかし、何らかの理由で、この方法はまだ私を間違った方向にこすっています。この方法について意見を述べるメリットはありますか? つまり、HTML を手で再入力する必要がないということです。

4

5 に答える 5

5

HTML の時間節約ツールは便利ですが、直感的で理解しやすい場合にのみ役立ちます。をインスタンス化しなければならないというのは、new Drawあまり自然に聞こえません。さらに、システムをよく知っている人だけが意味を持ちますwideHeaderBox。そして、あなたの同僚のミューズのように、再設計leftがあった場合はどうなりますか? wideHeaderBoxが非常に狭くなった場合はどうなりますか? PHP メソッドによって生成されたマークアップ (およびおそらくスタイル) を変更しますが、コードを呼び出すために非常に不正確なメソッド名を残しますか?

HTML生成を使用する必要がある場合は、ビューファイルに散在させ使用する必要があり、次のような本当に必要/有用な場所で使用する必要があります。

HTML::link("Wikipedia", "http://en.wikipedia.org");
HTML::bulleted_list(array(
    HTML::list_item("Dogs"),
    HTML::list_item("Cats"),
    HTML::list_item("Armadillos")
));

上記の例のメソッド名は、システムに詳しくない人にとっては意味のあるものです。また、めったにアクセスしないファイルに戻って、いったい何をしていたのか疑問に思うときに、それらは皆さんにとってより意味のあるものになります。

于 2008-09-01T11:23:44.920 に答える
1

私はいつも、html を直接操作する方がはるかに簡単だと思っています。処理する抽象レイヤーが 1 つ少なくなり (html -> 実際の Web ページ / PHP 関数 -> html -> 実際の Web ページ)、HTML で作業するだけです。

この場合、「1か所だけ変更する必要がある」ということはうまくいかないと本当に思います。これは、関数の出力を変更したい場合が非常に多いためですが、1 か所だけです。確かに引数を使用できますが、すぐにいくつかの関数が十数個の引数を持つことになります。うん。

テンプレート言語/システムでは、多くの場合、サブテンプレートを含めることができることに注意してください。これにより、再利用可能な html ブロッ​​クをいくつか持つことができます。

肝心なのは、私があなたの会社で働き始めたばかりで、そのようなコードをいたるところで見たとしたら、私の最初の考えは「くそっ!」ということです。もう一度新しい仕事が必要です。

于 2008-09-02T01:10:55.773 に答える
1

彼が使用する引数は、ビューを持つ必要がある引数です。どちらの場合も、1 か所でのみ変更されます。ただし、彼のバージョンでは、ビュー マークアップとビジネス コードを混在させています。

テンプレート化されたデザインを使用することをお勧めします。PHP ですべてのビジネス ロジックを実行し、ページに必要なすべての変数を設定します。次に、ページのマークアップでそれらの変数を参照するだけです (そして、ビジネス ロジックは一切処理しません)。

smartyを見たことがありますか?http://smarty.php.net

于 2008-09-01T10:58:36.523 に答える
1

私は過去にそのようなことをしたことがありますが、それは時間の無駄でした. たとえば、基本的に、HTML ですでに作成できるすべてのラッパーを作成する必要があり、いくつかのことを忘れてしまいます。レイアウトで何かを変更する必要がある場合、「忘れてしまった..今度は別のメソッドをコーディングするか、別のパラメーターを追加する必要がある」と思うでしょう。

最終的に、HTML を生成する関数/クラスの膨大なコレクションができあがりますが、その使用法は数か月後には誰も知らないか覚えていません。新しい開発者は、何かを変更する前にそれを学ばなければならないため、このシステムを使用することであなたを呪うでしょう. 対照的に、抽象 HTML 描画クラスよりも HTML を知っている人の方がおそらく多いでしょう...そして、純粋な HTML に手を染めなければならないこともあります!

于 2008-09-01T11:05:10.440 に答える
1

正直に言うと、かなり冗長で理解しにくいように見えます。コードの一部は、非常に多くのレイアウト情報であるように見えます。

私たちは常に、可能な限り出力からロジックを分離しようとします。ただし、多くの場合、ビューとデータは非常に緊密にリンクされており、両方の部分が他方をどのようにすべきかを指示しています (たとえば、単純な e コマース サイトでは、各製品の横に在庫レベルを表示することを決定する場合があります)。 、これには明らかにビューを変更してこれに適切なhtmlを追加し、ビジネスロジックを行って株式の価値を把握する必要があります)。

これを行うために 2 つのファイルを維持するのが面倒な場合は、「データの収集」部分と「ビューの表示」部分に分割してみてください。管理する必要のあるファイルの数を増やすことなく、ほとんどの利点を得ることができます。 .

于 2008-09-01T11:13:49.530 に答える