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

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

14
バックエンドをAPIとして作成する必要がありますか?
今日、MVCアプリケーションについて熱く議論しました。MVC(ASP.NET)で記述されたWebサイトがあり、通常はビューで何かを実行するパターンに従います->コントローラーを押す->コントローラーがモデルを構築します(データを取得するマネージャーを呼び出し、モデルを構築しますコントローラのメソッド自体)->モデルが表示されます->すすぎと繰り返し。 彼は、私たちのコードが密結合しすぎていると言った。たとえば、デスクトップアプリケーションも必要な場合、既存のコードを使用することはできません。 彼が言った解決策とベストプラクティスは、APIを構築し、APIの上にWebサイトを構築し、デスクトップアプリケーション、モバイルアプリなどを構築することは非常に簡単です。 これは、さまざまな理由で私にとって悪い考えのようです。 とにかく、このプラクティスを議論するかもしれないグーグルで何も見つけられないようです。誰もが長所、短所、なぜそうすべきか、なぜそうすべきではないか、さらに読むべきかについての情報を持っていますか? 悪い考えだと思ういくつかの理由: バックエンドをAPIから実行するにはあまりにも抽象的です。あなたはそれをあまりにも柔軟にしようとしているので、それは管理不能な混乱になります。 MVCに組み込まれているものはすべて、役割や認証など、役に立たないようです。たとえば、[Authorize]属性とセキュリティ。独自にロールする必要があります。 すべてのAPI呼び出しにはセキュリティ情報が添付されている必要があり、トークンシステムなどを開発する必要があります。 プログラムが実行する機能ごとに、完全なAPI呼び出しを記述する必要があります。実装するほとんどすべてのメソッドは、APIから実行する必要があります。すべてのユーザーのGet / Update / Deleteに加えて、ユーザー名の更新、グループへのユーザーの追加など、他の各操作のバリアントがあり、それぞれが個別のAPIコールになります。 APIに関しては、インターフェイスや抽象クラスなどのあらゆる種類のツールが失われます。WCFのようなものには、インターフェイスに対する非常に乏しいサポートがあります。 ユーザーを作成するメソッド、または何らかのタスクを実行するメソッドがあります。50人のユーザーを作成する場合は、50回呼び出すだけです。このメソッドをAPIとして実行することを決定すると、ローカルWebサーバーは名前付きパイプに接続でき、問題はありません-デスクトップクライアントもヒットできますが、突然、ユーザーの一括作成にはインターネット上でAPIを50回ハンマーする必要があります。良くない。したがって、バルクメソッドを作成する必要がありますが、実際にはデスクトップクライアント用に作成するだけです。この方法では、a)統合するものに基づいてAPIを変更する必要があり、直接統合することはできません。b)余分な関数を作成するためにより多くの作業を行う必要があります。 ヤグニ。たとえば、1つのWebアプリケーションと1つのWindowsアプリケーションなど、まったく同じように機能する2つのアプリケーションを作成することを特に計画しているのでなければ、膨大な量の開発作業が必要になります。 エンドツーエンドでステップスルーできない場合、デバッグははるかに困難になります。 多くのやり取りを必要とする独立した操作がたくさんあります。たとえば、いくつかのコードは現在のユーザーを取得し、ユーザーが管理者ロールにあることを確認し、ユーザーが属する会社を取得し、他のメンバーのリストを取得し、それらをすべて送信しますEメール。そのためには、多くのAPI呼び出しが必要になるか、必要な特定のタスクに特注のメソッドを記述する必要があります。特注のメソッドの唯一の利点は速度ですが、欠点は柔軟性に欠けることです。 おそらく、これらの理由のいくつかが私の頭上にあります。 2つの同一のアプリケーションが本当に必要な場合を除き、私には好感が持てますが、それだけの価値はありません。このように構築されたASP.NETアプリケーションを見たことがありません。2つの個別のアプリケーション(APIとコード)を記述し、両方をバージョン管理する必要があります(ユーザーページに新しいフィールドが追加された場合、 dは、APIと消費コードを同時に更新して悪影響を与えないようにするか、堅牢性を維持するために多くの追加作業を行う必要があります)。 編集:いくつかの素晴らしい反応、本当にこれが今何を意味するのか良いアイデアを得るために始めています。それでは、私の質問を拡張するために、このAPI構造に従うようにMVCアプリをどのように構成しますか? たとえば、ユーザーに関する情報を表示するWebサイトがあります。MVCには、次のものがあります。 ビュー-UserViewModelコントローラーを表示する(CS)HTMLページ-GetUser()を呼び出し、GetUserメソッドを持つビューマネージャークラス(APIの一種)に渡すUserViewModelを作成します。 コントローラーはGetUser()を実行しますが、デスクトップアプリも必要です。これは、GetUserが何らかのAPIを介して公開される必要があることを意味します。TCP接続、WCF、またはおそらくRemotingが必要になる場合があります。永続的な接続が不安定なため、RESTfulなモバイルアプリも必要です。 それでは、GetUser()メソッドがあり、コードが実行するWCF Webサービスごとに、各APIを作成しますreturn new UserManager().GetUser()か?そして、同じことを行うMVC 4 Web APIメソッド?MVCコントローラーメソッドでGetUserを直接呼び出し続けていますか? または、3つすべて(Web API RESTサービス)で機能するソリューションを選択し、その上にすべてを構築して、3つすべてのアプリがAPI呼び出し(ローカルコンピューターに対してmvc呼び出し)を行うようにします。 そして、これは単なる理論上の完璧なシナリオですか?特に、RESTfulな方法で操作を行えるように開発する必要がある場合、この方法で開発する際に大きなオーバーヘッドが発生することがあります。これのいくつかは返信で取り上げられていると思います。 編集2:より多くのものを読んだ後、私はそれを説明するかもしれないと思うコメントを下に入れました。この質問は、私が考えるちょっとしたトリックの質問です。APIとしてバックエンドを書くと、すべて(mvcアプリ、デスクトップアプリ、モバイルアプリ)が何かを行うために呼び出す単一のWebサービスがあるべきだと思って混乱しました。 私が思いついた結論は、ビジネスロジックレイヤーが正しく分離されていることを確認することです。コードを見て、すでにこれを行っています。コントローラーはGetUser()マネージャーを呼び出し、それからビューモデルを作成してビューでレンダリングします。実際、ビジネスロジック層は APIです。ただし、デスクトップアプリから呼び出したい場合は、WCFサービスのようなものを記述して、呼び出しを容易にする必要があります。GetUser()コードを含むWCFメソッドを呼び出すだけでもreturn MyBusinessLayer.GetUser()十分です。したがって、APIはビジネスロジックであり、WCF / Web APIなどは、外部アプリケーションに呼び出しを許可するためのほんの一握りのコードです。 そのため、必要なものに応じてビジネスロジックレイヤーをさまざまなAPIでラップする必要があり、他のアプリで実行したい操作ごとにAPIメソッドを記述する必要があるというオーバーヘッドがあります。認証を行う方法を整理しますが、ほとんどの部分で同じです。ビジネスロジックを別のプロジェクト(クラスライブラリ)に固定すれば、おそらく問題はありません! この解釈が正しいことを願っています。それが生成したすべての議論/コメントをありがとう。


