Шаблон проектирования - использование одного сервиса для логического получения / освобождения ресурсов от другого сервиса - PullRequest
1 голос
/ 14 мая 2011

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

bool Acquire()
    1. Check if an other user currently holds ownership.
        1.1 if true => return false (acquirement failed).
        1.2 if false => proceed.
    2. set ownership to client connection at server side.
    3. return true.

void Release()
    1. Check if the client connection currently holds ownership.
        1.1 if true => remove ownership of client connection at server side.
        1.2 if false => do nothing.

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

1 Ответ

2 голосов
/ 14 мая 2011

Согласен, это звучит как дырявая абстракция . Я думаю, что было бы более уместно превратить это в проблему безопасности / авторизации.

Определите специальный токен безопасности , который может быть предоставлен только одному пользователю за раз.

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

Разделяя проблемы на отдельные классы, вы остаетесь верны принципам SOLID .

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