AKF Scale Cube Альтернативы?

Само по себе ваша маршрутизация не будет работать, потому что если 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. Вам также необходимо убедиться, что кэш был недействительным, если новый пользователь был добавлен.

2
задан Briomkez 15 January 2019 в 09:47
поделиться

1 ответ

В дополнение к AKF, существует Transactional Auto Scaler (TAS), языковая карта шаблонов масштабируемости (SPLM) и человек, достигший повсеместного производства (PAUM) ... Этот pdf описывает модели оценки (Количественный / Качественный) масштабируемости, в различных областях, таких как: производственные системы, компьютерные науки, организационные и бизнес.

Edit1

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

Масштабируемость может быть измерена в различных измерениях, таких как:

Административная масштабируемость: способность растущего числа организаций или пользователей легко совместно использовать одну распределенную систему. Функциональная масштабируемость: способность улучшать систему за счет добавления новых функций при минимальных усилиях.

Географическая масштабируемость: способность поддерживать производительность, полезность или удобство использования независимо от расширения от концентрации в локальной области до более распределенной географической структуры.

Масштабируемость нагрузки и т. Д.

AKF выглядит как модель, а не как подход к измерению масштабируемости, из определения:

«Куб Scale помогает командам сохранять критические измерения масштаба системы in mind при разработке решений и при создании существующих систем. are being improved. "

0
ответ дан TiyebM 15 January 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: