鑑於比如說,一個銀行帳戶結構..存儲庫模式繼續 - 類方法或存儲庫方法?
class Account
{
virtual int Id { get; set; }
virtual int Balance { get; set; }
}
我想跟蹤完成交易,所以說一個簡單的類...
class Transaction
{
virtual int Id { get; set; }
virtual Account Account { get; set; }
virtual DateTime Timestamp { get; set; }
virtual int Amount { get; set; }
}
假設我想跟蹤交易完成了,這是更聰明的方法嗎?
interface IAccountRepository
{
void Deposit(int account, int amount)
}
或...
class Account
{
void Deposit(int amount)
{
// this one is easier, but then I have to repeat
// myself because I need to store the Transaction
// in the database too.
}
}
Repository模式似乎是最完整的,因爲它有一個手柄,工作/ ORM /會話的單元(使用NHibernate) - 但使用類級別的方法似乎更直接,因爲它更符合標準的面向對象的原則'對此對象執行此操作'。
我的問題是,如果我想記錄事務,那麼我必須確保它們也保存爲數據庫對象。走上第二條路線,採用班級水平的方法,我不能在Account
班裏這樣做,所以我最終不得不重複自己。
我的另一種選擇是另一個抽象..
interface ITransactionRepository
{
void CreateTransaction(int account, int amount);
}
的正常工作,這樣的包A和B在一起,因爲我會發現該帳戶在TransactionRepository
,然後執行它Deposit
方法,但它不真的不覺得這是一個明智的做法。我不知道爲什麼,我的直覺告訴我這不是最好的選擇。
這不僅適用於這一套課程,當然 - 這是一個設計原則。如果你有任何想法,我想看看更多的資深程序員會在這種情況下做什麼。