Модификаторы доступа - Недвижимость на бизнес-объектах - получение и настройка - PullRequest
0 голосов
/ 01 апреля 2010

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

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

Таким образом, Я хочу, чтобы это получило Имя MessageType Сообщения.

user.Messages[23].MessageType.Name

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

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

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

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

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

Спасибо.

1 Ответ

1 голос
/ 01 апреля 2010

Вы всегда можете определить свою собственность так:

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

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

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

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

...