2

アプリケーションには 2 つのプロジェクトがあります。

  1. Web UI プロジェクト (aspx ページ)。
  2. WCF プロジェクト。

これらのセクションは両方とも、同じ BL および DAL レイヤーをさらに呼び出します。アーキテクチャは次のとおりです。

ウェブ プロジェクト:

ここに画像の説明を入力

WCF プロジェクト (REST を使用します):

ここに画像の説明を入力

上記のビジネス オブジェクトと DTO の例:

public class User
{
    public int UserID { get; set; }
    public string UserName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class UserDTO
{
    public int UserID { get; set; }
    public string UserName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

WCF REST レイヤー用に別のデータ転送オブジェクト UserDTO.cs を用意する価値はありますか? Web プロジェクト、BL、DAL で使用されているビジネス オブジェクトとして User.cs が既にあります。さらに、WCF REST レイヤーでは、入力 prams だけに DTO を使用しています。

  public MyResponse CreateUser(User user)
        {

このメソッドから、マッパーを介して DTO をビジネス オブジェクト (つまり、UserDTO から User.cs オブジェクト) に変換し、DTO ではなくビジネス オブジェクトのみを受け入れる BL レイヤーに渡します。つまり、WCF がビジネス オブジェクトを BL および DAL に渡す時点から、UI がビジネス オブジェクトを BL および DAL 層に渡すのとまったく同じように動作します。

2 つの個別のデータ転送オブジェクトを使用すると、実質的に利点がありますか? この質問をしたのは、IMO は冗長であり、Web プロジェクトと WCF プロジェクトの両方に 1 つのデータ転送オブジェクト、つまりビジネス オブジェクトを使用する必要があるためです。

4

1 に答える 1

3

私にとっては、はい、常にこれを行う価値がありますが、AJAX 呼び出しにオブジェクトを使用している場合に限ります。

このシナリオでは、次のようになります。

public class User
{
    public int UserID { get; set; }
    public string UserName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class UserDTO
{ 
    // Hide the UserID
    public string UserName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

ユーザーが AJAX 応答を表示してユーザー ID を取得できるようにしたいですか? おそらくそうではありません。これが、別の DTO を使用する理由です。また、クライアントとサーバー間のデータ転送に、完全で潜在的に重いオブジェクトではなく、軽量オブジェクトのみを使用していることを確認します。

もちろん、これを行うこともできます:

var query = GetYourUsers();

return query.Select(a => new { a.UserName, a.FirstName, a.LastName });

これはより軽量で、User オブジェクトを使用してクライアント側からサーバー側にデータを送信し、 Value Injectorなどのツールを使用して、クライアントから送信された値をサーバー上の完全なオブジェクトに注入できます。

于 2013-04-15T09:53:30.720 に答える