ビュー テンプレートでリストやテーブルを扱うときは、常にある種のループが発生します。テンプレートにビュー ロジックを追加するのはよくないと主張する人がいる理由は、ViewModel パラダイムに関連しています。
データをループするだけでは不十分な場合があります。次に例を示します。
<?php foreach( $users as $user ): ?>
<?php if ( in_array( $user->getId(), $members ) ): ?>
<!-- Users is member -->
この特定のケースでは、ユーザーがメンバーであるかどうかを確認user entity
するメソッドがありません。isMember()
ユーザーエンティティに同梱されているサードパーティモジュールを使用していて、これを拡張して新しい依存関係 (グループなど) を追加したくないと仮定します。上記の例のようにビュー テンプレートを適切に表示するには、ドメイン モデルの外部でこれを確認する必要があります。
ただし、この場合、ビューにロジックを追加しています: if ( in_array( $user->getId(), $members ) )
。ビジネス ロジックまたはビュー ロジック内に配置する必要があります。後者はViewModelsを使用して実現されます。したがって、ビューをドメイン モデル オブジェクトと対話させる代わりに、メソッドを実装して上記のロジックをカプセル化する ViewModel と対話します。isMember()
このパラダイムの主な考え方は、ビューはドメイン モデルにアクセスできず、代わりに ViewModel とのみ対話し、ビューをドメイン モデルから独立させておくというものです。
アップデート
たとえば、デザイン/フロントエンド チームがいる場合は、呼び出しを許可しませんが、ViewModel$user->setName()
だけを使用する場合は、このメソッドをオプションとして含めません。$user->getName()
別の例があります。アプリケーションにスキン/テーマがあるとしましょう。ビュー テンプレートの最初の例のように、ビュー ロジックを保持する場合は、同様のテンプレートを使用してすべてのテーマに対してこのロジックを複製する必要があります。これをテンプレートから切り離すことで、重複したビュー ロジックがビュー テンプレート全体に広がることを回避できます。