Какого черта контекст?

Я начинаю видеть контексты везде, куда бы я ни посмотрел. В ASP.NET MVC есть ControllerContexts, RequestContexts, HttpContexts, FormContexts. В Entity Framework у вас есть ObjectContexts и DbContexts. Ninject имеет Ninject.Activation.IContext.

Какого черта контекст?

6 ответов

Решение

Ну, это что-то вроде инъекции зависимостей, которая позволяет людям говорить "Вот среда, в которой вы будете работать". Как правило, они обеспечивают, что неудивительно, "контекст" для чего бы то ни было. Т.е. какое-то состояние. Возможно URL, возможно некоторые заголовки HTTP, что угодно.

Вы видите их много, потому что ASP.NET ориентирован на тестирование и, следовательно, позволяет "обмениваться" этими элементами, так что вы можете предоставить свои собственные реализации контекста (т.е. определить свое собственное состояние), чтобы вы могли запускать тесты соответственно и успешно.

Если вам интересно, что такое состояние, ну, это просто различные биты данных, которые "передаются" средой. Т.е. сегодня в офисе холодно. Это часть государства. Но, возможно, я хочу запустить свой тест, когда в офисе жарко, чтобы я мог подкласс OfficeContext и вернуть соответствующее состояние для соответствующего метода / и т.д.

IMO, Context обозначает некоторое (возможно изменяемое) состояние о чем-то. Как правило, контекстом являются сквозные слои, и они часто несут нейтральные к домену данные между слоями.

Контекст - это информация, выходящая за рамки того, что вы сейчас делаете, но которая может иметь важное значение.

Представьте, что кто-то спрашивает вас о значении английского слова "летать". Есть несколько определений: жужжание, слабое осознание или длительный акт скольжения по воздуху. Чтобы дать правильный ответ, вам нужен контекст, который говорит вам, какое определение они ищут - читают ли они книгу о Diptera или братьях Райт?

Что касается вычислений, скажем, вы реализуете обработчик HTTP. Возможно, он сможет генерировать ответ, ничего не зная (Hello, World!), Но, скорее всего, ему нужен контекст информации HTTP-запроса - какими были параметры запроса, допустимые типы кодирования и т. Д., Чтобы он мог создать значимый ответ на пользовательский агент.

Я думаю о них как о переменных вашей среды и настройках профиля в сеансе telnet/ssh. Они объединяют различные параметры, чтобы позволить инструментам работать по-разному в зависимости от контекста (то есть среды), в которой они работают.

Приведенные выше ответы в целом довольно хороши. Единственное, что я хотел бы добавить, - это то, что он наиболее часто используется в качестве "клея" для нижних уровней системы. Как правило, рассматриваемая система является некой "контейнерной" системой, в которой ваш код выполняется внутри большей кодовой базы, которая скрывает от вас множество деталей выполнения. Контекст - это абстрагированный интерфейс для этой более крупной системы.

ИМО, это просто еще один аргумент. По своему (ограниченному) опыту я видел, что это был вызывающий класс. Вы должны знать, что вы делаете, чтобы делать то, что вы делаете хорошо. Контекст - это то, что вы делаете, что происходит / работает.

Другие вопросы по тегам