5

私はプロジェクトに取り組んでいますが、どのコードをどこに置くかについて混乱しています。なぜ私がやや混乱しているのかを示すために、ここに簡単な例を示します。

何らかの方法でアカウントを作成できる CakePHP アプリ内のいくつかの Web ページを想像してみてください。このアカウントと共に、モデルとライブラリの両方からいくつかの他の関数を呼び出す必要があります (たとえば、何かを圧縮したり、アカウントの証明書を作成したり、.. .)。

複数の場所で実行する必要があり、モデルに完全に属していない(+かなりのコードである)ため、最善の方法は、私が考えたコンポーネントを使用することです。

Web サーバーの背後にいる限り、これはうまく機能しますが、シェルでもそのすべての機能を利用できるようにしたい場合はどうすればよいでしょうか? -その後、コンポーネントを使用できず、ライブラリしかロードできません。

これは、コントローラーと同様に両方のシェルですべてのロジックを利用できるようにするために、共有できる/共有したいすべての関数/php コードの場合です。

ここに質問があります:) =>すべてのコンポーネントはライブラリである必要がありますか?、それらのライブラリ内にモデル/他のライブラリなどをロードすることはアーキテクチャ上正しいですか?、コンポーネントの使用は何ですか?、「rm -rf」も同様です' それらとライブラリのみを使用しますか?

これまで私がコンポーネントを使用してきた方法は、コントローラー間で共有できる/共有する必要があるすべてのプロセス ロジックをコンポーネントに配置することでした。モデルや静的関数のコレクションだけが必要ないときに使用したライブラリ(画像を操作する例)。そうすることで、シェルスクリプトを使用するときに、これらのコンポーネントのロジックにアクセスしたい/必要とする壁にぶつかりました。

私の理解が間違っている場所について何か考えはありますか?

4

1 に答える 1

4

あなたはすでにすべての答えを自分で与えています!

はい、コントローラー間で機能を共有するためのコンポーネントがあります。コントローラーのみ。したがって、モデルまたはシェルでその機能が必要な場合は、見当違いです。

私のシェルとコントローラーの両方で使用されるコードをモデルレイヤー(モデル/データベース関連の場合)またはライブラリ(静的/計算など)に配置する必要があります。その後、それらは両側から使用できます。

モデルをライブラリで使用でき、その逆も可能です。あまりにも多くの依存関係と循環関係を作成しないように注意してください。それらは、テスト/拡張/変更も困難です。

コンポーネントは、これらの lib/model メソッドをラップして、コントローラーにすばやく便利にアクセスできるようにするのに役立ちます。CakeSession クラスのみをラップして、コントローラーで簡単なセッションアクセスを提供する SessionComponent に似ています。

ところで、Tasks を使用してコマンド ライン環境でも同じ便利なラッピングを行うことができます。それらは「シェルのコンポーネント」に他なりません。

于 2013-06-05T20:38:04.810 に答える