7

データアクセス層またはその他のソースにデータを送信するには、次の2つの方法があります。

アプローチ1:リポジトリの方法:

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

public class UserRepository
{
    public static void Add(User user)
    {
        // Add user logic
    }
    public static void Delete(User user)
    {
        // Delete user logic
    }
    public static User Get(int userid)
    {
        // Get user logic
    }
}

使用法:

var user = new User
    {
        FirstName = "FirstName",
        LastName = "LastName",
        Age = 20
    };
UserRepository.Add(user);

上記で、Userクラスを単純にしたことがわかりました。動作はありません。動作は別のクラスUserRepositoryに追加されます。

2番目のアプローチ:User.csでのみ追加/削除/取得などを維持する:

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

        public void Add()
        {
            // Add user logic
        }
        public void Delete()
        {
            // Delete user logic
        }
        public User Get()
        {
            // Get user logic
        }
    }

使用法:

var user = new User
    {
        FirstName = "FirstName",
        LastName = "LastName",
        Age = 20
    };
user.Add();

上記では、User.csでのみ動作を維持しています。2つのアプローチはどちらも、ユーザーの追加、削除などの目的を果たします。教えてもらえますか

  1. どちらのアプローチが良いですか?

  2. 上記の2つのアプローチのどちらを選択する必要があるかをいつ決定するのですか?

  3. FindAllUsersFindUserByUserIdDeleteUserByUserIdなどの他のメソッドも追加する必要がある場合、どちらのアプローチを選択する必要がありますか?

4

3 に答える 3

11

最初のアプローチは、関心の分離、つまりドメインエンティティのユーザーとデータベースへの永続性を分離するため、はるかに優れています。

ドメイン駆動設計でよく言われる最も重要なことの1つは、「永続性の無知」です。永続性の無知の利点は何ですか?を参照してください。

リポジトリパターンを使用することで、エンティティを保存/取得する方法がエンティティコードから除外されます。つまり、ドメインがそれをよりクリーンに保ち、本質的に永続性の無知を実現します(またはとにかくそれに向かって長い道のりを進みます)

だから答え:

  1. リポジトリアプローチははるかに優れています
  2. 常にオプション1を選択してください
  3. これらのメソッドをリポジトリクラスに追加します
于 2012-08-28T10:59:46.563 に答える
1

それは、実行する必要がある作業とアプリのサイズに厳密に依存します。高速でスケーラビリティの低いものを開発したい場合は、n 層タイプのアーキテクチャを使用する必要はありません (データ インタラクションをデータ アクセス レイヤーに分離することを意味します)。

ただし、拡張性が高く、編集可能で、変更可能である必要があり、将来の機能が追加されることがわかっているものを探している場合は、作業をより簡単にするために、明確にコンサーンを分離する必要があります。

最後に、私が言ったように、それぞれのアプローチには目的があります。

乾杯。

于 2012-08-28T11:01:26.937 に答える