小编wdr*_*one的帖子

C# - 当一个对象改变状态时,是否应该负责创建一个历史对象?

这是一个架构/最佳实践问题,而不是其他任何问题,所以请随意添加你的两美分.我知道我在标题中声明了状态,但这适用于对象的任何基本属性.我认为下面的帐户示例将有助于证明我的问题比状态好一点.

这是一个示例Account对象:

public class Account
{
   private IList<Transaction> _transactions;

   public AddTransaction(trans as Transaction)
   {
      _transaction.add(trans)
   }
}
Run Code Online (Sandbox Code Playgroud)

现在假设我想开始记录每次使用此对象添加事务时的历史记录.

public class AccountHistory
{
   private DateTime _historyDate;
   private String _details;

   public AccountHistory(string details)
   {
      _historyDate = DateTime.Now;
      _details = details;
   }
}
Run Code Online (Sandbox Code Playgroud)

在这个级别,我通常做的是将一组历史事件添加到帐户对象,并添加一行代码以在AddTransaction()方法内创建历史事件,如下所示

public AddTransaction(trans as Transaction)
{
   _transaction.add(trans);
   **_historyEvents.add(new AccountHistory("Transaction Added: " + trans.ToString());**
}
Run Code Online (Sandbox Code Playgroud)

现在下一部分是问题开始出现的地方.假设我想进行批量发布,并且我希望保留一份记录,说明在此批量发布中哪些帐户已更改为报表,或者我是否需要稍后撤消.所以我会创建一个像这样的对象.

public class HistoryGroup()
{
   private IList<AccountHistory> _events;
}
Run Code Online (Sandbox Code Playgroud)

从这里我看到一些不同的选项来处理这个,因为上面的示例代码无法处理它.

1)在Service类型对象中创建一个函数,该对象循环调用AddTransaction()方法的帐户列表,并创建与HistoryGroup关联的历史记录

 public void AddTransactions(IList<Account> accounts, Transaction trans)
    {
       HistoryGroup history = new HistoryGroup(); 
       for (int x=0;x …
Run Code Online (Sandbox Code Playgroud)

c# architecture oop poco chain-of-responsibility

4
推荐指数
1
解决办法
1753
查看次数

标签 统计

architecture ×1

c# ×1

chain-of-responsibility ×1

oop ×1

poco ×1