2011-02-05 1 views
0

내 응용 프로그램 요구 사항 : 사용자가 텍스트 상자에 데이터를 입력 한 다음 텍스트 상자를 떠나는 것과 같이 속성이 변경된 경우 즉시 데이터베이스로 업데이트해야합니다.엔티티가 서비스 계층에 액세스하고 업데이트/저장 방법을 실행해야합니까?

MVVM 디자인 패턴이있는 WPF를 사용합니다. 모든 엔티티는 INotifyPropertyChanged을 구현합니다. 고객의 변화의 재산은 내가

Customer.cs 

customerService.UpdateCustomer(this); 

는 기업이 정말 자신을 업데이트해야 할 경우? 아니면 데이터베이스에 자체 업데이트를 유도합니까?

실체가 아닌 경우 다른 방법으로 즉각적인 업적을 수행 할 수 있습니까?

답변

0

엔티티 자체를 업데이트하면 안됩니다. 다른 서비스 (저장소)가 그렇게해야합니다. 엔터티의 PropertyChanged 이벤트를 구독하여 엔터티를 업데이트해야하는 저장소를 유도 할 수 있습니다. (!) 참고에, 나는 당신의 엔티티마다 속성 변경 내용을 변경해야하는 이상한 요구라고 생각

Customer c = new Customer(); 

c.PropertyChanged += (s, e) => customerService.UpdateCustomer(c); 

을하지만 : 이벤트 핸들러에서, 당신은 당신의 실체가 업데이트되어 있는지 확인 할 수 있습니다. 이것은 거래가 아주 쓸모 없다는 것을 의미합니다. 내 말은, 당신은 진정한 '일의 단원'이 없다는 것입니다. 여기서 모든 변화가 이루어져야하며, 전혀 지속되어서는 안됩니다. 그 다음에는 데이터베이스로 왕복하는 횟수가 많습니다.

+0

예 Frederik. 하지만 그들은 내 요구 사항을 고려하지 않습니다. 내 응용 프로그램에서는 사용자가 저장 단추를 눌러 변경 사항을 저장하도록 강요/강요하고 싶지 않습니다. 따라서 Textbox의 모든 LostFocus에서 PropChange가 실행되므로 서비스가 호출됩니다. Btw. 당신은 엔티티 자체를 업데이 트해야한다고 말했다 ... 또 다른 서비스 ... 정확히 내가 쓴. 나는 단지 c.PropertyChanged + = 등등을 쓰지 않았다. 그래서 우리 모두는 같은 결론에 도달했다. I이 한 전 코드에서 – msfanboy

+0

: this.PropertyChanged + = (O, E)를 => { 스위치 (e.PropertyName) { 경우 "숙제"_lpRepo.UpdateHomeWork (PeriodNumber, LessonDayDate 숙제); 단절; case "Content": _lpRepo.UpdateContent (PeriodNumber, LessonDayDate, Content); 단절; } }; 숙제 또는 콘텐츠 속성은 시간이 필요한 긴 RTF 문자열 일 수 있습니다. 따라서 두 개의 추가 업데이트 방법을 기간에 보유 할 수 있습니다 ... – msfanboy

+0

내 시나리오에 상상해보십시오. 각 응용 프로그램에 8 개의 모듈이 있습니다. 특성을 변경하십시오. 이제 사용자가 눌러야하는 저장 버튼이 있습니다 : 이제 어떤 객체가 제거/추가/변경되었는지 알아야합니다. 앱을 닫고 싶을 때 마지막 메시지 상자를 팝업으로 표시 할 때와 동일합니다. "데이터를 변경했습니다. 저장 하시겠습니까?" 마치 말처럼. 그러나 Word에는 다만 문서가있다. 8 가지 "문서"가 훨씬 더 복잡합니다. 그래서 내 요구는 괜찮습니까? ;-) btw. 나는 sqlite를 STApplication과 함께 사용한다. 나는 왕복 여행을 좋아하지 않아. – msfanboy