2010-01-25 4 views
5

나는 나에게 가장 좋은 코드를 줄 수있는 것이 무엇인지 알아 내려고하고있다. 물론 약간 주관적인 것입니다.속성에 속성을 지정 하시겠습니까?

이 어셈블리를 사용하는 모든 응용 프로그램에서이 데이터베이스에 대한 세부 정보를 숨기는 어셈블리를 작성한 데이터베이스에 액세스하는 응용 프로그램이 있습니다.

또한이 어셈블리를 사용하여 데이터 바인딩을 사용하려는 다양한 비용 계산을 표시하는 WPF 응용 프로그램이 있습니다.

데이터 바인딩은 객체의 속성에서만 가능합니다 (작동하는 한). 이것은 객체가 필요하다는 것을 의미하며, 바람직하게는 INotify 지원과 다양한 객체가 필요합니다. 그러나 데이터베이스 액세스를 처리하는 어셈블리 외부에 INotify 및 WPF 항목을 유지하는 것이 좋습니다.

다른 사람들이 이것을 어떻게 풀습니까? WPF를 데이터베이스 레이어 외부 (예 : INotify)에 보관하고 WPF 내부에서 바인딩을 허용 하시겠습니까? 래퍼 작성 하시겠습니까? 아니면 대부분의 사람들이 데이터 전송 객체로 '속성'/ 'INotify'클래스를 데이터베이스 계층에 직접 삽입합니까?

답변

3

오해의 소지가 있습니다. INotifyPropertyChanged이 아니고 WPF 건입니다. 고려 :

  1. 그것은 그것은 System.ComponentModel 네임 스페이스에 System.dll
  2. 의 일부는
  3. 그것은 버전 이후 NET 프레임 워크의 일부가되었습니다 2.0
  4. 그것은 중 가장 NET Framework 데이터 객체에 의해 지원됩니다 박스에는 ADO.NET의 DataRowView과 ComponentModel의 ObservableCollection이 포함됩니다.
  5. WinForms, ASP.NET, WPF 및 많은 타사 패키지가 데이터 객체와 인터페이스하기 위해 자동으로 사용됩니다.

마이크로 소프트가 생성 한 모든 자동 생성 데이터 레이어가 INotifyPropertyChanged이므로, 왜 데이터 레이어를 다르게 처리해야합니까?분명히 데이터 레이어는 속성이 변경 될 때 클라이언트에게 어떻게 든 알릴 필요가 있습니다. .NET Framework의 기본 제공 메커니즘을 사용하지 않는 이유는 무엇입니까?

내 생각에 변경 가능한 개체를 포함하는 모든 데이터 레이어는 물론과 같은 속성 변경 알림을 구현해야합니다. INotifyPropertyChanged은 그러한 알림 메커니즘으로 설계되었으므로 의도 한대로 사용하지 않는 이유는 무엇입니까?

더 일반적인 참고 사항 : 추가 래퍼 레이어를 추가하는 것은 일반적으로 비효율적 인 코드 팽창입니다. 때때로 그것은 필요하고 심지어 유익하지만 그것을하기 위해서만하지 마십시오. 많은 경우 합리적으로 설계된 데이터 계층 객체가 뷰 모델처럼 잘 작동합니다. 보기 모델이 데이터 영역과 다른 경우 또는 추가 기능이 필요한 경우에만 추가 복잡성을 도입하고 사례별로 고려해야합니다.

1

내가 가장 깨끗한 해결책은 WPF 어셈블리에 래퍼 개체를 작성하고 데이터베이스 어셈블리에서 INotify 형식을 유지하는 것입니다. 특정 이점을 제공하지 않는 한 INotify의 합병증을 데이터베이스 계층에 추가 할 이유가 없습니다.

7

다른 사람들은 MVVM 디자인 패턴을 구현하여이 문제를 해결합니다.

0

래퍼를 작성하십시오. 줄 바꿈이 매우 간단하다면 소스 DTO를 기반으로 모든 클래스를 생성하는 생성기를 빌드 할 수도 있습니다

0

PostSharp을 살펴볼 수 있습니다. 이것은 AOP (Aspect Oriented Programming)의 용도에 불과합니다. 모델 클래스에는 많은 수의 examples이 있습니다. 아직 실제 프로젝트에서 PostSharp를 사용하기 시작하지는 않았지만 시도한 일부 테스트 시나리오에서 유망 해 보였습니다.

0

유용한 점을 한 가지 더 알려드립니다. 바인딩하려는 속성이 변경되지 않는다는 것을 알고 있다면 (즉, 싱글 톤 객체 또는 한번 초기화되고 한번도 초기화되지 않는 객체), 이 필요하지 않습니다. 그것을 만들기 위해 INotifyPropertyChanged - 간단한 프로퍼티가 잘 동작 할 것이다.

관련 문제