先日の WCF を使った配信のサンプルを、メソッドチェインで書き変えてみました。
まず SyndicationFeed を操作する拡張メソッドを用意。
public static class SyndicationFeedExtensions { public static SyndicationFeed WithAuthor(this SyndicationFeed feed, string mailAddress) { feed.Authors.Add(new SyndicationPerson(mailAddress)); return feed; } public static SyndicationFeed WithCategory(this SyndicationFeed feed, string categoryName) { feed.Categories.Add(new SyndicationCategory(categoryName)); return feed; } public static SyndicationFeed WithDescription(this SyndicationFeed feed, string description) { feed.Description = new TextSyndicationContent(description); return feed; } public static SyndicationFeed WithItem(this SyndicationFeed feed, string title, string content, string uri) { IList<SyndicationItem> items = feed.Items as IList<SyndicationItem>; if (items == null) { items = new List<SyndicationItem>(); } items.Add(new SyndicationItem(title, content, new Uri(uri))); feed.Items = items; return feed; } }
そして SyndicationFeed のプロパティを操作している箇所と SyndacationItem を作成している箇所を書き変え。
public class MyRss : IMyRss { public Rss20FeedFormatter GetFeed() { SyndicationFeed feed = NewFeed("Nakamura Blog", "Nakamura .Text Powerd Blog", "http://localhost:8000/MyRss") .WithAuthor("nakamura@wankuma.com") .WithCategory("雑記") .WithDescription("雑記です。") .WithItem("最初の記事", "最初の記事", "http://localhost:8000/MyRss/Contents/1") .WithItem("2番目の記事", "2番目の記事", "http://localhost:8000/MyRss/Contents/2") .WithItem("3番目の記事", "3番目の記事", "http://localhost:8000/MyRss/Contents/3"); return new Rss20FeedFormatter(feed); } public SyndicationFeed NewFeed(string title, string description, string uri) { SyndicationFeed feed = new SyndicationFeed(title, description, new Uri(uri)); return feed; } }
すごくスッキリしましたね。
メソッドチェインは書いていて楽しいです(私だけでしょうか)。