私はこのウェブサイトを最近見つけたことをとてもうれしく思っています。私はここから多くを学びました。
私は中国出身です。私の英語はあまり良くありません。しかし、私は何を言いたいのか自分自身を表現しようとします。永続性の無知を実装するには、集約子をパブリックプロパティとして公開する必要がありますか?
最近、私はドメイン駆動型設計について学び始めました。私は非常に興味があります。私はDDDを使ってフォーラムのウェブサイトを開発する予定です。
ここからスレッドをたくさん読んだあと、永続性の無知が良い方法であることを理解しました。
現在、私は長い間、何を考えているのかという2つの質問があります。
- ドメインオブジェクトはリポジトリと対話してデータを取得/保存する必要がありますか?
- ドメインオブジェクトがリポジトリを使用しない場合、どのドメインオブジェクトが新規/変更/削除されたかをInfrastructureレイヤ(作業ユニットなど)はどのように知っていますか?
2番目の質問です。サンプルコードがあります: は、私は、ユーザーのクラスがあるとします。上記のUserクラスに基づいて
public class User
{
public Guid Id { get; set; }
public string UserName { get; set; }
public string NickName { get; set; }
/// <summary>
/// A Roles collection which represents the current user's owned roles.
/// But here i don't want to use the public property to expose it.
/// Instead, i use the below methods to implement.
/// </summary>
//public IList<Role> Roles { get; set; }
private List<Role> roles = new List<Role>();
public IList<Role> GetRoles()
{
return roles;
}
public void AddRole(Role role)
{
roles.Add(role);
}
public void RemoveRole(Role role)
{
roles.Remove(role);
}
}
、私はIUserRepositoryからユーザーを取得し、そのための役割を追加したとします。この場合
IUserRepository userRepository;
User user = userRepository.Get(Guid.NewGuid());
user.AddRole(new Role() { Name = "Administrator" });
、私は仕事のリポジトリまたは単位は、ユーザーが新しい役割を持っていることを知ることができないのか分からないのですか?
実際の永続性の無知ORMフレームワークはPOCOをサポートする必要があり、変更はPOCO自体で発生し、永続性フレームワークは自動的に知っているはずです。上記の例のようにメソッド(AddRole、RemoveRole)を使ってオブジェクトの状態を変更しても、
ロールプロパティを使用すると、多くのORMが自動的に変更を永続化できることがわかりますが、パフォーマンス上の理由からこの方法が嫌いです。
誰でも私にこれについていくつかのアイデアを教えてください。ありがとう。
これはこのサイトの私の最初の質問です。私は英語が理解できることを願っています。
すべての回答は非常に高く評価されます。