Является ли цепочка c # похожей на jQuery? - PullRequest
2 голосов
/ 29 марта 2011

Я подумываю об использовании методов расширения для цепочки выражения ac #, чтобы оно выглядело как jQuery в следующих случаях:

foo foo2 = 
  new foo().Title(foo1.Title)
  .Name(foo1.Name)
  .DoSomeStuff()
  .DoSomeMoreStuff();

Это хорошая / плохая идея?

public class foo
{
  public string Title {get;set;}
  public string Name {get;set;}
  public int Age {get;set;}

  public foo(){} 
}

public static class fooExtension
{
  public static foo Title(this foo source, string title)
  {
    source.Title = title;
    return source;
  }

 //and other extensions
}

Обновление: более подробное объяснение, поскольку "почему" я рассматриваю это. У меня есть 2 вещи:

  1. Я получаю данные отодин объект и использовать его для установки свойств другого.
  2. Мне нужно выполнить какое-то действие с этими свойствами.

Итак, мой исходный код выглядел больше как

foo2.bars = foo1.bars;
foo2.RemoveUnderage();
foo2.NotifyPatronsBarsAreFull();

и вместо этого я подумал, что это может бытьболее наглядно написать:

foo2.bars(foo1.bars).RemoveUnderage().NotifyPatrons();

Инициализаторы хороши, но они также объединяют свойства вместе, и я хотел, чтобы набор свойств был близок к действиям, которые я буду над ними выполнять.

Ответы [ 4 ]

5 голосов
/ 29 марта 2011

Что-то не так с использованием инициализаторов объектов?

new Foo { Title = foo1.Title, Name = foo1.Name }
   .DoSomeStuff()
   .DoSomeMoreStuff();

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

0 голосов
/ 29 марта 2011

Вы имеете в виду Свободный интерфейс ?В некоторых случаях такой же способ используется в классах .NET Framework (т. Е. Методы расширения StringBuilder или LINQ).Тем не менее, свободный интерфейс должен быть явно создан, и он требует много работы и использования на другом языке, чем C #.Я не думаю, что создание свободного интерфейса для каждого класса - это хороший способ быстро доставить хорошее программное обеспечение.

0 голосов
/ 29 марта 2011

Я думаю, что это плохая идея с точки зрения читабельности, но это сугубо личная вещь.

0 голосов
/ 29 марта 2011

Мне лично нравится этот «свободный» стиль программирования.Правильно названные методы могут выглядеть как предложения.Я бы немного изменил вашу:

foo foo2 = new foo()
{
    Title = foo1.Title,
    Name = foo1.Name
}
.DoSomeStuff()
.DoSomeMoreStuff(); 
...