angular2を使用しているWebアプリケーションで作業しています。 MVVVMパターン:モデルビューViewModel、angular2では、モデルクラス、サーバー側からデータを抽出できるサービス、ビューとコンポーネントのテンプレートがあります。私はangular2プロジェクトでどのようにMVVMアーキテクチャを適切に適用できるのでしょうか?Angular2でMVVMを適用する
あなたはModelオブジェクト(これはすべての擬似コードである)している典型的なMVVMパターンでは答えて
:次にビューを
class MyModel {
public int id;
public string foo;
public int bar;
public date createdOn;
}
を持っている:
<div>{{myModelBar}}</div>
<div>{{myModelFoo}}</div>
<div>{{anotherModelBar}}</div>
あなたはどのようにビューとモデルを参照ください相関関係はありませんか?このビューにはモデルの一部のプロパティが必要ですが、それらのすべてではありません。ビューには、モデルに存在しないプロパティも必要です。
class MyViewModel {
public string myModelFoo;
public int myModelBar;
public int anotherModelBar;
}
今、私たちの見解は、それが実際に使用できるモデルがあります。これは、ビューモデルの必要性の出番です。それでは、モデルからViewModelへのビューからViewへのどのような取り組みですか?コントローラーが必要です:
class Controller() {
var modelA = new MyModel();
modelA.foo = "Foo";
modelA.bar = 1;
var modelB = new MyModel();
modelB.bar = 2;
var viewModel = new MyViewModel();
viewModel.myModelFoo = modelA.foo;
viewModel.myModelBar = modelA.bar;
viewModel.anotherModelBar = modelB.bar;
// The view function here would retrieve the view and combine it with the ViewModel
var view = View('path_to_our_view_file', viewModel);
return view;
}
これはMVVMCパターンです。 MVVMのパターン自体は、モデル、ビュー、およびビューモデルにはビューまたはビューの構成方法に関する動作がないため、ほとんど役に立たないと言います。私がMVVMであると主張するフレームワークで見たことは、ViewModelは通常、コントローラとViewModelのマッシュアップであるか、ルーティングがないためにパターンがコントローラレスであると考えていることです。しかし、私は、ViewModelが特定のビューで動作している場合にルーティングが暗示されていると言います。
Angularがこのパターンに厳密に従わないことは明らかです。しかし、ほとんどのコンセプトは似ています。あなたはまだコントローラとビューを持っていますが、それらは単にコンポーネントの形で一緒にマッシュされています。コントローラーまでのAngular 2の興味深い点は、コントローラーへの実際のルーティングが可能で、コンポーネントに割り当てられたテンプレートタグ経由のルーティングを暗示していることです。しかし、結果は同じです。コンポーネントが呼び出されたり、ルーティングされたりするビューを取得する方法があります。多くのフレームワークと同様に、モデルレイヤーは作成するまではあなた次第です。
ここでViewModelレイヤーはどこですか?私は、Componentのすべてのパブリック変数がViewにアクセスできるので、ViewModelレイヤーはComponentクラスのプロパティであることを提案します。クライアントがサーバーに要求を行い、サーバーがビューを返さなければならない典型的なサーバー・クライアント・アプリケーションでは、すべての呼び出しで状態を再構築する必要があります。これを行うには、コントローラ - >モデル - > ViewModel - > Viewの各呼び出しでMVVMCチェインを実行する必要があります。 Angularのクライアント側アプリケーションでは、コントローラはビューの状態を保持するため、ViewModelが存在します。
したがって、問題はビューの関心をモデルの関心とどのように区別しますか?ビューでモデルを直接使用しないことには賢明でなくてはなりません。 1つの方法は、クラスとして個別のビューモデルを作成することです。
class MyComponentViewModel {
name: string;
list: Array<string>;
}
@Component({
selector: 'my-component',
template: `<div>{{model.name}}</div>
<ul>
<li *ngFor="let item of (model.list | async)">{{item}}</li>
</ul>`
})
class MyComponent {
model: MyComponentViewModel;
private propertyA: string
constructor(private dataService: DataService) {
this.model = new MyComponentViewModel();
this.model.list = [];
let page = dataService.getCurrentPage();
let children = dataService.getPageChildren(page.id).subscribe(pages => {
this.model.list = [];
for(let page of pages) {
this.model.list.push(page.title);
}
})
this.model.name = page.title;
}
}
このコードはテストされていません。うまくいけば、あなたはポイントを得るでしょう。独自のビューモデルを作成するだけで、Componentクラスのプロパティをダーティにする代わりに、独自のクラスにビュープロパティを配置することができます。このアプローチの利点はより洗練されたものになります。コンポーネントを使用して作業を行うようになりました(パターンに固執している限り)。短所はもう少し冗長で、一部のタイプをビューモデルに適したより一般的なタイプに変換するのは難しいかもしれませんが、1つのオブジェクトにすべてのプロパティを配置するので、角度変化の検出が混乱する可能性がありますこのことはわかりません)。私にとっては、過度に冗長に見えるので、おそらくこのパターンを使用しないでしょう。
- 1. angular2でテーマを適用するには?
- 2. Angular2フォームでバリデータを適用
- 3. QtQuickでのMVVMパターンの適用
- 4. angular2/webpackにes6ブラウザシムを適用する
- 5. Angular2-beta 17 - 手動でバリデーターを適用
- 6. MVVM Light Messengerを適切に使用する方法
- 7. angularjsにMVVMパターンを適用するには?
- 8. Angular2でCSSクラスを条件付きで適用する
- 9. iOS用のMVC、MVVM、MVPのどちらが最適ですか
- 10. Angular2で日付を適用するには?
- 11. angular2-mdlコンポーネントをAngular 2 Quickstartに適用
- 12. MVVMにMVVMを適用する。どのようにプロパティのマッピングを行うには?
- 13. MVVM/MVVM-Lightでレコードを編集する
- 14. Angular2:適切にbootstrap-tagsinputを使用する方法
- 15. データが受信された後にパイプを適用するAngular2
- 16. angular2の子ルートを適切に使用する方法は?
- 17. MVVMパターンでハイパーリンクを使用するセルテンプレート
- 18. mvc-mvvmでエンティティモーダルを使用する
- 19. MVVMでデータセットを使用する
- 20. SilverlightとMVVMで最適なパフォーマンスを得るためのベストプラクティス
- 21. 適切な方法でAngular2 RC6を使用してqueryParamsを取得する
- 22. MvvMでI依存性注入を適用するにはどうすればよいですか?
- 23. Angular2 - index.htmlのグローバルスタイルを変更する、またはstyleurlをルートに適用する
- 24. UICollectionViewControllerのための適切なMVVMアーキテクチャは何ですか
- 25. PrismはMVVM開発に適した製品ですか?
- 26. 独自のMVVMを実装するか、MVVMフレームワークを使用するか?
- 27. Angular2スタイルはViewEncapsulationなしでは適用されません.None
- 28. Angular2適切な方法
- 29. Angular2アプリの最適化
- 30. MVVM汎用ネットワーキングアーキテクチャ
これらのMVCパターンの略語はかなり曖昧です。あなたが達成しようとしていること、試したこと、失敗したところを示すコードを投稿してください。 –