これは何よりもアーキテクチャ/ベスト プラクティスに関する質問なので、遠慮なく 2 セント追加してください。タイトルにステータスを記載したことは知っていますが、これはオブジェクトの基本的なプロパティに当てはまります。以下のアカウントの例は、私の質問をステータスよりも少しよく示すのに役立つと思います.
サンプルの 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) 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 メソッドに渡します。次に、関数は履歴マネージャーを使用してレコードを作成できます。
わかりました、この投稿は十分に長いです。私が十分に明確でない場合は、私に知らせてください。ご入力いただきありがとうございます。