Модификаторы доступа - Свойство бизнес-объектов - получение и установка

Я использую LINQ to SQL для уровня доступа к данным. У меня есть бизнес-объекты, похожие на то, что находится на уровне доступа к данным.

У меня есть поставщик данных, получающий сообщение № 23. При создании экземпляра сообщения в конструкторе сообщения он получает MessageType, создает новый экземпляр класса MessageType и заполняет информацию о MessageType из базы данных.

Следовательно; Я хочу, чтобы это получило имя MessageType сообщения.

user.Messages[23].MessageType.Name

Я также хочу, чтобы администратор установил MessageType

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

но я не хочу, чтобы пользователь публично устанавливал MessageType.Name. Но когда я создаю новый экземпляр MessageType, модификатор доступа для свойства Name является общедоступным, потому что я хочу установить его из внешнего класса (мой уровень доступа к данным).

Я мог бы изменить это свойство на внутреннее, чтобы мой класс мог получить к нему доступ как к общедоступной переменной и не разрешить другому моему приложению доступ для его изменения.

Это по-прежнему кажется неправильным, поскольку кажется общественной собственностью. Плохи ли модификаторы публичного доступа в этой ситуации? Любые советы или предложения будут оценены.

Спасибо.


person Mike    schedule 01.04.2010    source источник


Ответы (1)


Вы всегда можете определить свое свойство следующим образом:

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

Если это то, что вы ищете, но немного неясно, что вы хотите. Что такое «администратор», которому разрешено устанавливать это свойство? Если это означает, что свойство должно быть установлено только в коде тем же модулем или «другим» модулем, то это решение.

Другим способом было бы публично выставить только интерфейс IMessage только с геттером а-ля MessageType MessageType { get; } для "общедоступных" модулей. В ваших основных модулях у вас будет полный класс Message, где у вас также есть сеттер.

Если вы подразумеваете под «администратором», что это зависит от роли текущего пользователя, если свойство может быть установлено (например, в графическом интерфейсе), то нет простого решения, которое можно было бы решить с помощью простого установщика свойств. Вам нужно будет сделать его публичным. Затем вам нужно будет написать какое-то причудливое управление правами, которое вы будете использовать для оценки того, будет ли включена эта часть графического интерфейса, и которое вы будете использовать снова для проверки перед сохранением значения в хранилище данных.

person herzmeister    schedule 01.04.2010