Недостатки Context.Current Pattern? - PullRequest
       4

Недостатки Context.Current Pattern?

3 голосов
/ 04 августа 2009

Для приложений любого размера, каковы недостатки использования шаблона Context.Current? (т. е. «Current» является общим / статическим свойством класса «Context», который создает себя при первом использовании)

Есть ли преимущество в использовании этого шаблона перед общими / статическими классами / методами?

Я спрашиваю в контексте .NET, хотя полагаю, что он может применяться на разных языках.

1 Ответ

5 голосов
/ 04 августа 2009

Это своего рода одноэлементный шаблон, обычно представляющий локальное хранилище потока. Хорошо известным примером в мире .NET является HttpContext.

Наиболее распространенной проблемой является тестируемость . Конечно, это не невозможно, но модель поощряет использование модели, которая не совместима с TDD, поэтому ее использование требует дополнительной бдительности. В ASP.NET MVC мы видим значительно улучшенный шаблон, по которому сам объект контекста передается через каждый слой в качестве входного параметра, а не полагается на одноэлементное хранилище для доступа к этому объекту.

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

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

Иногда есть подходящие места для одиноких, но их очень мало и они далеко друг от друга. Решение о сохранении состояния в синглтоне должно быть очень тщательно принято опытной командой. Неопытная команда должна избегать их, чтобы быть на безопасной стороне.

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