Zend Frameworkがそれほど複雑なのはなぜですか?


42

私はWeb開発者であり、PHPでいくつかのWebアプリケーションを開発した経験があります。私は自分で製品を開発するアイデアを持っていますが、MVCのアイデアと、アプリケーションを簡単に管理および変更できる方法が本当に好きなので、MVCベースのフレームワークを使用することにしました。

Zend Frameworkを選択しましたが、新しいプログラミング言語を学ぶよりも難しいようです。小規模なアプリケーションを実行する場合でも、一度に多くのことが行われます。

同様に、ルーティングの概念はコアプログラマにとっては新しいため、非常に複雑です。ここにいる人たちは、私が尋ねているような数千のそのような質問を読んでいることを知っていますが、Zend Frameworkを一晩で学ぶつもりはありません。必要なだけの時間を与えたいと思っていますが、今までは意味がありません。Zendライブラリには数千のクラスがありますが、特定のクラスの使用場所と使用方法をnoobはどのように知るのでしょうか?Zend Frameworkのブートストラップとそのマッピングを理解することはまだ非常に難しいと感じています。私はマニュアルを読み、それに従い、物事は動き始めますが、実際にそれらが実際にどのように起こっているのか正確にはわかりません。

また、モデル、ビュー、コントローラーがどのように連携するか、Zend Frameworkでアプリケーションを計画する方法については、まだ何もわかりません。コアphpに関しては、どうすればよいか、コードで簡単に翻訳するよりも、アイデアが頭にありますが、Zend Frameworkでは、アイデアの翻訳方法がわかりません。


10
MVC を初めて使用する場合は、本格的なものを使用するに、自分でMVCの足場を実装してください。学習には向いていません。
ツリーコーダー

2
@greengitそれは私がやったことです!
カイルホジソン

Zend Frameworkは難しくありません。ドキュメントの質が悪いため、学習に少し時間がかかりますが、非常に強力なフレームワークであることを確認できます。ZF2で大規模なエンタープライズソフトウェアを構築しましたが、ZFでは構成の柔軟性が非常に優れています。
-albanx

回答:


38

Zend Frameworkは難しいです。エントリーレベルのフレームワークとして構築されたものではなく、関連する概念の知識が想定されています1。そうは言っても、Zend Framework 2.0の最初の要件は、それを少し簡単にすることです。

学習曲線を緩和する

2009年後半に、フレームワークユーザーを対象に調査を実施し、ユーザーが使用するもの、使用する環境、ニーズを特定しました。一番の問題は、何も禁止せず、フレームワークを習得するのが難しいことでした。これらの問題の一部は次のとおりです。

  • フレームワークの「最初の1時間」の難しさ。
  • クイックスタート後の「次のステップ」に関する不確実性。
  • ソースコード自体に一貫性のないAPI。1つのコンポーネントで「プラグイン」、別の「ヘルパー」、さらに別の「フィルター」を使用できます。
  • 拡張ポイントがどこに存在するか、およびそれらのためにプログラムする方法についての不確実性。
  • Zend FrameworkをMVCスタックとしてのみ使用できるか、個々のコンポーネントとして使用できるかについての混乱。

だからあなただけではなく、誰にとっても難しい-wikiページ全体を読んでください。しかし、上記の要件が満たされたとしても、それはまだエントリレベルのフレームワークにはなりません。つまり、学習すべきフレームワークではなく、実際に関連する概念を理解したときに使用すべきフレームワークです。

まだ学習しているので、独自のMVCアーキテクチャを構築する方がはるかに価値があります。Rasmus Lerdorfの悪名高い2フレームワークのないPHP MVCフレームワーク」のブログ投稿では、手続き型PHPを使用して、フレームワークや他のサードパーティライブラリを使用しないMVCの非常にシンプルでクリーンな例を紹介しています。

しかし、フレームワークで本当に学びたい場合は、本格的なフレームワークではなく、マイクロフレームワークを検討する必要があります。Slimは非常に小さく、きれいで、徹底的にテストされたコードベースを持ち、学習に理想的です。他のマイクロフレームワークをいじったことはありません。独自の調査を行い、どちらがより良いかを判断する必要があります。

また、ルーティングの簡単で汚い紹介についてはこの質問に対する私の回答を参照しください。把握するのはそれほど難しい概念ではありませんが、Zend Frameworkは実際よりもはるかに見た目をよくしています。

1私がZFについて読んだ最高の説明は、それがフレームワークを構築するフレームワークであり、アプリケーションフレームワークではないということです。それは生の力であり、機能の極端なリストは中小規模のウェブサイトには適していません。残念ながら、私がそれを読んだ場所を本当に見つけることはできません。

