Какой шаблон (ы) я должен использовать для этой ситуации? - PullRequest
1 голос
/ 25 августа 2009

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

Доступ к хранилищу данных осуществляется через класс IRepository (XMLRepository, SQLRepository и т. Д.). Они абстрагируют действительную логику доступа к данным. Класс SettingsService должен иметь возможность получить класс ISetting следующим образом

public T GetSetting<T>(IUser user) where T : ISetting

Поскольку поля класса ISettings будут отличаться для каждого типа, я считаю, что именно класс Settings должен знать, как заполнять свои собственные поля, но не знает, как получить значения.
Однако хранилище знает, как получить доступ к данным, но не знает, куда их поместить.

GetSetting на самом деле является фабричным методом, если я не ошибаюсь. Я чувствую, что эта проблема не является чем-то новым, и, вероятно, есть хороший способ решить эту проблему.

Какие у меня варианты?

1 Ответ

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

Вам понадобится какая-то фабрика для каждого конкретного типа ISetting, которая может создать конкретный экземпляр SomeSetting из данных, возвращаемых из репозитория.

Как должна работать такая фабрика, зависит от того, как вы представляете схему постоянства настроек. Есть ли у вас индивидуальная схема для каждого типа ISetting, или вы просто сериализуете и десериализуете настройки в BLOB / XML?

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

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

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