3

私の疑問を明確にするために、次のシナリオがあります。

私は車と家を売るアプリを持っているので (ほんの一例です!)、すべての車を表示するCarsというモジュールと、すべての家を表示するHousesというモジュールを作成しました。

車と家のための CRUD システムを持つ Manager モジュールがあります

車や家のモデルはどこに置くべきですか? モジュールのように、モデルを配置するためだけにモジュールを作成する必要がありMainますか? または、モデルをCars and Housesモジュールに配置し、 Managerモジュールでそれらにアクセスする必要がありますか?

CarModelメソッドselectinsert、およびdeleteを使用して を作成するとします。このモデルをCarsモジュールに入れると、メソッドの挿入削除Carsにアクセスできるようになったため、セキュリティ上の問題が発生する可能性があります...

一方、CarModel内部CarsモジュールをselectCarModelメソッドのみで作成し、モジュール内で挿入削除を使用して再度作成することもできますManagerが、コードのメンテナンスが非常に困難になります...

この問題を解決する最善の方法は何ですか?

4

1 に答える 1

15

したがって、質問に大まかに答えるには、指定したコンテキストでモジュールを分割する方法が2つあります。

  • オールインワンモジュール(admin / CRUDを、エンティティとフロントエンドのものを提供する実際のモジュールと組み合わせます)。私の開発者の1人がこのモジュールでこのアプローチを採用しました:https ://github.com/speckcommerce/SpeckCatalog
  • 個別のモジュール。たとえば、ZfcUserはユーザー管理を提供しませんが、 ZfcUserAdminはZfcUserのエンティティ/マッパーを利用し、追加のユーザー管理/管理機能を提供します。

どちらのアプローチも間違っていたり正しいものではありません。それは本当にあなたの好みとあなたがあなたのアプリケーションの機能をどのように分解したいかに依存します。たとえば、管理/ CRUDシステムなしでHousesまたはCarモジュールを使用するサイトを構築したいと思うことはありますか?

より技術的なレベルでは、Zend\Dbを使用して「モデル」または「エンティティ」を処理する方法がいくつかあります。2つの一般的なパターンは、TableGatewayパターンとDataMapperパターンです。

  • テーブルゲートウェイ:私はこれについてブログを書きました:http://blog.evan.pro/zf2-tablegateway-hydration

  • データマッパー:これは私の好みのソリューションです。これについてはまだブログに書いていませんが、ZfcUserで使用例を見つけることができます。また、ベースデータマッパーはTable GatwayのようにZF2に組み込まれていませんが、はるかに柔軟なソリューションです。ZfcBaseが提供するAbstractDbMapperを確認してください。

この機会に、 Rob Allenと私がPHPNW12で提供したZF2チュートリアルのスライドをいくつか紹介します。また、数週間後にZendConでも提供します。

テーブルゲートウェイhttp://evan.pro/caps/2ddbaf.png テーブルゲートウェイ選択 http://evan.pro/caps/0904b8.pngAbstractDbMapperhttp://evan.pro/caps/a31480.png マッパー選択http:/ /evan.pro/caps/a2a04f.png 概要http://evan.pro/caps/3ec9e6.png

于 2012-10-15T06:43:20.887 に答える