0

こんにちは皆さん、私はインターフェイスをどこに保持する必要があるかについて頭を悩ませようとしています。

例 :

私が取り組んでいる zend mvc マルチモジュール アプリケーションがあり、それをクリーンアップしたいと考えています (それは本当に混乱しています)。

モデルオブジェクトには以下が含まれますが、これらに限定されません:

Model_Order
Model_Order_Item
Model_Order_Item_Location
Model_Product
Model_Customer
Model_Warehouse
Model_Warehouse_Location
Model_Warehouse_Location_Position

dependencies include:

Model_Order : Model_Order_Item ( 1 order to many items ), Model_Customer ( many orders to one customer )

Model_Order_Item : Model_Product ( 1 item has 1 product )

Model_Product : Model_Warehouse_Location_Position ( a product could have many positions ), Model_Customer ( one to one relationship )

Model_Warehouse : Model_Warehouse_Location ( one warehouse could have many locations ( or bins ) and different types )

Model_Warehouse_Location : Model_Warehouse_Location_Position ( one location many product positions )

many of these are dependencies that traverse in both directions.

だから私の質問は次のとおりです。

インターフェイスに関しては、次のうちどれが適切ですか?

Model_Order_Item_Product_Interface
Model_warehouse_Location_Position_Product_Interface

Model_Order_Item 内はメソッド setProduct(Model_Order_Item_Product_Interface $product) である可能性があります

Model_warehouse_Location_Position 内はメソッド setProduct(Model_warehouse_Location_Position_Product_Interface $product) である可能性があります

モデルオブジェクトは次のようになります

Model_Product implements Model_Order_Item_Product_Interface, Model_warehouse_Location_Position_Product_Interface

また

製品の概要を説明するインターフェイスが 1 つあります (Model_Product_Interface)

Model_Order_Item 内にメソッド setProduct(Model_Product_Interface $product) がある場合がありますが、これは注文が「名前空間」の外にあるインターフェースを必要とすることを意味します。(しかし!代わりに、製品は「名前空間」の外側を見て、適合する必要があるすべてのインターフェースを取得します)

これらのインターフェイスをどこに配置すればよいか 100% 確信が持てません

ドメインの観点から見ると、注文、製品、倉庫、顧客の 4 つのグループに分かれています。「モジュール」/グループ内で設計されたインターフェースを持つことは、それに直接関連するため、より優れています........

私の心は、この主題についてループすることができます. 個人的な好みの方が多いと思いますか?

補足として、シングルトン サービスロケーターを使用して各グループ専用のサービスを返し、ファクトリとデータ アクセス オブジェクトを (他のサービス関連のメソッドと共に) 返す予定です。

zendのブートストラップにある私の考えは、依存関係の注入をすべてそこで行うので、1か所にまとめました。

アドバイスをいただければ幸いです。

4

2 に答える 2

0

私はそれらをライブラリの interfaces ディレクトリに置いたので、models ディレクトリが乱雑になることはありません。ZF 1.x アプリケーション構造を模倣するライブラリで構造を使用します。

/library
    /namespace
        /Application
            /Controller
                /Plugin
            /Interface
            /Model
                /Entity
                    /Abstract.php
                /Mapper
                    /Abstract.php
            /Resource
            /View
                /Helper

少し深くて忙しいことは知っていますが、それは私を整理し続けます。ZF2 に変更するときは、名前空間を実装するために再評価する必要があります。

于 2012-05-26T07:00:40.983 に答える
0

最初に尋ねるべき質問は次のとおりです。

このインターフェースの所有者は誰ですか? 製品?

Product_Model_Interface_Name

/modules/product/models/interface/Name.php

なんで?

このようにして、作成に使用されたモデルの所有者を簡単に確認できます。

ただし、汎用インターフェイスについて話している場合は、ライブラリを作成する必要があります

/library/MyApplication/Models/Interface/Name.php

Generic インターフェイスを使用する場合は、ブートストラップで autoload を構成する必要があります

于 2012-05-25T13:10:12.743 に答える