2ブログ投稿の上部にある免責事項をお読みください。


@Karpieのコメントに触発された更新:

フレームワークは難しくないはずです。フレームワークの全体的なポイントは、物事を簡単にすることです。関係する概念をしっかりと把握していても、ZFが適切ではない可能性があります。

フレームワークの選択には、多くの主観的な要素が関係します。他のすべてのフレームワークに絶対に必要な機能がない場合を除き、自分で書くことができない場合は、ZFを避け、より自然に感じるフレームワークを使用する必要があります。

概念を知っていれば、フレームワークが邪魔になってはいけません。


3
概念の知識があったとしても、それを理解するのは非常に難しく、正直なところ、努力する価値があるとは思いません。ドキュメントはしばしば間違っており、Web上の例は通常古くなっています。IRCサポートチャネルは一般的に死んでいます。
sevenseacat

@Karpie正直言ってそんなに難しいとは思いません。しかし、それは一種の慣用的であるため、一部の開発者には他の開発者よりも優れています。たとえば、CodeIgniterよりも理解しやすいと感じていますが、それは私の個人的なプロセスによるものです。ドキュメントよりもコードを読む方が好きで、CIのコードは非常に面白く、頭が閉じます。しかし、ほとんどの開発者にとって、CIはZFよりも簡単に習得でき、CIのコードがくだらないことに完全に同意しているわけではありません。重要なことは、フレームワークが他に常に存在する場合、フレームワークを使用するのが難しくないと想定されることです。
ヤニス

Zend Framework 1は比較的把握しやすいと思います。しかし、あなたはZF2の背後にある考え方は、それを作ることだったと述べ容易にそれはずっとだように、私は感じて、より複雑なこれまで以上に。
買った777

ZF2のすべては非常に複雑です。Zendの「フレームワーク」をモジュール/ライブラリのコレクションとして提示してもかまいません。実際のフレームワークがありません。モデル層はないので、通常は混乱する独自のものを実装するか、何らかの統合が必要なDoctrineを使用する必要があります。いくつかの単体テストを作成するには、テストをブートストラップするためだけに、マニュアルを解読し、コードを作成(またはオンラインで検索)するためにとんでもない時間を費やす必要があります。それは健全な概念に基づいて構築されているかもしれませんが、それらの概念の解釈はひどいです。
vladko

11

Zend Frameworkの使用を開始したとき、発見性の欠如が気に入らなかったため、配列に依存するクラスが多すぎるため、定義できるキー/定義する必要があるキーを検索する必要があります。

明確なsetメソッドまたは名前付きパラメーターを持つことにはまったく問題はありません。それは、発見可能性を支援するために大いに役立つでしょう。

Yiiフレームワークは、この種のものではさらに悪化します。


3
+1 ZF / ZF2の取り込みを真剣に考慮しない私の重要な理由は、nestedい、オートコンプリート/ヒント、およびネストされた配列ベースの構成を回避する知性の回避である必要があります。それはオブジェクト指向の世界でのアレイの使い過ぎに対する私の個人的な嫌悪を侵害します。
ギャビンハウデン

1
正確に私の意見も。
ダニエル

Yii 1はそれほど難しくないと思います。たぶんそれは私のためです。:P
ユージンジョセフ

5

ZFのいくつかの問題。これにより、次の作業が煩わしくなります(初心者にとっては困難です)。

ORMは含まれません。これは最新のMVCフレームワークの非常に基本的なものであると考えられますが、ZFにはが付属してZend_Db_Tableいます。これは途方もなく低レベルです。Doctrineを使用できますが、あなたは独力で、ZFと統合されていません。

読めない、肥大化したURLルーター。たとえば、非常に単純なルーティングを定義するには、9行のコードが必要です。

$route = new Zend_Controller_Router_Route(
    'archive/:year',
    array(
        'controller' => 'archive',
        'action'     => 'show'
    ),
    array('year' => '\d+')
);
$router->addRoute('archive', $route);

これ関連する質問の量を考えると、それはほとんどの人にとって簡単ではありません。また、私はそれを助けることができず、Djangoと比較することができます。

url(r'^archive/(?P<year>\d+)/$', 'archive.show')

Zend_Aclほとんどのユースケースで複雑になります。通常、ユーザーを識別するための認証が必要です。また、一部のコントローラーへのアクセスを認証されたユーザーのみに簡単に制限するオプション。多くのユーザーの場合、それで十分です。より複雑なケースでは、ユーザーが特定のアクションを実行する権限を持っているかどうかを判断するのは、コントローラーのビジネスロジック次第です。ZFでは、認証されたユーザーのみにアクセスを簡単に制限するオプションはありません。標準的な方法は、実際のニーズがどれほど単純かに関わらず、ACLとロールシステムを使用することです。

