タグ付けされた質問 「asp.net-mvc」

ASP.NET MVCフレームワークは、モデルビューコントローラー(MVC)パターンを実装するMicrosoft Webアプリケーションフレームワークです。

2
MVCアーキテクチャのベストプラクティス[終了]
私の質問は、MVCアプリケーションの設計方法に関するものです。たとえば、RepositoryパターンでDIを使用してデータアクセスをコントローラーから分離することをお勧めしますが、HOWではMVC専用にこれを行うとはほとんど言われていません。たとえば、Repositoryクラスはどこに配置しますか?モデルは、実際のデータアクセステクノロジーから同様に比較的分離する必要があるため、特にモデルに関連しているようには見えません。 2番目の質問には、レイヤーまたは層の構成方法が含まれます。ほとんどのサンプルアプリケーション(オタクディナー、ミュージックストアなど)はすべて、通常はL2SまたはEFコードを直接呼び出すコントローラーを持つ単一層の2層アプローチ(テストをカウントしない)を使用しているようです。 多層/レイヤーアプリケーションを作成する場合、MVCに関するベストプラクティスは何ですか?

1
関数を呼び出して、C#で待機しない
mvc4 Webアプリケーションに、別の関数を呼び出す必要があるアクションがあるコントローラーがあります。その関数で何が起こるか、つまり戻り値は私のアクションにとって重要ではありません。その関数を呼び出して、実行されるのを待つことはできませんか? 私はそれを非同期で行うことができると思いますが、私のポイントはリソースを使用せず、関数を呼び出して、それが起こるまで待つことはありません。 アドバイスをください。
26 c#  .net  asp.net  asp.net-mvc 

6
なぜメソッドを「待ち」、すぐにその戻り値を調べるのでしょうか?
で、このMSDNの記事、次のコード例は、(わずかに簡潔にするために編集された)が設けられています。 public async Task<ActionResult> Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Department department = await db.Departments.FindAsync(id); if (department == null) { return HttpNotFound(); } return View(department); } このFindAsyncメソッドは、DepartmentIDでオブジェクトを取得し、を返しますTask<Department>。次に、部門がすぐにチェックされ、nullかどうかが確認されます。私が理解しているように、この方法でタスクの値を要求すると、待機中のメソッドから値が返されるまでコード実行がブロックされ、事実上これが同期呼び出しになります。 なぜこれをするのですか?Find(id)とにかくすぐにブロックする場合は、単に同期メソッドを呼び出す方が簡単ではありませんか?
24 c#  .net  asp.net-mvc  async 

3
IEnumerable <T>ではなくList <T>を使用する必要があるのはなぜですか?
ASP.net MVC4 Webアプリケーションでは、IEnumerablesを使用して、実装ではなくインターフェイスにプログラムするというマントラに従っています。 Return IEnumerable(Of Student) 対 Return New List(Of Student) リストはクエリを強制的に実行し、IEumerableは実行しないため、人々はIEnumerableではなくListを使用するように言っています。 これは本当にベストプラクティスですか?代替手段はありますか?インターフェイスを使用できる具体的なオブジェクトを使用すると、奇妙に感じます。私の奇妙な気持ちは正当化されますか?

4
テストMVCビューが眉をひそめているのはなぜですか?
現在、ASP.Net MVCアプリケーションの基礎を設定しています。どのような単体テストを作成する必要があるのか​​を検討しています。私は複数の場所で人々が本質的に「あなたの意見をテストすることを気にしないでください、ロジックはなく、簡単で、統合テストでカバーされます」と言ってきました。 これがどのように受け入れられた知恵になったのか理解できません。統合テストは、単体テストとはまったく異なる目的を果たします。何かが壊れた場合、統合テストが壊れた30分後に知りたくないので、すぐに知りたいです。 サンプルシナリオ: Customerエンティティを持つ標準のCRUDアプリを扱っているとしましょう。顧客には名前と住所があります。テストの各レベルで、顧客の取得ロジックが名前と住所の両方を適切に取得することを確認します。 リポジトリを単体テストするために、データベースにアクセスする統合テストを作成します。ビジネスルールを単体テストするために、リポジトリをモックアウトし、ビジネスルールに適切なデータをフィードし、期待される結果が返されることを確認します。 やりたいこと: UIの単体テストを行うには、ビジネスルールをモックアウトし、予想される顧客インスタンスをセットアップし、ビューをレンダリングし、指定したインスタンスの適切な値がビューに含まれていることを確認します。 立ち往生していること: リポジトリの単体テストを行うには、統合テストを作成し、適切なログインを設定し、データベースに必要なデータを作成し、ブラウザーを開いて顧客に移動し、結果のページに適切なものが含まれていることを確認します指定したインスタンスの値。 上記の2つのシナリオにはオーバーラップがありますが、テストのセットアップと実行に必要な時間と労力の主な違いは理解しています。 私(または別の開発者)がアドレスフィールドをビューから削除した場合、統合テストがこれを検出するのを待ちたくありません。私が欲しいのは、毎日複数回行われるユニットテストで発見され、フラグが立てられます。 重要な概念を把握していないように感じます。MVCビューの有効性に関するテストのフィードバックをすぐに望むのはなぜ悪いのか、誰かが説明できますか?(または、悪くない場合は、フィードバックを得るための予想される方法ではありません)

