Вы (ОП), кажется, озабочены ОО-дизайном, ну, я скажу это так, думая о статических переменных.Основная концепция - инкапсуляция и повторное использование;что-то, что вам не нужно беспокоиться о повторном использовании, но вы почти всегда хотите инкапсуляцию.Если это статическая переменная, она не инкапсулирована, не так ли?Подумайте, кому нужен доступ к нему, почему и как далеко вы можете скрыть его от клиентского кода.Хорошие дизайны часто могут изменить их внутренности без особой поломки для клиентов, вот о чем вы хотите подумать .Я согласен со Скоттом Мейерсом (Effective C ++) во многих вещах.ООП выходит далеко за рамки ключевого слова класса.Если вы никогда не слышали об этом, посмотрите свойства: да, они могут быть статическими, и C # имеет очень хороший способ их использования.В отличие от буквально с использованием статической переменной .Как я и намекнул в начале этого списка: подумайте о том, как не выстрелить себе в ногу позже , так как класс меняется со временем, что многие программисты не могут сделать при разработке классов.
Взгляните на ту платформу Rx, о которой кто-то упоминал.Используемая модель потоков для такой ситуации, как вы описали, не может быть легко решена без дополнительных подробностей о сценарии использования IMHO.Убедитесь, что вы знаете, что вы делаете с потоками.Многие люди не могут придумать, как спасти свою жизнь;это не так сложно, быть уверенным в том, что можно быть безопасным при повторном использовании кода.Помните, что контроллеры часто должны быть отделены от объектов, которыми они управляют (например, не тот же класс);если вы этого не знаете, найдите книгу о MVC и купите банду из четырех человек.
Зависит от того, что вам нужно.Для многих приложений класс, который почти полностью заполнен статическими данными, достаточно хорош;как синглтон бесплатно.Это можно сделать очень хорошо.Иногда вы предпочитаете иметь несколько экземпляров или играть с инъекцией, что делает его более сложным.
Я предлагаю темы и события.Простота создания кода, управляемого событиями, на самом деле является одной из самых приятных вещей в C # IMHO.
Хм, убивая одиночек ...
По моему опыту, многоеиз более распространенных применений, в которые молодые программисты помещают синглтоны, - это всего лишь пустая трата ключевого слова класса.А именно то, что они имели в виду, когда модуль с состоянием находится в классе highlander ;и есть несколько плохих одноэлементных реализаций, чтобы соответствовать.Я не знаю, было ли это из-за того, что они не смогли узнать , что они делают, или имели только Java в колледже.Вернувшись на землю C, это называется использованием данных в области видимости файла и раскрытием API.В C # (и Java) вы как бы связаны с тем, чтобы быть классом больше, чем многие языки.ООП! = Ключевое слово класса;хорошо выучите lhs.
Прилично написанный класс может использовать статические данные для эффективной реализации синглтона и заставить компилятор выполнять всю работу по поддержанию его единства или единства, которого вы когда-либо добьетесь от всего, НЕ заменяйте синглтоны наследованием, если вы серьезно не знаете, какого черта вы делаете.Плохо выполненное наследование таких вещей приводит к более хрупкому коду, который знает о многом.Занятия должны быть тупыми, данные умными.Это звучит глупо, если вы не посмотрите на утверждение глубоко .Использование наследования IMHO для такой вещи, как правило, плохо (тм), языки имеют понятие модулей / пакетов по определенной причине.
Если вы готовы, эй, вы действительно преобразовали его в возраст одиночных игрназад верно? Сядьте и подумайте немного: как мне лучше структурировать это приложение, чтобы оно работало XXX, а затем подумать, как это влияет на XXX, например, делает это так, как будетисточник разногласий среди потоков?Вы можете пройти через много вещей за такой час.Когда вы станете старше, вы научитесь лучшим техникам.
Вот одно предложение для XXX способа начать с: (визуализация) записи (^ Hing) класса составного контроллера, который работает как менеджер над объектами, на которые он ссылается. Эти объекты были вашими синглетонами, их не контролер, а экземпляры этих классов. Это не лучший дизайн для многих приложений (особенно это может быть проблемой в многопоточных IMHO), но он, как правило, решает то, что заставляет большинство молодых людей тянуться к одиночке, и он будет подходящим для широкого спектра программы. Это как шаблон проектирования CS 102. Забудьте о синглтоне, который вы выучили в CS 607.
Этот управляющий класс, возможно, «Application», был бы более подходящим;), в основном решает вашу потребность в синглетах и для хранения конфигурации. Как это сделать возвышенно OO-способом (если вы do понимаете ООП) и не стреляйте себе в ногу (опять же), это упражнение для вашего собственного образования.
Если он показывает, я не фанат так называемого синглтон-паттерна, особенно того, как он часто используется неправильно. Отодвигая кодовую базу от нее, часто зависит от того, насколько вы готовы использовать рефакторинг. Синглтоны похожи на глобальные переменные: удобно, но не масло. Хм, я думаю, что я помещу это в мой файл цитат, есть хорошая фраза к этому ...
Честно говоря, вы знаете больше о кодовой базе и рассматриваемом приложении, чем кто-либо здесь. Так что никто не может придумать это для вас, и советы говорят меньше, чем действия, по крайней мере, откуда я.