Шаблоны для перекрытия двух объектов - PullRequest
3 голосов
/ 09 сентября 2008

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

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

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

Ответы [ 2 ]

2 голосов
/ 09 сентября 2008

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

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

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

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

field1.readOnly = Field1ReadonlyRules[ someUser.userClass ]

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

1 голос
/ 09 сентября 2008

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

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

...