Часть из того, что я читал об этом вчера и сегодня:
Эти различия являются чрезвычайно тонкими, но они действительно влияют, как эластичный система поддержит после лет тонких изменений, новых возможностей, улучшений, и т.д. Большинству разработчиков не нравится обслуживание системы, и я чувствую, что самая большая причина состоит в том, потому что системы действительно не разработаны, чтобы сохраняться. Путем слияния "одноэлементного" шаблона выше, я абстрагировал создание объекта и вводящий далеко от моей логики основного бизнеса, которая очень важна для долгосрочного обслуживания.
Требовательные потребители для создания экземпляра классов ни по какой причине; Истинные служебные классы, которые не представляют угрозы для чрезмерного увеличения размера, являются превосходными случаями для статических методов - Система. Преобразуйте как пример. Если Ваш проект является одноразовым без требований для будущего обслуживания, полная архитектура действительно не очень важна - статичный или не статичная, действительно не имеет значения - скорость разработки делает, как бы то ни было.
Мы (я), занятый, переписывая наших главных приложений в данный момент, и один из проектов в решении "Распространен", и это содержит единый класс, "clsCommon". Этот класс не имеет никаких свойств, единственный закрытый метод, который называют как единственная строка в конструкторе и затем просто открытых методах.
Этот класс обрабатывает вещи как (не реальные имена методов или подписи):
В настоящее время все другие проекты в решении имеют ссылку на этот проект, и они обеспечивают доступ к классу:
namespace Us.OtherProjects
{
public class clsCommon : Us.Common.clsCommon
{}
}
namespace Us.OtherProjects
{
public static class clsMain
{
public static clsCommon CommonClsClassReferenceForGlobalUsage = new clsCommon();
.
.
.
}
}
namespace Us.OtherProjects
{
public class clsOtherClass
{
.
.
.
private void someMethod()
{
string something = clsMain.CommonClsClassReferenceForGlobalUsage.Foo();
}
.
.
.
}
}
Каковы Ваши мнения о создании этого класса статический класс или возможно одиночный элемент, как описано Jon Skeet здесь?
Критерием здесь является состояние. Если ваш класс - это просто контейнер для независимых функций (т.е. CopyFile, GetTimeStamp), то статический класс - самый логичный подход. См. класс System.Math
.
Однако у вашего класса есть конструктор, и я предполагаю, что он хранит некоторое состояние (имя файла config/log). Это требует синглтона.
Глядя на список функциональности, я думаю, что вам следует рефакторить это в несколько классов. Некоторые из них могут (и должны) быть статическими. Используйте Singleton(ы) для тех частей, которые нуждаются в состоянии, например, Logging, Configuration и т.д.
Основная проблема дизайна, которую я здесь вижу, это наличие одного класса, который делает логирование, конфигурацию, форматирование и кучу других вещей.
Когда я слышу слова Обычный
, Менеджер
, Помощник
Я сразу думаю о коде запах. Нет ничего проще, чем присвоить классу имя без фактического значения и просто зарыть в него огромный сантехнический код. Обычно это происходит, когда на разработчика слишком сильно влияет процедурное программирование.
Отвечая на вопрос: я вообще не люблю статические вещи (проблемы параллелизма, более сложное управление временем жизни экземпляра и т. Д.). Есть редкие случаи, когда статика полезна, и я считаю, что это не один из них.
Если подходит «статический вспомогательный метод подражания», напишите метод расширения. Если это не так, то он должен быть в отдельной службе или в базовом классе чего-либо (это зависит от контекста).
Значит, класс, который управляет вещами, не следует называть SomethingManager? Я не согласен в этом конкретном случае
Бывают случаи, когда это может быть уместным. Но, как мне кажется, «XManager» просто сообщает вам, что этот класс «Manager» работает с классом «X» и «управляет» чем-то, что бы «управление» ни означало. Помощники в чем-то помогают. Что именно? Кто знает - надо проверить код. «Обычное» еще более расплывчато. В таких классах / пространствах имен / проектах видел всевозможные вещи (доступ к данным, безопасность и связанные с пользовательским интерфейсом вещи, связанные с логикой бизнес-домена).
Хммм ... так что, может быть, пространство имен Us.Common {публичный (статический?) Класс Strings {} публичный (статический?) Класс Файлы {} публичный (статический?) Класс Настройки {}} Мнения по поводу этой архитектуры меняются? Еще раз, меня интересует ремонтопригодность и удобство использования.
Вы можете найти этот пост полезным. По нему - это Логическая сплоченность
в Вашем случае.