19
MVCよりもASP.NET WebFormsを優先する場合
マイクロソフトが言ったことを知っています ASP.NET MVCはWebFormsの代替ではありません。 また、WebFormsはMVCよりも開発が速いと言う開発者もいます。しかし、コーディングの速度はテクノロジーの快適レベルにまで下がると思いますので、そのような答えは必要ありません。 ASP.NET MVCを使用すると、開発者はアプリケーションをより細かく制御できるため、WebFormsが時代遅れと見なされないのはなぜですか?あるいは、新しい開発のためにMVCよりもWebFormを優先すべき場合はいつですか?

6
ステートフルとステートレスの違いは何ですか?
MVCに関する書籍とドキュメントは、ステートフルおよびステートレスの用語を使用することについての山に過ぎません。正直に言うと、私はその考え、本が何を言っているのかをつかむことができません。HTTPがステートレスであり、ASP.NET MVCでMicrosoftがそれに従っていることを伝えるだけでなく、いずれかの状態を理解するための例を示していません。ステートフルなものとステートフルな理由を理解できないため、基本的な知識が不足していますか? ボタンやテキストボックスなどのコントロールについて説明する簡単で短い例は、私が思うに理解を簡単にすることができます。

1
なぜ.Netの世界は、静的に型付けされた代替の代わりに魔法の文字列を受け入れるように見えるのですか?
だから、私は.Netで働いています。.Netでオープンソースプロジェクトを作成します。それに関する私の最大の問題の1つは、.Netではなく、その周辺のコミュニティとフレームワークに必要なことです。魔法のネーミングスキームと文字列は、すべてを行うための最良の方法として扱われているようです。大胆な発言ですが、見てください: ASP.Net MVC: Hello world route: routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); これが意味することは、ASP.Net MVCが何らかの形でHomeControllerコードを検索するということです。どういうわけか、それの新しいインスタンスを作成してから、Index 明らかidに何らかのパラメーターで関数を呼び出します。そして、次のようなものがあります: RenderView("Categories", categories); ...or.. ViewData["Foobar"]="meh"; そして、XAMLにも同様のことがあります。DataContextオブジェクトとして扱われ、希望するタイプに解決されることを期待し、祈らなければなりません。DependencyPropertiesは、マジックストリングとマジックネーミング規則を使用する必要があります。そして、このようなもの: MyData myDataObject = new MyData(DateTime.Now); Binding myBinding = new Binding("MyDataProperty"); …


