Есть ли лучшее название для этого класса?


Мне нужна версия MVC в RouteValueDictionary, что я могу добавить вызовы, т. е.:

new RouteValueDictionaryExtended()
        .AddValue("controller", "Home")
        .AddValue("action", "Index")
        .AddValue("id", 3)

Есть еще название я могу использовать для этого, а не просто "увеличенный"?

   public class RouteValueDictionaryExtended : System.Web.Routing.RouteValueDictionary
    {
        public RouteValueDictionaryExtended() : base() { }
        public RouteValueDictionaryExtended(object values) : base(values) { }
        public RouteValueDictionaryExtended(System.Collections.Generic.IDictionary<string,object> dict) : base(dict) { }
        public RouteValueDictionaryExtended AddValue(string key, object obj)
        {
            var newDict = new RouteValueDictionaryExtended(this);
            newDict.Add(key, obj);
            return newDict;
        }
    }


423
5
c#
задан 17 августа 2011 в 02:08 Источник Поделиться
Комментарии
2 ответа

Я бы на самом деле рекомендуем использовать () конструктор шаблона, если вы только делаете это для упрощения инициализации объекта:

public class RouteValueDictionaryBuilder
{
private List<Tuple<string, object>> values_ = new List<Tuple<string, object>>();

public RouteValueDictionaryBuilder WithValue(string key, object obj)
{
values_.Add(Tuple.Create(key, obj));
return this;
}

public RouteValueDictionary Build()
{
var dict = new RouteValueDictionary();
foreach (var value in values_)
{
dict.Add(value.Item1, value.Item2);
}
return dict;
}
}

Использовать:

var dict = new RouteValueDictionaryBuilder()
.WithValue("controller", "Home")
.WithValue("action", "Index")
.WithValue("id", 3)
.Build();

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

7
ответ дан 18 августа 2011 в 07:08 Источник Поделиться

Если вам нужен этот класс только уметь цепь "добавить" звонки, возможно, было бы лучше просто создать метод расширения:

public static class RouteValueDictionaryExtensions
{
public static RouteValueDictionary AddValue(this RouteValueDictionary routeValueDictionary, string key, object obj)
{
routeValueDictionary.Add(key, obj);
return routeValueDictionary;
}
}

И использовать его как:

 new RouteValueDictionary()
.AddValue("controller", "Home")
.AddValue("action", "Index")
.AddValue("id", 3);

Если вы все еще нуждаетесь в отдельном классе и его единственной целью является, чтобы добавить эту возможность сцепления, то оставьте его в название как 'ChainableRouteValueDictionary' или 'FluentRouteValueDictionary'.

5
ответ дан 17 августа 2011 в 03:08 Источник Поделиться