Нужна помощь, чтобы избежать использования синглтонов

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

Я разрабатываю кроссплатформенное приложение (Windows XP / Vista / 7, Windows Mobile 6.x, Windows CE5, Windows CE6). В рамках этого процесса я повторно использую код в отдельные проекты, чтобы уменьшить дублирование кода и, следовательно, шанс исправить ошибки исходной системы.

Одна из таких частей приложения, которая делается отдельной, довольно проста, это менеджер профилей. Этот проект отвечает за хранение Профили. Он имеет класс Profile , который содержит некоторые данные конфигурации, которые используются всеми частями приложения. Он имеет класс ProfileManager , который содержит профилей . ProfileManager считывает / сохраняет профили как отдельные файлы XML на жестком диске и позволяет приложению повторить попытку. ieve и установите «активный» Профиль . Простой.

В первой внутренней сборке графическим интерфейсом пользователя был SmartGUI, препятствующий шаблону. Это была реализация WinForms без MVC / MVP, потому что мы хотели, чтобы она заработала раньше, а не была хорошо спроектирована. Это привело к тому, что ProfileManager был одноэлементным. Это было так, чтобы из любой точки приложения графический интерфейс мог получить доступ к активному профилю .

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

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

П.с. Мне нужно создать приложение для Compact Framework 3.5, которое ограничивает множество обычных классов .Net Framework, которые можно использовать.

9
задан JonWillis 21 December 2011 в 19:47
поделиться