2010-03-12 6 views
1

저는 UserRepository-> User 모델을 사용하고 있습니다.readonly 속성에 가장 적합한 방법은 무엇입니까

리포지토리는 사용자 저장 및로드에 사용됩니다.

리포지토리에서 ID를 설정할 수 있지만 UI로 액세스하지 못하도록하고 싶습니다.

사용자 및 저장소는 핵심 프로젝트와 웹 UI에 있습니다.

속성 수정 자처럼이 작업을 수행 할 수있는 방법이 있습니까? 아니면 사용자 생성자에 ID를 입력해야합니까?

감사

당신은이 같은 세터와 전용 변수가없는 속성을 사용할 수 있습니다

답변

8

:

public int ID { get; private set; } 
//in the class ID = 5; this won't work outside the class 

에서이 같은 개인 세터와

private int _id; //Set locally 
public int ID 
{ 
    get { return _id; } 
} 
//in the class _id = 5; 

또는 사용 자동 등록 두 번째/자동 케이스의 경우 컴파일러가 첫 번째 예제를 수행하는데 실제로는 조금 빠르고 쉽습니다.

+0

+1 답변이 내 것보다 낫다. – Kelsey

+0

해당되는 경우 비공개가 아닌 보호를 사용할 수 있습니다. 이 기능은 첫 번째 버전과 자동 속성 버전 모두에서 작동합니다. – Brian

+1

@Brian - 같은 어셈블리에만 노출시키고 싶다면 'internal'한정자를 사용할 수도 있습니다. 이 경우 데이터 레이어에서 다른 프로젝트의 UI 레이어가 아닌 다른 레이어를 설정할 수 있습니다. –

-1

나는이 귀갑 사용하고 있습니다 (예 : C 번호에 익숙하지 않은,하지만 아이디어는 작동합니다) :

class Foo 
{ 
    protected int id; 

    public int GetID() 
    { 
     return (ID); 
    } 
} 

class MutableFoo : Foo 
{ 
    public void SetID(int val) 
    { 
     id = val; 
    } 
} 

다음 UI는 전용입니다 "푸"클래스를 다루는 읽기 전용 다른 부분 동안 읽기/쓰기가 가능한 "MutableFoo"를 다룰 수 있습니다. "MutableFoo"의 인스턴스를 생성 한 다음이를 "Foo"로받는 코드의 다른 부분으로 전달할 수 있어야합니다.이 경우 UI 코드는 객체에 대한 읽기 전용 액세스 권한을 가지며 다른 부분은 읽을 수 있습니다. 쓰기 액세스.

나는 "Foo"추상화도 만들었을 것이다. (필자는 그렇지 않은 경우를 생각할 수 없다).

+0

-1 : 이것은 C#에서 그것을하는 방법이 아닙니다. – Brian

+0

그것은 자바입니다. – Dykam

+0

자바뿐만 아니라 ... 여러 언어로 사용됩니다. 그냥 그렇게 클래스 A에 대한 속성의 C# 방식은 2 클래스 (읽기 전용의 경우 X, 읽기/쓰기의 경우 Y)를 어떻게 제공합니까? – TofuBeer

관련 문제