肥大化したディレクトリとファイルのレイアウト推奨されるディレクトリ構造は次のようになります。

<project name>/
    application/
        configs/
            application.ini
        controllers/
            helpers/
        forms/
        layouts/
            filters/
            helpers/
            scripts/
        models/
        modules/
        services/
        views/
            filters/
            helpers/
            scripts/
        Bootstrap.php
    data/
        cache/
        indexes/
        locales/
        logs/
        sessions/
        uploads/
    docs/
    library/
    public/
        css/
        images/
        js/
        .htaccess
        index.php
    scripts/
        jobs/
        build/
    temp/
    tests/

4

Zend Frameworkは、一緒にフレームワークのように動作する独立したライブラリの束のようなものです。分離された「使いやすい」ものを同時に開発することは非常に困難です。「使いやすい」とは、数行のコードで複雑なことをすることを意味します。

そのため、Zendから開始することは、CakePHPなどの他のフレームワークよりも困難です。しかし、コードを汚さずにアプリケーションを簡単に拡張およびカスタマイズできます。また、Zendはコード全体で標準および設計パターンに従っているため、フレームワークのコードを読むと、何が起こっているのかを推測できます。

モデル、ビュー、およびコントローラーがどのように連携するかについての手がかりがないと言うときは、フレームワークを非難しないでください。他のフレームワークと同様にMVCを実装しますが、多くのフレームワークでは同じクラスに実装されているデータベース構造からモデルを分離しています。したがって、Zend_Db_Table、Zend_Db_Table_Row、Zend_Db_Table_Rowsetなどの多くのクラスに直面することになります。

Zend Frameworkは非常に複雑で、ZFを使用しない他のプロジェクトでそのクラスを使用できるため、Zend Frameworkはより複雑だと思うのはそのためです。


3

Zend Frameworkには、OOPおよびデザインパターンの確かな基盤が必要です。私の経験から、Zend Frameworkに簡単に慣れる経験豊富なJava-JEE-Struts-Springプログラマーしか見つかりません。平均的なPHP開発者は、Zend Frameworkの背後にある概念とアーキテクチャを消化するのが難しいと感じています。でもね Zend Frameworkは、PHPを最初に作成する会社「Zend」から来ています。敬意を払っていないとしても、多分考えが必要です!


1
Rasmus Lerdorfはphpを作成しました。zendはphpの高い支持者です。私が思い出すものから。
サルメンB。13年

そこには賛成できません。Java開発者です。ZFへの道を簡単に見つけただけでなく、他のフレームワークよりもZFを好みました。
jkushner

-2

zendは物事を複雑にするためだけのものであり、MVCは論理的には単なる詐欺であり、単純なPHPのように機能すると考えています。しかし、異なるディレクトリにあるファイルを分離するように、MVCの前で開発しています。

Zendは非常に安全で、ハッキングできないと言っている人は大馬鹿だということを覚えておいてください。Zendは、Mysqlインジェクション保護を使用しなかった場合にも簡単にハッキングできます。独自の関数を定義し、ファイルを異なるディレクトリに分けてMVCのようにファイル、コントローラ、およびその他のコアマテリアルをコントローラと呼ばれる1つのディレクトリに保存し、必要な場所に別のディレクトリにWebページを追加することをお勧めしますこれらのすべての関数ファイルを含めるには、このディレクトリがビューとして認識されます。javascriptおよびcssファイルをモデルと呼ばれる異なるディレクトリに配置します。

この世界では、多くの人が常に物事をより複雑にするために一生懸命働いていることを忘れないでください。

PHPは、本や先生から学んだ言語です。Zendは、クライアントにとって物事を複雑にするための単なるフレームワークではありません。クライアントが変更を必要とするときはいつでも、実際の開発者に戻り、それらの開発者はより多くのお金を請求します。Zendは完全に保護されています。単純なphpコーディングのような1つの間違いがWebサイトをハッキング可能にする可能性があります。


-6

フレームワークを使いやすくするには、少なくとも「クイックスタート」の方が簡単である必要があります。ZF-2をダウンロードして試してみました(正直、私はZFの初心者です)。悲しいことに、インターネット上で簡単なProject Skeletonを使用した「クイックスタートガイド」がまだ見つかっていません。私が探しているのは、ライブラリファイルを含め、MVC機能を備えたプロジェクトフォルダーを作成する簡単な方法です。私はCodeigniter、Cake php、Yiiを使用しましたが、かなり使いにくいと感じました。はい、ZendがPHPをアップグレードすることは知っていますが、それが最高のフレームワークまたはあなたが言うことを意味するものではありません。


LOL ....嫌いに保つ
ラム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.