4
MVCが「懸念の分離」である場合、なぜRazor Syntaxが導入されたのですか?
私の質問は、Microsoftによって導入されたMVCデザインパターンとRazor Syntaxに関連しています。 MVCの設計パターンを学習している間、私はこの考えは「懸念の分離」として知られる原則に基づいていると言われました。 ただし、Razor構文を使用すると、ビューで C#を直接使用できます。 これは懸念事項の交差点ではありませんか?

2
ASP.NET MVCアプリケーションは、Entity Frameworkをモデルとして直接使用する必要がありますか?
私はVisual Studio 2013(MVC 5)で最初のMVCアプリケーションを構築していますが、モデルをセットアップする最適な方法については少しわかりません。 既存のデータベースからコードファーストを使用して、エンティティフレームワークモデルを生成しました。私の最初の本能は、ビューで使用されるモデルとなるいくつかの中間クラスを作成し、それらのクラスをエンティティフレームワーククラスと連携させることでした。 中間クラスを書いているとき、EFクラスがたまにプライベートセッターで行ったり、あるデータ型から別のデータ型にキャストしたりすることの多くを再実装していることに気付きました。それは無駄のように思えた。 エンティティフレームワーククラスをMVCアプリケーションのモデルとして直接使用するという一般的な規則はありますか?または、これらの中間クラスを構築するのに欠けている利点がありますか?

3
複雑なオブジェクトモデルのリポジトリパターンを実装するにはどうすればよいですか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 データモデルには、約12の機能領域に分離できるほぼ200のクラスがあります。ドメインを使用するのは良かったのですが、分離はそれほどきれいではなく、変更することはできません。 エンティティフレームワークを使用するようにDALを再設計しており、これまで見てきたほとんどの推奨事項は、リポジトリパターンの使用を推奨しています。ただし、実際に複雑なオブジェクトモデルを扱うサンプルはありません。私が見つけたいくつかの実装は、エンティティごとのリポジトリの使用を提案しています。これは、大規模で複雑なモデルにとってはばかげており、維持できないようです。 操作ごとにUnitOfWorkを作成し、エンティティごとにリポジトリを作成する必要は本当にありますか?数千のクラスになってしまう可能性があります。これが不合理であることは知っていますが、リポジトリ、作業単位、およびエンティティフレームワークを複雑なモデルや現実的なビジネスアプリケーションに実装するガイダンスはほとんど見つかりませんでした。

5
クライアントのWebサイトでリッチテキスト編集が必要な場合はどうしますか?
すでにご存知のとおり、XSS攻撃は危険であり、非常に簡単に実行できます。ASP.NET MVCのように、さまざまなフレームワークによりHTMLを簡単にエンコードできます。 &lt;%= Html.Encode("string"); %&gt; しかし、クライアントがMicrosoft Word文書からコンテンツを直接アップロードできることを要求するとどうなりますか? シナリオは次のとおりです。人々はMicrosoft WordからWYSIWYGエディター(この場合はtinyMCE)にコンテンツをコピーして貼り付け、その情報をWebページに投稿できます。 Webサイトは公開されていますが、その組織のメンバーのみがWebページに情報を投稿するアクセス権を持ちます。 これらの要件を安全に処理するにはどうすればよいですか?現在、クライアントが投稿した内容のチェックは行われていません(「信頼できる」ユーザーのみが投稿できるため)が、これには特に満足しておらず、アカウントがハッキングされた場合にさらにロックダウンしたいと思います。 これらの要件を満たすことがわかっている唯一の概念的な方法は、HTMLタグをホワイトリストに登録し、それらを通過させることです。別の方法はありますか?そうでない場合、ユーザーが任意の形式でデータベースに入力を保存できるようにする安全な方法は何ですか? 関連質問 クロスサイトスクリプティング(XSS)の防止
18 c#  .net  asp.net-mvc 

1
ビューモデルを作成するためのファクトリクラスが必要ですか?
私の同僚は、ファクトリクラスを使用して、ASP.NET MVCソリューションでビューモデルオブジェクトを作成することを提案しました。ビューモデルがアプリで構築される方法の設計と保守性に役立つという考えです。 他の誰かがこの経験を持っているかどうかを知りたかった。私はいくつかの研究を行ったが、この実践についてはほとんど発見しなかった。 現在、コントローラレベルでビューモデルオブジェクトを作成しています。 public ActionResult Index() { return this.View(this.BuildIndexViewModel()); } したがって、this.BuildIndexViewModel()は、viewmodelクラス(明らかに:)の作成を担当します。しかし、次の可能性を検討しています。 public ActionResult Index() { return this.View(ViewModelFactory.CreateIndexViewModel()); } これは面白いアイデアですが、私は100%確信していません。これについて他の人の意見に興味がありました。

