そこにいるドメイン駆動開発の専門家へ...
私はDDDの概念を本当に理解しようとしています。これまでのところ、ドメイン駆動型ではなくデータ駆動型になるようにモデルを設計してきました。DDD に関する記事をいくつか読んだことがありますが、特に大規模なアプリケーションの場合は非常に興味深いと思いました。だから私は自分のモデルをまさにそれを行うように調整しようとしています.
私は、すべての顧客アカウントを無効にするメソッド FreezeAccounts を公開する顧客エンティティを言いました。この方法は、データ アクセスには関係ありません (持続性無視ルールに基づく)。各顧客アカウント (オンデマンドで読み込まれる) のフラグを更新し、変更をデータベースに保存します。このモデルに基づいてそれは正しいですか?DDD では、テーブル エンティティごとにクラスが 1 つだけであるとは限らないことを読みました。この機能は別のクラスにする必要がありますか? サンプルコードは次のとおりです。
public class Customer : ICustomer, ICustomerAction
{
#region Initialization
public Customer()
{
}
internal Customer(ICustomer view)
{
this.CustomerId = view.CustomerId;
this.Name = view.Name;
this.Email = view.Email;
this.IsActive = view.IsActive;
}
#endregion
#region Instances
private AccountCollection _accounts;
#endregion
#region Properties
#region ICustomer
public int CustomerId { get; private set; }
public string Name { get; set; }
public string Email { get; set; }
#endregion
#region Derived
public AccountCollection Accounts
{
get
{
if (_accounts == null)
_accounts = Account.GetListByCustomerId(CustomerId);
return _accounts;
}
}
#endregion
#endregion
#region Methods
#region CRUD
// Data Access Object accepts interface ICustomer
internal void Update()
{
CustomerDb.Update(this);
}
#endregion
#region ICustomerAction
// Exposed business Persistence Ignorance action
internal void FreezeAccounts()
{
foreach (Account account in this.Accounts)
{
account.IsEnabled = false;
account.Update();
}
}
#endregion
#endregion
}