Каков наилучший подход, если вам нужно внести минимальные изменения в нескольких местах вашего приложения? - PullRequest
0 голосов
/ 26 августа 2009

некоторое время назад мы внедрили олицетворение в наше приложение (систему DMS). Мы сделали это, потому что пользователи не должны иметь доступа к физическим файлам страниц документа.

Таким образом, пользователь входит в наше приложение, имитирует другого пользователя и получает доступ к нужным файлам из нашего приложения.

Когда планировалось это подражание, мы не думали, что это будет здорово: пользователь подражает одному разу, и все в порядке. Мы внедрили код в существующие методы там, где это было необходимо (например, Impersonation = true или Impersonation = false).

Это было неправильно: олицетворение приходилось включать и включать в нескольких местах (например, когда пользователь хочет отправить документ в виде электронного письма, вы должны отключить олицетворение, чтобы использовать почтовый профиль пользователя), поэтому всякий раз, когда мы добавляем новую функциональность, которую мы должны протестировать с и без подражания.

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

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

Итак, каков будет ваш подход к получению чистого решения? (Я уже думал об использовании потоков, но это кажется очень сложным)

Надеюсь, вы сможете мне помочь.

С уважением,

Inno

Ответы [ 2 ]

0 голосов
/ 28 августа 2009

Ну, один из вариантов - определить поведение по умолчанию, например, олицетворение для пользователя. Такое поведение по умолчанию будет происходить во время входа в систему. Когда пользователь выполняет другие действия в системе, такие как отправка документа в виде электронной почты, он может быть инкапсулирован в службу, где служба принимает пользователя в качестве аргумента, а затем использует олицетворение, необходимое для этой функции. Чтобы взять ваш пример:

var emailService = new emailService();

//inside the service call it would apply the impersonation necessary for the operation 
emailService.send(user, new Attachment(documentToSendViaEmail));
0 голосов
/ 26 августа 2009

Звучит как сквозной аспект - может быть, аспектно-ориентированное программирование?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...