这更像是一个架构/最佳实践问题,所以请随意添加您的两分钱。我知道我在标题中声明了状态,但这适用于对象的任何基本属性。我认为下面的帐户示例将有助于证明我的问题比状态更好。
这是一个示例 Account 对象:
public class Account
{
private IList<Transaction> _transactions;
public AddTransaction(trans as Transaction)
{
_transaction.add(trans)
}
}
现在假设我想开始记录每次使用此对象添加事务时的历史记录。
public class AccountHistory
{
private DateTime _historyDate;
private String _details;
public AccountHistory(string details)
{
_historyDate = DateTime.Now;
_details = details;
}
}
在这个级别上,我通常会向帐户对象添加一组历史事件,并添加一行代码在 AddTransaction() 方法中创建一个历史事件,如下所示
public AddTransaction(trans as Transaction)
{
_transaction.add(trans);
**_historyEvents.add(new AccountHistory("Transaction Added: " + trans.ToString());**
}
现在下一部分是问题开始出现的地方。假设我要进行批量发布,并且我想保留在此批量发布中更改了哪些帐户的记录,以用于报告之类的事情,或者我以后需要撤消它。所以我会创建一个这样的对象。
public class HistoryGroup()
{
private IList<AccountHistory> _events;
}
从这里我看到了一些不同的选项来处理这个问题,因为上面的示例代码无法处理它。
1) 在 Service 类型对象中创建一个函数,该函数遍历调用 AddTransaction() 方法的帐户列表,并创建与 HistoryGroup 相关联的历史记录
public void AddTransactions(IList<Account> accounts, Transaction trans)
{
HistoryGroup history = new HistoryGroup();
for (int x=0;x <=accounts.Count - 1; x++)
{
accounts(x).AddTransaction(trans);
history.AddEvent(new AccountHistory("Added Transaction: " + trans.ToString();
}
}
2) 将某种类型的 HistoryManager 对象与要添加的事务一起传递到 AddTransaction 方法中。然后该函数可以使用历史管理器来创建记录。
好的,这篇文章足够长了。如果我不够清楚,请告诉我。感谢您的输入。