2016-07-08 2 views
0

Fluent-NHibernate를 사용하여 모든 데이터 지속성 계층을 관리하고 있으며 전반적으로 매우 기쁩니다 (NHibernate 커뮤니티에 감사드립니다). OR 매퍼를 계속 사용할 계획입니다. 매핑되는 POCO 주위에 API를 개발했습니다. 단점은 UI 개발자가 모든 속성을 가져올 수 있고 설정할 수 있다는 것입니다. 내가 진정으로 원하는 것은 중급이 아닌 개발에서 속성을 숨기고 오퍼레이션을 수행하기 위해 제공된 API 메소드 만 표시하는 것입니다.OR 매퍼를 사용하는 동안 속성 설정자를 숨기기

누구에게도 좋은 전략이 있습니까?

지나치게 간단한 예 :

member.FName = "Julian"; /// Don't do this because it avoids the my checking 
member.LName = "King"; 


member.setName("Julian", "King"); /// Yes - this will throw an error if this person already exist 
+0

공공 세터과 공공 작업의 차이는 무엇을 사용합니까? 둘 다 동일한 결과를 산출합니다. 어쩌면 당신의 타입을 _immutable_으로 바꾸고 싶습니까? – MickyD

+0

수술 방법이란? 속성 대신 메서드 사용을 제안 하시겠습니까? – Juls

+0

예. 아뇨, 불변 타입을 원한 것처럼 들리는데,이 경우 모든 것을 생성자로 전달할 것입니다. 따라서 상태를 변경하는 설정 자나 메소드가 없습니다. – MickyD

답변

1
private string _fName; 
public string FName 
{ 
    get { return _fName;} 
} 

private string _lName; 
public string LName 
{ 
    get { return _lName;} 
} 

public void SetName(string fName, string lName){ 

    // check for nulls here and or validate pre-conditions 

    _fName = fName; 
    _ lName = lName; 

// check for post conditions here 

} 

또는 더 나은 아직 값 객체 (DDD에 값 객체의 정의를 참조)

public void SetName(Name name){ 

     _fName = name.FirstName; 
     _ lName = name.LastName; 

    } 
+0

응답 해 주셔서 감사합니다. 데이터 속성을 보호하고 함수의 사용을 강제로 Name으로 설정하는 것이 맞습니다. 그러나 아마도 내가 이것을 명확하게하지 않았거나 OR 매퍼 Fluent NHibernate를 사용하고 있으므로 private 또는 no setter를 사용하면 매핑 오류가 발생합니다. – Juls

+0

NH 조금 더 읽을 수 있습니다. 비공개 필드 열에 매핑 할 수 있습니다. 나는 항상 그렇게한다. – epitka

+0

모든 클래스에 대한 컨 비니 언트 또는 사례 bassis별로 지정할 수도 있습니다. DefaultAccess.ReadOnlyPropertyThroughCamelCaseField (CamelCasePrefix.Underscore); – epitka

관련 문제