2010-04-01 3 views
0

DataAccess 계층에 SQL에 LINQ를 사용하고 있습니다. 데이터 액세스 계층에있는 것과 유사한 비즈니스 개체가 있습니다.액세스 한정자 - 비즈니스 개체의 속성 - 가져 오기 및 설정

데이터 제공 업체가 메시지 23 번을 받고 있습니다. 메시지 생성자에서 메시지를 인스턴스화하면 MessageType을 가져 와서 MessageType 클래스의 새 인스턴스를 만들고 데이터베이스의 MessageType 정보를 채 웁니다.

따라서; 이 메시지의 MessageType 이름을 얻길 원합니다.

user.Messages[23].MessageType.Name 

는 또한 관리자가 메세지 유형

user.Messages[23].MessageType = MessageTypes.LoadType(3); 

을 설정하고자하지만 사용자가 공개적으로 MessageType.Name을 설정하지 않습니다. 그러나 새 MessageType 인스턴스를 만들 때 외부 클래스 (내 데이터 액세스 계층)에서 설정하기 때문에 Name 속성의 액세스 한정자는 public입니다.

내 속성을 내부 변수로 변경할 수 있으므로 내 클래스는 공용 변수처럼 액세스하고 다른 응용 프로그램 액세스는 수정할 수 없습니다.

이것은 여전히 ​​공공 재산처럼 보이는 것처럼 느껴지지 않습니다. 이 상황에서 공용 액세스 한정자가 잘못 되었습니까? 팁이나 제안을 보내 주시면 감사하겠습니다.

감사합니다. 그게 당신이 찾고있는 경우

public MessageType MessageType 
{ 
    get { return this._messageType; } 
    internal set { this._messageType = value; } 
} 

을, 그러나 당신이 원하는 것을 조금 불분명 :

답변

1

당신은 항상 그런 식으로 당신의 속성을 정의 할 수 있습니다. 이 속성을 설정할 수있는 "관리자"는 무엇입니까? 즉, 속성이 동일한 모듈 또는 "친구"모듈에 의해서만 코드에서 설정되어야한다면 솔루션입니다.

"공개"모듈의 경우 IMessage에만 getter À la MessageType MessageType { get; }이있는 인터페이스 만 공개적으로 공개하는 것이 좋습니다. 핵심 모듈에는 설정자가있는 전체 Message 클래스가 있습니다.

예를 들어 GUI에서 속성을 설정할 수있는 경우 현재 사용자의 역할에 따라 "관리자"가 의미하는 경우 간단한 속성 설정자가 해결할 수있는 간단한 해결책이 없습니다. 공개로 설정해야합니다. 그런 다음 GUI의 해당 부분이 활성화되어 있는지 여부를 평가하고 값을 데이터 저장소에 저장하기 전에 유효성을 검사하기 위해 다시 사용할 멋진 권한 관리를 코딩해야합니다.