web-dev-qa-db-ja.com

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

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

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

同様に、ルーティングのアイデアは、コアプログラマにとって新しいため、非常に複雑です。私がここで質問しているような質問をたくさん読んでいることは知っていますが、Zend Frameworkを一夜で学ぶつもりはありません。必要なだけ時間をかけてもいいですが、今まで意味がありません。 Zendライブラリには何千ものクラスがありますが、noobは特定のクラスの使用場所と使用方法をどのようにして知るのでしょうか。 Zend Frameworkのbootstrapとそのマッピングを理解するのはまだ非常に難しいと感じています。マニュアルを読んで、それに従ってください。作業が始まりますが、実際にどのように起こっているのかはわかりません。 。

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

42
Umair Abid

Zend Frameworkは難しいです。エントリーレベルのフレームワークとして構築されたのではなく、関係する概念の知識が前提とされています1。とはいえ、 Zend Framework 2.0の最初の要件 は少し簡単にするためのものです。

学習曲線を緩和します

2009年後半に、私たちはフレームワークユーザーの調査を行い、ユーザーが使用するもの、使用する環境、ユーザーのニーズを特定しました。一番上の問題は、バーなしで、フレームワークを学ぶのが困難でした。これらの問題のいくつかは次のとおりです。

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

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

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

しかし、本当にフレームワークで学びたいのであれば、本格的なものではなく micro framework を検討する必要があります。 Slim は、非常に小さく、クリーンで、十分にテストされたコードベースを備えており、学習に最適です。私は他のマイクロフレームワークをいじりませんでした。あなたはあなた自身の研究をして、どれがあなたにとってより良いかを決めるべきです。

ルーティングの簡単でわかりやすい紹介については、 my answer to this question を参照してください。把握するのはそれほど難しい概念ではありませんが、Zend Frameworkは 実際よりもはるかに多い のように見せます。

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

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


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

フレームワークは難しいものではありません。フレームワークの目的は、物事を簡単にすることです。関連する概念をしっかりと理解していても、ZFはあなたに適していない可能性があります。

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

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

38
yannis

Zend Frameworkの使用を開始したときの発見の難しさは気に入りませんでした。あまりに多くのクラスが配列に依存しているため、定義する必要がある/定義する必要があるキーを検索する必要があります。

明確なsetメソッドや名前付きparamsを使用しても、何も問題はありません。発見できるようにするために、imoは長い道のりを進んでいます。

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

11
DBlackborough

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/
5
vartec

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

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

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

Zend Frameworkは非常に分離されており、ZFを使用しない他のプロジェクトでそのクラスを使用できるため、Zend Frameworkはより複雑であると私は思います。

4
gustavotkg

Zend Frameworkには、OOPおよび設計パターン)の確かな基礎が必要です。私の経験から、Zend Frameworkに慣れ親しんだ経験豊富なJava-JEE-Struts-Springプログラマーしか見つかりません。平均PHP開発者は、Zend Frameworkの背後にある概念とアーキテクチャーを消化するのが難しいことに気づきます。しかし、ちょっと見てください!Zend Frameworkは、PHPを最初に作成する会社 'Zend'から来ています。したがって、尊敬しないとしても、それはいくつかの考えが必要です!

3
Rohit