..저장소 패턴 계속 - 클래스 메소드 또는 저장소 메소드? 은행 계좌, 말의 구조를 감안할 때
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.
}
}
리포지토리 패턴은 일/ORM/세션 단위에 대한 핸들을해야하기 때문에, 가장 포괄적 인 것 같다 (nHibernate 수 사용) -하지만 사용 클래스 레벨 방법은 '이 객체에 이것을 수행하십시오'라는 표준 객체 지향 원칙에 더 가깝기 때문에보다 직관적 인 것처럼 보입니다.
제 질문은 트랜잭션을 기록하려면 데이터베이스 객체로도 저장해야한다는 것입니다. 클래스 레벨 메소드를 사용하여 두 번째 경로로 이동하면 Account
클래스 내부에서이를 수행 할 수 없으므로 결국 반복해야합니다.
내 다른 옵션은 내가 TransactionRepository
에 계정을 찾은 다음 그 Deposit
방법을 수행하기 때문에
interface ITransactionRepository
{
void CreateTransaction(int account, int amount);
}
, 그것은 종류의 함께 A와 B를 래핑 ... 또 다른 추상화이지만, 아무튼 이것이 현명한 접근 인 것처럼 정말로 느껴지지 않습니다. 왜 그런지 모르겠지만, 내 직감은 그게 최선의 방법이 아니라고 말합니다.
이것은 물론 하나 이상의 클래스 세트에 적용됩니다. 이는 디자인의 원칙입니다. 나는 당신이 어떤 생각을 가지고 있다면 더 많은 베테랑 프로그래머가이 상황에서 무엇을 할 것인지보고 싶었다.