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