2011-09-11 5 views
2

현재 아키텍처에서 잘 알려진 레이어를 신중하게 구분하는 데 충분한 규모의 프로젝트를 만들고 있습니다.소프트웨어 아키텍처에서 INotifyPropertyChanged 인터페이스를 구현할 위치는 어디입니까?

데이터 액세스 계층 (DAL)의 경우 .NET 엔터티 프레임 워크를 사용하기 만합니다.

비즈니스 계층의 경우 클라이언트를 만들고 UI를 처리 할 수있는 후속 개발자가 사용할 수있는 비즈니스 개체를 정의했습니다.

데모 목적으로 클라이언트 응용 프로그램을 개발해야하므로 목록 대신 ObservableCollection<T>을 사용하는 것이 매우 유용 할 수 있으며 가능한 한 자주 개체가 INotifyPropertyChanged 인터페이스를 구현해야한다는 것을 깨달았습니다. UI가 자동으로 변경 사항을 감지하고 즉시 업데이트를 표시합니다.

그러나 아키텍처 관점에서 볼 때 실제로 올바른 방법인지 궁금합니다. 즉, 기술적으로는입니다. 저는 비즈니스 계층이 UI 디스플레이와 관련이 있어야한다고 생각하지 않습니다. 프로그래머가 사용할 수있는 것을 "알지 못합니다". 그는 예를 들어 계산 목적으로 객체를 사용하기를 원할 것입니다. 그래서 나는 무엇이 일반적인 관행인지 궁금해하고 있었다.

비즈니스 레이어에 이러한 기능을 구현해야합니까? 성능상의 문제는 없습니다. 이러한 모든 기능을 포함하는 다른 레이어에 "decorator"객체를 만들어야합니까?

+1

각 레이어마다 다른 클래스 세트가 있어야합니다. 약간의 중복 소리가 들리지만 올바른 선택입니다 (의심의 여지가 있음). – Sklivvz

답변

1

의견에 Skliwz으로 언급했듯이 정확한 배치 장소는 UI 레이어에 구체적으로 바인딩 된 개체입니다. 당신은 UI 계층에 직접 비즈니스 오브젝트를 결합하고, 당신이 INotifyPropertyChanged 인터페이스가 정말 귀하의 비즈니스 오브젝트에 속하지 않는 것을 발견하면

는, 그것은 당신이 다른 목적으로

을 위해 다른 개체가 있어야 명확한 표시입니다

예를 들어 Model View View Model 패턴을 사용하여보기 모델을 만들 수 있습니다.

그러나 비즈니스 오브젝트가 다른 시스템에 의해 모니터되고 변경된시기에 대한 통지가 필요한 경우, INotifyPropertyChanged 인터페이스가 적합합니다. 그러나, 당신의 특정한 경우에서 같이 소리가 난다, 그렇지 않다.

+0

MVVM 링크를 이용해 주셔서 감사합니다.하지만 마지막 단락의 의미를 모르겠습니다. 왜'INotifyPropertyChanged'가 부적절한 것일까? – SRKX

+1

@SRKX : 확실하게 말할 수는 없지만 일반적으로 UI 요소는 자동으로 이러한 개체를 생성하는 프록시 (WCF, RIA 등)에 의해 처리됩니다. 이들은 비즈니스 객체가 아니라 표현입니다. 일반적으로 특정 UI 상호 작용 (기능을 연결하는 버튼 누름)을 처리하기 위해보기 모델과 같은 것이 필요합니다. 그러나 백엔드에 있고 모델을 메모리에두고 속성을 변경하면 MSMQ라고하는 메시지가 전송되므로 개체가 INotifyPropertyChanged를 구현하는 것이 좋습니다. – casperOne

+1

@SRKX : 그러나 귀하의 경우에는 UI에 바인딩하려고합니다. 비즈니스 객체를 캡슐화하는 뷰 모델을 추천하고, 아마도'INotifyPropertyChanged' 자체를 구현할 수있을뿐만 아니라 데이터를 디스플레이에 바인딩하는 데 도움이되는 추가 속성도 추천 할 수 있습니다. – casperOne

관련 문제