Вопрос

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

Я работаю над приложением для регрессионного тестирования.Я показываю форму на экране, и в зависимости от того, какой пользователь вошел в приложение, некоторые поля должны быть доступны только для чтения.Итак, я могу абстрагировать объект field и я могу абстрагировать объект user, но на какой шаблон мне следует обратить внимание, чтобы описать пересечение этих двух понятий?Другими словами, как я должен описать, что для поля 1 и Пользователя A поле должно быть доступно только для чтения?Кажется, что только для чтения (или нет) должно быть свойством класса Field, но, как я уже сказал, это зависит от того, какой пользователь просматривает форму.Я рассмотрел простой двумерный массив (e.g.Только для чтения [Поле, Пользователь] = True) но я хочу убедиться, что выбрал наиболее эффективную структуру для представления этого.

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

Это было полезно?

Решение

Конструкции, основанные на таблицах, могут быть эффективными.У Стива Магуайра было несколько приятных примеров в Написание Твердый Код .

Они также являются отличным способом сбора тестов, см. подходит .

В вашем случае что-то вроде:

Field1ReadonlyRules = {
    'user class 1' : True,
    'user class 2' : False
}

field1.readOnly = Field1ReadonlyRules[ someUser.userClass ]

В качестве отступления вы, вероятно, захотите смоделировать и то , и другое пользователи и классы пользователей / роли / группы вместо того, чтобы объединять их.Пользователь обычно фиксирует кто (аутентификация) при захвате групп/ ролей что (разрешения, возможности)

Другие советы

На первый взгляд это больше похоже на то, что у вас есть два разных типа пользователей и у них разные уровни доступа.Это может быть решено путем наследования (PowerUser, User) или путем создания объекта безопасности или токена, который устанавливает уровень для пользователя.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top