Статьи

Wrap Your NameValue Переменные

ASP.NET предоставляет разработчику множество свободно типизированных коллекций ключ-значение, в которых можно хранить скрытые переменные в зависимости от потребностей в постоянстве. В короткий список входят ViewState, Session, Application и HttpContext.Items. Эти коллекции могут оказаться очень полезными, когда нужно держать объект вне одного запроса или перемещать объекты между различными частями конвейера http. Но это имеет цену — эти коллекции свободно напечатаны, просто возвращая Объекты. Более того, нет никакой проверки во время компиляции, чтобы убедиться, что вы запрашиваете правильный ключ в нужном месте. Ошибки в лучшем случае могут привести к сбоям, а в худшем — к интересному повреждению данных.

Но этих проблем можно легко избежать с помощью небольшой дисциплины. Вы видите, вместо того, чтобы вызывать эти переменные напрямую, очень возможно обернуть их в свойство с соответствующей областью и иметь доступ к базовым данным. Для примеров мы будем использовать Session, но семантика останется неизменной практически для любой из вышеперечисленных коллекций.

Итак, допустим, у нас есть небольшой интернет-магазин. И у этого интернет-магазина есть корзина для покупок. И мы собираемся спрятать этот объект Корзина в сеансе. Теперь можно было бы много экземпляров кода, как это:

ShoppingCart sc=(ShoppingCart)Session[“ShoppingCart”]; If (sc==null) { sc=new ShoppingCart(); } //do stuff with ShoppingCart. 

Или один базовый класс страницы где-то, вы можете определить что-то вроде:

protected ShoppingCart Cart { get { if (Session["ShoppingCart"] == null) { Session["ShoppingCart"] = new ShoppingCart(); } return (ShoppingCart)Session["ShoppingCart"]; } }
protected ShoppingCart Cart { get { if (Session["ShoppingCart"] == null) { Session["ShoppingCart"] = new ShoppingCart(); } return (ShoppingCart)Session["ShoppingCart"]; } } 

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

Наслаждайся и не бойся пнуть его на DotNetKicks.com ,