Само по себе ваша маршрутизация не будет работать, потому что если URL-адрес .../Product
означает, что вы хотите перейти к Index()
методу ProductController
, это будет соответствовать вашему первому маршруту (и предположим, что «Продукт» username
. Вам нужно добавить ограничение маршрута к вашим определениям маршрутов, которое возвращает true
, если username
является допустимым, а false
, если нет (в этом случае он попытается найти следующие маршруты, чтобы найти совпадение).
Предполагая, что у вас есть UserController
со следующими методами
// match http://..../Bryan
public ActionResult Index(string username)
{
// displays the home page for a user
}
// match http://..../Bryan/Photos
public ActionResult Photos(string username)
{
// displays a users photos
}
Тогда вам нужно определить определения маршрута
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "User",
url: "{username}",
defaults: new { controller = "User", action = "Index" },
constraints: new { username = new UserNameConstraint() }
);
routes.MapRoute(
name: "UserPhotos",
url: "{username}/Photos",
defaults: new { controller = "User", action = "Photos" },
constraints: new { username = new UserNameConstraint() }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Test", action = "Index", id = UrlParameter.Optional }
);
}
public class UserNameConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
List<string> users = new List<string>() { "Bryan", "Stephen" };
// Get the username from the url
var username = values["username"].ToString().ToLower();
// Check for a match (assumes case insensitive)
return users.Any(x => x.ToLower() == username);
}
}
}
Если URL-адрес .../Bryan
, он будет соответствовать маршруту User
, и вы выполните метод Index()
в UserController
(а значение username
будет "Bryan"
)
Если URL-адрес .../Stephen/Photos
, он будет соответствовать маршруту UserPhotos
, и вы выполните метод Photos()
в UserController
(а значение username
будет "Stephen"
)
Если URL-адрес .../Product/Details/4
, то ограничение маршрута вернет false для первых двух определений маршрутов, и вы выполните метод Details()
в ProductController
Если URL-адрес .../Peter
или .../Peter/Photos
, и есть нет пользователя с username = "Peter"
, тогда он вернет 404 Not Found
Обратите внимание, что пример кода выше жесткого кода пользователей, но на самом деле вы вызовете службу, которая возвращает коллекцию, содержащую действительные имена пользователей. Чтобы избежать попадания в базу данных каждого запроса, вы должны использовать MemoryCache
для кэширования коллекции. Сначала код проверяет, существует ли он, и если он не заполняется, проверьте, содержит ли коллекция username
. Вам также необходимо убедиться, что кэш был недействительным, если новый пользователь был добавлен.
В дополнение к AKF, существует Transactional Auto Scaler (TAS), языковая карта шаблонов масштабируемости (SPLM) и человек, достигший повсеместного производства (PAUM) ... Этот pdf описывает модели оценки (Количественный / Качественный) масштабируемости, в различных областях, таких как: производственные системы, компьютерные науки, организационные и бизнес.
Edit1
Если вышеупомянутые модели не измеряют или, по крайней мере, помогают измерить -Я думаю, пожалуйста, рассмотрите это исследование , чтобы измерить масштабируемость, которая обсуждает несколько техники.
Масштабируемость может быть измерена в различных измерениях, таких как:
Административная масштабируемость: способность растущего числа организаций или пользователей легко совместно использовать одну распределенную систему. Функциональная масштабируемость: способность улучшать систему за счет добавления новых функций при минимальных усилиях.
Географическая масштабируемость: способность поддерживать производительность, полезность или удобство использования независимо от расширения от концентрации в локальной области до более распределенной географической структуры.
Масштабируемость нагрузки и т. Д.
AKF
выглядит как модель, а не как подход к измерению масштабируемости, из определения:
«Куб Scale помогает командам сохранять критические измерения масштаба системы in mind
при разработке решений и при создании существующих систем. are being improved
. "