2
ASP.NET MVC 3のカスタムエラー処理の最終的なガイドラインは何ですか?
ASP.NET MVC(この場合は3)でカスタムエラー処理を行うプロセスは、非常に軽視されているようです。ここで、ウェブ上で、さまざまなツール(エルマなど)のヘルプページのさまざまな質問と回答を読みましたが、完全な円になったのに、まだ最善の解決策がないと感じています。あなたの助けを借りて、おそらくエラー処理のための新しい標準的なアプローチを設定できます。私は物事をシンプルに保ち、これを過剰に設計したくないのです。 私の目標は次のとおりです。 サーバーエラー/例外の場合: devでデバッグ情報を表示する 本番環境でわかりやすいエラーページを表示する エラーを記録し、運用環境の管理者にメールで送信します 500 HTTPステータスコードを返す 404 Not Foundエラーの場合: わかりやすいエラーページを表示する エラーを記録し、運用環境の管理者にメールで送信します 404 HTTPステータスコードを返す ASP.NET MVCでこれらの目標を達成する方法はありますか?

2
AngularとASP.NET MVC / Web APIを混合していますか?
私はASP.NET MVC / Web APIを使用してきましたが、現在、Angularを使用し始めていますが、それらを混合する適切な方法については明確ではありません。 Angularを使用しても、MVCサーバー側の概念にはまだ価値がありますか?または、厳密にWeb APIを使用して、角度付きHTTP呼び出しのデータを取得する必要がありますか? VSテンプレートに不要なものがたくさん追加されている場合に使用する必要のある開始点はもっと少なくなっていますか? サーバー側=純粋なデータとクライアント側=純粋なHTML処理の厳密な分割のアイデアが好きです。

7
ASP.NET MVCでできることとRuby on Railsでできないことは何ですか?[閉まっている]
ASP.NET MVCとRailsの使用領域は似ており、同じアーキテクチャを中心に構築されています。どちらのフレームワークも比較的新しく、オープンソースです。 それで、私が知りたいRailsプログラマーとして、ASP.NET MVCができることとRuby on Railsができないこと、そしてその逆のことを知りたいですか?

7
なぜ誰もがコントローラーを1つのフォルダーに入れ、ビューを別のフォルダーに入れるのですか?
私は、aspから曲げてmvcフレームワーク、asp.net mvcまたはnancyに移行する準備をしています。どこに行っても、コントローラー/モジュール用のフォルダーとビュー用のフォルダーが表示されます。これは単にタイプごとに物事を片付けるパブロフの反射ですか、それともより深い知恵が働いていますか?一緒に開く可能性のあるファイルを一緒に保存する概念実証プロジェクトが少しありますが、かなり快適です。これらのファイルは相互に呼び出すことも多いため、短く、脆弱性の低い相対リンクで呼び出すことができます。フォルダーパスがURLパスに自動的に対応しなくなったため、このパターンはmvcによってチャレンジされ、asp.net mvcでは、プロジェクトテンプレートとルーティングがviews \ controllers \ schismを強制します。 このMicrosoftページでは、エリアの概念を紹介しています。これは、この人為的な分離が原因で、扱いにくい大型アプリがどのようになるかを認めたものとして読むことができます。 人々は「懸念の分離」に反対しますが、懸念の分離はすでに別々のソースファイルを持つことで達成されています。密結合されたこれらのソースファイルを取得し、フォルダー構造の反対側に送信することから、具体的なゲインはありませんか? 他の誰かがこれと戦っていますか?任意のヒント?
36 mvc  asp.net-mvc 

