2009-07-15 2 views
2

이것은 기술적 인 문제가 아니라 철학적/모범 사례 유형의 질문입니다.메서드가있는 WCF DataContract 클래스

서버 측에서만 사용되는 메서드를 사용하여 DataContract 클래스를 작성하는 것에 대해 강력한 인수가 있습니까? 또는 DataMember 특성으로 장식되지 않은 추가 속성은 무엇입니까? 예를 들어

는 : 확장 방법을 사용하여 쉽게 만들 수 있지만

[DataContract] 
public class LogEntry 
{ 
    [DataMember] 
    public string Message { get; set; } 
    [DataMember] 
    public string Severity { get; set; } 

    public string SomeOtherProperty { get; set; } 

    ... 

    public void WriteToDatabase() 
    { 
    ... 
    } 
} 

는, 그것이 내가 피하기 위해 선호하는 추가 작업 엄청 많이 보인다 일을하지 않습니다. 그러나 좋은 개발자로서 그렇게하는 것이 바람직하지 않은지 궁금합니다.

+1

이것은 http://stackoverflow.com/questions/1121020/datacontracts-with-behavior와 정확히 일치합니다. –

+0

고마워요, 조사를 할 때 저것을 보지 못했습니다. 거기에 하나의 유효한 답변이 하나도없는 것 같아요.하지만 DataContract를 멋지게 유지하는 것이 좋습니다. DataContract에서 클래스를 파생시키려는 아이디어를 매우 좋아합니다. 확장 메소드보다 훨씬 융통성이 있습니다. 즉, 추가 속성을 추가 할 수도 있습니다. – jeanml

답변

1

WCF와 관련하여 명시 적으로 동의 한 구성원 인 DataMembers 만 계약서의 일부이므로 이와 같은 형식으로 일련 번호가 지정되므로 유형에 원하는 내용을 추가 할 수 있습니다.

에 대해 더 깨끗하다고 ​​생각하지 않습니다. 유형을 사용할 때 혼란 스러울 수있는 관계없는 멤버를 계약에 포함하십시오.

0

사실, 정말 상황에 의해

가 내 말은 상황에 따라 달라집니다 먼저 프로젝트 관리 상황 : 프로젝트 다음 WCF 컨텍스트의 돈을 예산/시간/개발자와 레벨/예상 수명이 : 그것을 웹 서비스입니다 (wsdl) 또는 명명 된 파이프 전송

당신이 모든 것이 부족하고 당신이 웹 서비스에 연결하기 위해 개발하고있는 클라이언트보다 누구도 기대하지 않는다면 당신은이 접근법으로 편하지 않을 것이라고 느낍니다.

다른 모든 경우에는 계약 세부 정보와 계약 코드를 명확하게 구분할 것을 제안합니다.

WCF namedpipe 컨텍스트에서 클라이언트와 서버가 공유하는 어셈블리에서이 계약을 한 번만 구현하는 것이 좋습니다. 이 경우 서버의 클라이언트 서명에 노출 될 위험이 있습니다.

3

기술적으로 데이터 계약을 사용하여 같은 클래스에 구현을 추가 할 수 있습니다. 속성이 지정된 속성 만 직렬화됩니다. 당신의 예에서

, 당신은 객체 전송을했고 어떻게 같은 클래스에 데이터베이스에 기록 : 직렬화 얻을 프런트 엔드 코드와 오브젝트가 지속성 별도로 것을

[DataContract] 
public class LogEntry 
{ 
    ... 

    public void WriteToDatabase() 

내가 추천 . 심지어는 별도의 데이터베이스 액세스 레이어를 권하고 싶습니다.이 레이어에는 전송 및 비즈니스 로직을 소유하고있는 레이어의 책임이나 레이어에 대한 지식이 없습니다.

데이터베이스 계약이 데이터 계약 및 전송 계층에있는 경우 시간이 지남에 따라 필요에 따라 레이어를 분리하고 교체하는 것이 불가능합니다. 이는 한 개의 코드가됩니다.

레이어를 분리하면 테스트에도 도움이됩니다. 전체 시스템의 모든 종속성없이 코드 단위를 테스트 할 수 있다는 것이 중요합니다. 예를 들어 데이터베이스 지속성을 분리하고 인터페이스로 분리하는 경우 비즈니스 로직을 단위 테스트 할 때 지속성을 하위 메모리 내장 구현으로 대체 할 수 있습니다.

전송되는 개체에 대해 알지 못하면 이러한 개체를 DAL로 전달하는 방법이 하나의 문제입니다. 분리를 시행하기 위해, 데이터 컨트 롤 장식, 전송을 소유하는 서비스 계층 및이 둘 모두 dll 유형을 참조하는 BLL/DAL이 포함 된 유형 dll을 보았습니다.

희망이 있습니다.

관련 문제