2017-08-20 7 views
-1

アプリケーションの内部でデータを渡す必要がある場合は、予測可能な方法で転送する必要があります。PHPアプリケーションで内部的にアプリケーション内でデータを渡すのを処理する方法は?

私は関数を見て、関数に渡されているコレクション内のwhatsを知りたいと思っています。

配列は予測できないデータ構造であるため、あなたは何を得ているのか分かりません。

名前付きプロパティで定義されたオブジェクトを持っていて、配列の代わりにアプリケーションの周りを渡す方がいいと思っています。

問題点は、どこかのフォルダに多数のオブジェクトが蓄積されるということです。

これについての意見や他の選択肢について疑問に思っていましたか?

+0

_「どこかのフォルダにオブジェクトがたくさん集まっています」_ - ファイルとして保存していますか?どのようにそれらを渡す必要がありますあなたのアプリケーションに依存し、私たちは何も知らない。一般的には、配列上でオブジェクト(Valueオブジェクトと呼ばれる)を渡すことをお勧めします。なぜなら、利用可能なプロパティを定義できるからです。 –

+0

これは私が今まで読んだことのない漠然とした質問です。実際の状況をご記入ください。 – jonrsharpe

+0

Magnusに感謝します。それはまさに私が探していたものです。値オブジェクト。だから、どこにこれらを保管していますか?どのようにそれらを使用する上でのベストプラクティスのためのreccomendations? –

答えて

1

大きな(問題はありますが)問題がある可能性があります。コード内の構造体は、複数のレイヤー境界を越えてはいけません。

いくつかの構造体(配列かオブジェクトかどうかは関係ありません)が2つの層を超えている場合、意図的な妥協でない限り、脆弱性を示す「アーキテクチャ上の欠陥」あなたのコードベースの。このようなクロスカッティングのデータ構造は、コードベースが些細なバグを呈する魔女の間のフォールトラインになります。

3つ以上のレイヤー境界をまたいだ構造体がある場合、コードベースは犯されます。それはの1つになり、 "卵を産む前に火で殺す"プロジェクト。私が使用

解決策はこれです:

代わりに周りに渡される「データ構造」を捧げたの、domain objectsの周りにあなたのビジネスロジックを集中します。レイヤーのあるポイントでそれを作成します。そこでは実際にロジック関連のビヘイビアを使用してそれを挿入したり、それを他のレイヤーに戻したりするだけです。

ちょっと、次のように:

public function loginWithPassword(Entity\EmailIdentity $identity, string $password): Entity\CookieIdentity 
{ 
    if ($identity->matchPassword($password) === false) { 
     throw new PasswordMismatch; 
    } 
    $identity->setPassword($password); 
    $this->updateEmailIdentityOnUse($identity); 
    $cookie = $this->createCookieIdentity($identity); 

    return $cookie; 
} 

何この方法のうちに渡されていることは、特定の、ビジネス関連の動作が含まれているいくつかの「データ構造」が、完全に形成された論理エンティティ、ではありません。

+0

私はこれが大好きです。いくつかの「抽象的な」データ構造の代わりに、より焦点を絞ったドメイン固有のオブジェクトを渡します。 –

+0

できれば、はい。問題は、実際にあなたのドメインのための良い構造を理解すること(および付随するクラスを作成すること)は、最初の数回は非常に困難です。 –

関連する問題