3
Modelとまったく同じViewModelを追加することをお勧めします
ソリューションに次のレイヤーがあります。 App.Domain App.Service App.Core(これをApp.DataLayerと呼ぶかもしれません) App.Web ソフトウェア設計パターンは私の質問ではなく、次のモデルがあります Domain public class Foo { public int Id {get;set;} public int Name {get;set;} public int Value {get;set;} } ビュー(たとえば、ホームページ)でこのモデルを使用しId, Name &amp; Value、さらにを使用したいので、ViewModelを作成する場合は、次を追加します。 public class FooViewModel { public int Id {get;set;} public int Name {get;set;} public int Value {get;set;} } だから、それは良いアイデアですか?または単に?のFoo代わりに使用しFooViewModelます

5
アップロードされた画像に名前を付けるためのベストプラクティスは何ですか?
ユーザーがプロフィール写真をアップロードできるフォームがWebアプリケーションにあるとします。 ファイルサイズ、サイズなどに関する要件はほとんどありませんが、ユーザーが画像をアップロードするときに、システム上でどのように名前を付ける必要がありますか?一貫性があり、一意である必要があると思います。 多分GUID? a5c627bedc3c44b7ae7c06a44fb3fcf8.jpg タイムスタンプ? 129899740140465735.jpg ハッシュ?例:md5 b1a9acaf295cf14ffbc5b6538294562c.jpg これを行うための標準的な方法または推奨される方法はありますか?

2
作成アクションと編集アクションを別々にするか、作成アクションと編集アクションを1つにまとめる方が良いでしょうか?
ASP.NET MVC 2を使用して、コントローラー/ビュープレゼンテーションレイヤーと、ビジネスロジックレイヤー、データアクセスレイヤー[ストアドプロシージャおよびストアードプロシージャと通信するクラス/メソッド]で構成されるモデルを使用しています。 ビジネスレイヤー以上では、ほとんどの目的で、Editはオブジェクトの作成とオブジェクトの編集の両方を表すことができるようです。これは、「保存」メソッドを定義するリポジトリ設計パターンとよく一致します。IDが0の場合はストアドプロシージャをチェックインし、0の場合は新しいオブジェクトを作成します。それ以外の場合は、カテゴリIDが1に一致するため、既存のオブジェクトを更新できます。 議論の第一のポイントは、作成を含む編集をDALレイヤーを超えて作成と編集の別々の部分に分割することが最も理にかなっている場合です。 明らかな例をルートとして示すことができます: 作成 - のhttpを:// someurl / somearea /編集/ 0 編集 - のhttp:// someurl / somearea /編集/ 254 対 作成 - のhttp:// someurl / somearea /作成 編集 - のhttp:// someurl / somearea /編集/ 254 これに関して確立された標準やベストプラクティスはありますか? 私はこれが小さな詳細であることを知っていますが、ロジスティック的に重要だと思います。

2
ASP.NET MVCサイトをモジュール化する方法
ASP.NET MVC 4を使用して従業員イントラネットシステムを構築する計画段階にあります。このサイトは、メッセージング、給与の変更など、異なる機能を提供する個別の「モジュール」で構成されています。 。これらのモジュールをコンパイル時に有効または無効にできるようにしたいと思います。ホームページには、ロードされた各モジュールにリンクするナビゲーションが表示されます。 これまでは簡単ですが、ナビゲーション機能がモジュールについて事前に知る必要はありません。言い換えれば、モジュールを動的に検出できるようにします。新しいモジュールのコードを記述し、ソースの他の場所でコードを変更せずにナビゲーションバーにリンクを追加できるようにしたいのです。各モジュールには、ナビゲーションバーに自分自身を登録する何らかの方法が必要です。さらに重要なことですが、これは、ロードされた各モジュールに対して行う必要があります。 MVCのエリアはサイトのレイアウトが事前にわかっている場合のために設計されているため、MVCのエリアを使用することはできません。MEFは適切であると思われますが、MEFとMVCを組み合わせることに成功した人はいませんでした。MEFは実際にここに行く方法ですか、それとも私が必要なことを達成するためのより良い方法がありますか?

3
ASP.NET MVCとREST API + Webページの使用のためのWCF
プログラムによるサービス指向の使用と人間の相互作用の議論は明確だと思います。 しかし、プログラムAPIと同じAPIで接続されたデータを使用するWebサイトの両方を使用するアプリケーションを作成する場合、ASP.NETのみを使用する方が有利でしょうか? ASP.NETとWCFを統合して同じアプリケーションで動作させるのはどれくらい簡単ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.