6

ASP.NET の MVC と 3 層アーキテクチャの違いを見つけようとしています。以前のいくつかの質問といくつかのページを参照しましたが、明確な答えを見つけることができました。
MVC の実装に関する msdn ページは次のとおりです: http://msdn.microsoft.com/en-us/library/ff647462.aspx

考えてみてください、私はこのコードを持っています:
Single page aspx UI and code as well

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html>
   <head>
      <title>start</title>
      <script language="c#" runat="server">
         void Page_Load(object sender, System.EventArgs e)
         {
            String selectCmd = "select * from Recording";

            SqlConnection myConnection = 
               new SqlConnection(
                  "server=(local);database=recordings;Trusted_Connection=yes");
            SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, 
               myConnection);

            DataSet ds = new DataSet();
            myCommand.Fill(ds, "Recording");

            recordingSelect.DataSource = ds;
            recordingSelect.DataTextField = "title";
            recordingSelect.DataValueField = "id";
            recordingSelect.DataBind();
         }
       </script>
   </head>
   <body>
         <asp:dropdownlist id="recordingSelect" runat="server" />
         <asp:button runat="server" text="Submit" OnClick="SubmitBtn_Click" />
      </form>
   </body>
</html>


ここで、 ---- ビューとコード ビハインドが分離された ---- .aspx用に異なるファイルがあるとします。

<%@ Page language="c#" Codebehind="Solution.aspx.cs" 
   AutoEventWireup="false" Inherits="Solution" %>
<html>
         <asp:dropdownlist id="recordingSelect" runat="server" />
      </form>
   </body>
</html>

.aspx.cs

using System;
using System.Data;
using System.Data.SqlClient;
public class Solution : System.Web.UI.Page
{
   private void Page_Load(object sender, System.EventArgs e)
   {
      if(!IsPostBack)
      {
         String selectCmd = "select * from Recording";
         SqlConnection myConnection = 
            new SqlConnection(
               "server=(local);database=recordings;Trusted_Connection=yes");
         SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);
         DataSet ds = new DataSet();
         myCommand.Fill(ds, "Recording");
         recordingSelect.DataSource = ds;
         recordingSelect.DataTextField = "title";
         recordingSelect.DataValueField = "id";
         recordingSelect.DataBind();
      }
   }
  1. 上記のクラスのmsdn ページ リンクを参照してControllerも、ビジネス ロジック (3 層アーキテクチャの中間層の場合と同様) とコントローラーの違いを識別できません。
  2. 3 層と MVC はまったく別のものですか? Visual Studio の ASP.NET アプリケーションは、MVC 形式のように既に分離されたファイルですか? これらに違いがない場合、どちらが好ましいスタイルですか?
  3. .aspx と .aspx.cs が既に分離されている場合、MVC フレームワークはどうなりますか?
4

3 に答える 3

6

私は実際にこれにしばらく苦労しましたが、それを正しく実装する方法にはさまざまな哲学があるため、これが自分の言葉で理解する方法であり、関係するさまざまなもの(モデル/ビュー/コントローラー/ビジネスロジック)間の関係をどのように理解するかです):

  • ビュー
    にはすべての Html / jQuery コードがありModel、コントローラーからのインスタンスの形式でデータを使用します
  • モデル
    ビューがレンダリングする必要がある情報を保持するクラス (製品のリストなど)
  • コントローラー
    • 彼らは着信要求を受け取ります
    • 実際のビジネスロジックコードを呼び出すために必要な準備(パラメータ抽出など)を行います。
    • 次に、ビジネス ロジック コードを呼び出して結果を取得します。
    • その後、結果を受け取り、UI が理解できるモデルに変換します。
  • ビジネス ロジック
    これは、データベースなどを呼び出す実際のビジネス ロジック コードです。私の目には、これは MVC 全体とは完全に分離されています。通常、これを別のアセンブリ (クラス ライブラリ) に配置して、MVC コードにまったく依存しないようにします。
    これにより、MVC への依存関係がないため、ビジネス ロジックのみの単体テストが非常に簡単になります。

ビジネスロジックが実際にコントローラーに入れられる他のアプローチを見てきましたが、私の目にはそれは目的に反しています。私たちは、MVC アプリケーションを適切な構造にするためではなく、単体テストをより適切に実行できるようにするために構築しています。

質問に戻りますが、ASP.NET 3 層アーキテクチャとどのように関連していますか。
基本的に、MVC Web アプリケーション全体は、プレゼンテーション層 (+ プレゼンテーション層をビジネス層と結び付ける) にすぎないと言うことができます。

他のレイヤーは、以前と同様に、プレゼンテーション レイヤーから分離され、独立したままです。

于 2012-03-17T11:39:36.017 に答える
5

MVC と 3 層はまったく別のものです。
どちらも 3 つの部分があるため、多くの人がこの 2 つを混同しています。

MVCUI パターンです:
ビュー: html と js のみを含みます (Web プロジェクトの場合)
コントローラー: UI (= ビュー) とバックエンド (= モデル) の間の一種のメディエーターです
モデル: これドメイン オブジェクトが存在する場所であり、ビジネスおよびデータ アクセス ロジックも同様です。

3 層は、アプリケーション全体に関係します。UI :ページの背後にあるコードだけでなく、html/js も含まれます。ここには、UI コードとビジネス レイヤーの呼び出し以外にロジック はまったくありません。ビジネス層: これは、計算、条件、検証などを配置する場所です。 つまり、アプリケーションの実際の動作です。ここにはデータ アクセスコードはありません。データ アクセス: ここでは、データベースと対話し、データをビジネス レイヤーに返します。他には何もありません。ビジネス層はそれをどうするかを知っている必要があります。





UI :ビュー
とコントローラ
ビジネス層: モデルの
一部 データ アクセス: モデルの一部
ドメイン オブジェクト: 操作しているオブジェクト (製品、注文、..) 別のレイヤーで。
これもモデルの一部です。

質問があれば撃ってください!

于 2012-03-17T13:59:10.070 に答える
0

ソフトウェアアーキテクチャ/設計における「レイヤー」と「層」の適切な比較については、こちらを参照してください

MVC パターンはすべて、関心の分離に関するものであり、プレゼンテーション レイヤー (ビュー) とビジネス ロジックを分離する必要があるという事実です。コードビハインドを使用すると、水を濁らせることが容易になります。新しい ASP.NET ビュー エンジン (Razor) にはコード ビハインド ファイルさえないことがわかります。

コントローラーのロジックを自動的にテストしたいときにさらに重要になる主な違いは、コントローラーが単なる古いクラスであることですが、CodeBehindはSystem.web.ui.pageから継承しているため、強く結び付けられています。 asp.netの内臓へ。

また、 http://ardalis.com/Codebehind-Files-in-ASP.NET-MVC-are-Evil および https://msmvps.com/blogs/luisabreu/archive/2008/09/19/codebehind-filesを参照してください。 -in-asp-net-mvc-are-not-evil.aspx

于 2012-03-17T11:20:17.660 に答える