web-dev-qa-db-ja.com

Angular.jsおよびASP.NET MVC 4

ASP.NET MVC 4プロジェクトがあり、Angular.jsまたはKnock.jsを使用するJavaScriptフレームワークまたはライブラリのアーキテクチャ上の決定に固執しています。私は現在、Knockout.jsではなくAngular.jsを使用することに傾いていますが、プロジェクト開発の途中で見つけたくはありませんでした。

背景を次に示します。

  • 双方向のモデルデータバインディングが必要
  • ビューをテストする機能が必要です。エンドツーエンドのユニットテストを実行できるようにしたいと考えています。また、継続的インテグレーションを使用しています。
  • 「変更の保存」機能。つまり、ユーザーがページで変更を加えた場合、変更を検出し、ページから移動する前に変更を保存するようにユーザーに促す機能が必要です。
  • 「通知」機能。つまり、ユーザーは約8時間ログオンし、他のユーザーが行った変更(エラー、データステータスの変更など)を通知および更新する必要があります。
  • アプリケーションを「将来の証拠」にする必要があります。現在、ビジネスユニットはモバイルデバイスをサポートする必要があるかどうかを決定していませんが、私はそれが時間の問題であることを知っています。
  • 私たちのチームは、非常に若い開発者からシニア開発者までさまざまな経験レベルを持つ開発者で構成されています。
  • 現在、私たちのモデルは複雑であり、さらにそうなる可能性があります
  • RAD、コードの再利用、保守性も考慮する必要があります

私は素晴らしい答えを読んだ here とスコット・アレンのAngular here についてのインタビューを見た

現在のASP.NET MVC 4アーキテクチャからWeb APIなどのサーバー側で何かを使用するように変更することはできないため、MVC 4でAngular.jsを実装しようとすると concerns があります。サーバー上とクライアント上に2つのモデルがありますか?

AngularとKnockoutには長所と短所があると思うので、どちらが良いかという議論は探していません。JavaScriptフレームワークまたはライブラリの実装に関する実際のコードを探しています。 ASP.NET MVC 4アプリケーション。これから2年以上経っても解決できるソリューションが必要です。

アイデアや提案はありますか?たぶん答えはKnockやAngularではなく、他のJavaScriptフレームワークですか?

73
Que

この質問を見てうれしかったのはコミュニティにとって興味のあることでした;)完全を期すために、私がやったことは次のとおりです。

私はAngularJSとASP.NET MVC 4を使用しましたが、使用できて良かったです。ただし、Angularには急な学習曲線がありますが、ディレクティブの力のために価値があります。

  • 双方向のモデルデータバインディングが必要です。ときどき、MVCコントローラーからの初期値を設定する必要がありました。これを実現するためにng-init属性を使用しました。
  • ビューをテストする機能が必要です-テストのために AngularJS docs に従いました
  • 「変更の保存」機能-Angularのディレクティブを使用してこれを実装しました
  • 「通知」機能-toastr.jsおよびディレクティブを使用してこれを実装しました(schweet)
  • 私たちのアプリケーションを「将来の証拠」にする必要があります-GoogleのAngularJSの計画はわかりませんが、AngularJSで作業した後、すぐにどこにも行くことができず、より広く採用されると予想しました:)
21
Que

私の2セント相当。

前文-angularとknockoutの両方で作業しました。MVVM/ MVC libで構築された3番目の重要なフロントエンドにいます。

MVVMはwpf/silverlightの仕組みに非常に似ているため、ノックアウトから始めました。そしてそれはうまく機能します。チュートリアルとドキュメントは一流です。すべてのコーダーは、数日以内に、または.netでmvvmを使用した場合、その後数時間以内に、knockout.jsで作業できます。

ただし、最近ではangularを使用しており、おそらく次の理由でこれに固執するでしょう。

  • 角度は完全なフレームワークです-ノックアウトは、実際にはちょうど2つの方法のバインディングです。残りの作業を行うには、まだbackbone.js/jqueryのような他のライブラリが必要です。

  • 角度には依存性注入があります。追加するのに最適です
    テストのモックとコードの構造化。

  • angleは、通常のJS変数をその$ scopeオブジェクト内のオブザーバブルとして扱います。つまり、特別な方法で宣言する必要はありません

私はangular fanboyではありません。彼らが現在持っている「ファンキーな」MVVM/MVCハイブリッドアーキテクチャではなく、MVVMアーキテクチャに移行できると思います。

angularの最大の問題は、ドキュメントです。ノックアウトと比較して、それは悲惨です。それは、コーダーをスピードアップするための追加の時間とコストを追加します。私見最高の選択。

57
Anton

AngularJsについてはあまり情報を提供していませんが、Knockoutについていくつかの考えを提供したいと思います。

Knockoutは主に、ビューをビューモデルに接続するためのデータバインディングライブラリですが、それ以上の機能を実際には提供していません。複雑なクライアントベースのWebサイトを構築するためのメインライブラリとしてノックアウトを単独で使用することはお勧めしません。

スパのような機能(ハッシュタグナビゲーションなど)を実装しているか、主にMVCサーバー側のビュー(Razorなど)を使用しているかについては言及しませんでした。ページごとのレベルで迅速なデータバインディングを探している場合は、それについても再検討します。私にとって、これらの両方(角度またはノックアウト)は、クライアント側の開発体験を強化するように設計されています-MVCなどのサーバー側のアプローチではありません。

一部でもSPAアプローチを検討している場合、ビューのアクティブ化ライフサイクルをある程度制御できるフレームワークが必要になるでしょう。

データバインディングのパワーと信頼性に関しては、Knockoutを信じています。私はそれを広範囲に使用しており、非常に好きになりました。ノックアウトの感触が好きなら、 Durandal を調べてください。 Durandalは、多くの「スパ」Webプロジェクトのニーズを満たすことができるきちんとしたフレームワークです。 Knockoutを含むいくつかの実績のあるライブラリの上に構築されたクライアント側のフレームワークです。これは、Angularよりも少し(多く)軽量であり、おそらくユーザーにとっては簡単です。

Durandal with Knockoutと追加のファサードを使用して、開発の観点から物事を強化するかなり大きなASP.Net MVC Webサイトを構築しています。ASP.NetMVCとの統合は簡単です。私はそこにあるサーバー側のノックアウトのものを使用しようとすることはお勧めしません。 MVVMパターンの実力を制限するためにそれを見つけました。

12
Joseph Gabriel