2012-05-05 11 views
1

最近、私はRedBean ORMの使用を開始しました。PHP ORMベストプラクティス:別のオブジェクトタイプから値を取得する:

私は、ユーザーの情報を格納するユーザーBean型と、ユーザー機能のための関連FUSEモデルを持っています。

ユーザーがログインするかセッションが既に設定されている場合、Redbeanはアドレスを含むユーザーの情報を取得します。

ユーザーがログインするまで、ジオープロケーションサービスを介して新しいユーザーBeanの州と都市の値を設定しました。

このタイプの手順で何がベストプラクティスであるのか不思議です。

私はそれを見る方法、私はいくつかのオプションがあります。

  1. のGeoIPオブジェクトをインスタンス化し、値を設定し、ユーザーFUSEモデル内のメソッドを作成します。
  2. FUSEモデルの外でgeoipオブジェクトをインスタンス化し、値を直接設定します。例:$ user-> state = $ location-> state;
  3. FUSEモデルの外でgeoipオブジェクトをインスタンス化しますが、そのオブジェクトを処理する方法を知っているFUSEモデル設定ツールにオブジェクトを渡します。

私はあなたがクラスの依存関係を作成するので、あなたは本当にオプション1をしたくないと推測しています。

どのような考えですか?

答えて

0

ユーザーがログインするたびにgeoipを処理する必要がある場合 - メソッドを作成し、ユーザーのログイン(1)で初期化します。他のオプションでは、オプション3(Instantiate the geoip object outside of the FUSE model, but pass the object to a FUSE model setter which knows how to handle it.)を使用します。オブジェクトのプロパティを直接操作したり、これらのプロパティを処理するメタモデルを設定したりしない方がよいでしょう。彼らは、必要に応じて作成することができますが、

$user->setProperty('one'); // Actually can just execute `$user->property = $var;` 

なく

$user->property = 'one'; 
+0

Redbean ORMライブラリーの使用は、より、代わりにゲッターとセッターを作成する必要のプロパティを直接設定を中心とします。つまり、私はジオープオブジェクトへの新しい追加が1つの場所で対応できるので、オプション3にも傾いていると言われています。 – christian

関連する問題