Сегодня у меня было прозрение, и я делал все неправильно. Некоторая история: я унаследовал приложение С#, которое было на самом деле просто набором статических методов, полностью процедурным беспорядком кода С#. Я реорганизовал это лучшее, что я знал в то время, принося много знаний ООП после учебы. Короче говоря, многие сущности в коде оказались Singletons.
Сегодня я понял, что мне нужны 3 новых класса, каждый из которых будет следовать одному шаблону Singleton, чтобы соответствовать остальной части программного обеспечения. Если я продолжаю рушиться по этому скользкому склону, в конечном итоге каждый класс в моем приложении будет Singleton, который действительно не будет логически отличаться от исходной группы статических методов.
Мне нужна помощь в переосмыслении этого. Я знаю об Injection Dependency, и это, как правило, было бы стратегией, используемой при нарушении проклятия Singleton. Однако у меня есть несколько конкретных вопросов, связанных с этим рефакторингом, и все о лучших практиках для этого.
-
Насколько приемлемым является использование статических переменных для инкапсуляции информации о конфигурации? У меня есть блок мозга на использовании статики, и я думаю, что это связано с ранним классом OO в колледже, где профессор сказал, что статичность была плохая. Но нужно ли мне переконфигурировать класс каждый раз, когда я обращаюсь к нему? При доступе к аппаратным средствам, можно ли оставить статический указатель на нужные ему адреса и переменные или постоянно выполнять операции
Open()
иClose()
? -
Сейчас у меня есть один метод, действующий как контроллер. В частности, я постоянно опроса нескольких внешних инструментов (через аппаратные драйверы) для данных. Должен ли этот тип контроллера быть способ, или я должен создавать отдельные потоки для каждого инструмента при запуске программы? Если последний, как мне сделать этот объект ориентированным? Должен ли я создавать классы с именем
InstrumentAListener
иInstrumentBListener
? Или есть какой-то стандартный способ приблизиться к этому? -
Есть ли лучший способ сделать глобальную конфигурацию? Прямо сейчас у меня просто
Configuration.Instance.Foo
распространяется по всему коду. Почти каждый класс использует его, поэтому, возможно, сохранение его как синглтона имеет смысл. Любые мысли? -
Множество моих классов - это такие вещи, как
SerialPortWriter
илиDataFileWriter
, которые должны сидеть рядом, ожидая, когда эти данные будут транслироваться. Поскольку они активны все время, как я должен их упорядочить, чтобы слушать события, генерируемые при вводе данных?
Полезны любые другие ресурсы, книги или комментарии о том, как уйти от синглтонов и другого использования шаблонов.