2
ASP.NET MVCでのデータアクセスの分離
私は、MVCでの最初の本当のクラックで、業界標準とベストプラクティスに従っていることを確認したいと思います。この場合、C#を使用したASP.NET MVCです。 モデルにEntity Framework 4.1を使用し、コードファーストオブジェクト(データベースが既に存在する)を使用するため、データベースからデータを取得するためのDBContextオブジェクトが存在します。 asp.net Webサイトで行ったデモでは、コントローラーにデータアクセスコードが含まれています。これは、特にDRY(自分自身を繰り返さないでください)プラクティスに従う場合、私には正しくないようです。 たとえば、公共図書館で使用するWebアプリケーションを作成しており、カタログ内の書籍を作成、更新、削除するためのコントローラーがあるとします。 アクションのいくつかはISBNを取得し、「Book」オブジェクトを返す必要がある場合があります(これはおそらく100%有効なコードではないことに注意してください)。 public class BookController : Controller { LibraryDBContext _db = new LibraryDBContext(); public ActionResult Details(String ISBNtoGet) { Book currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet); return View(currentBook); } public ActionResult Edit(String ISBNtoGet) { Book currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet); return …

3
ASP.NET MVCでコントローラーを単体テストすることで実際の価値はありますか?
この質問がしばらくの間私を悩ませていたので、この質問がいくつかの興味深い答えを与えることを願っています。 ASP.NET MVCでコントローラーを単体テストすることで実際の価値はありますか? それが意味することは、ほとんどの場合(そして私は天才ではありません)、私のコントローラーメソッドは、そのような最も複雑なものであってもです: public ActionResult Create(MyModel model) { // start error list var errors = new List<string>(); // check model state based on data annotations if(ModelState.IsValid) { // call a service method if(this._myService.CreateNew(model, Request.UserHostAddress, ref errors)) { // all is well, data is saved, // so tell the user …

4
Web ApiにWSDLタイプのサポートがないのはなぜですか?
したがって、私は.Net WebApiを使い始めたばかりで、すぐに気づいたことの1つは、APIの外観と消費方法(各アクションからのリクエスト/レスポンス)を定義する契約がないことです。これは通常の形式ですWCF / SoapのWSDL。 これは非常に価値があり、APIの利用者の生活をずっと楽にするものであるように思えます。 存在しない理由はありますか?知らないプログラミングのパラダイムや原則はありますか?作成する方法はありますか?

5
Entity Frameworkを使用する必要がありますか?
現在、次のスタックがあります。 VS 2005 Webフォーム SQL Server 2005 IIS 6 これへの移行を計画しています: VS 2010 MVCとWebフォーム SQL Server 2008 IIS 7 私の質問は、VS 2010でMVCに移行するとき、Entity Framework(または別のORM)、micro ORM(Massiveなど)、または単なるSQLを使用する必要がありますか? VS 2010について読んだすべてのチュートリアルは、データトランザクションにEntity Frameworkを使用することを目的としていますが、それは近い将来(5年以上)続くでしょうか? 問題があれば、クライアントのアプリケーションには10〜1,000人のアクティブユーザーを含めることができます。

14
プログラミング全般に関するアドバイスを求めている初心者[非公開]
プログラミングが苦手だった時代に戻って覚えておく必要があります... (ソフトウェア開発者として)私の新しい仕事に2か月ほど付き、試用期間を過ぎました。プログラミング経験がほとんどなく(C ++のみ)、現在asp.net MVCおよびsilverlightを使用しています。そのため、同社が取り組んでいるウェブサイトがあり、私はそれを改善し、バグを取り除くなどの努力に参加しています。 問題は-既に作成されているシステム/ウェブサイトについて、Visual Studioを介して学習することです。いつも圧倒され、この行のどの部分を調べるべきか分からず、全体像をつかむのに苦労します。Visual Studio自体は、asp.netフレームワークは言うまでもなく、把握するのが難しいと感じています。 私の同僚は私よりも多くの経験を持っているので、彼らはすべての良い仕事を得ているという印象を受けます。つまり、彼らはより多くのことを学んでいます。私は士気を失い、何も言えないほど怖がっています。 私は愚かではありません、私は多くの基本的なプログラミングの概念を読んで実践しました...私はこのいまいましいフレームワークをただ怖がっています。私はそれを見て、ただ麻痺していると感じます。 その結果、ベテランの老人に質問をし続け、彼はいらいらするようになり、私を助けて時間を無駄にしないように、簡単/無知/非プログラミングの仕事を与えたいと思っています。それから私は何かを理解できないとき、私はまだ彼に尋ねるべきかどうかをaboutし、それが時間の無駄になるかどうかを決定しようとしています。 私は物事をゆっくりと拾うような人ですが、細部にまで気を配っています。前者は私が無能に見えるようにしていると思います。 私がどこから来たのか誰でも助けて何か言ってください....私は数ヶ月か何かで仕事を失うのが怖い...

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