我正在为C#中的流畅接口提供一些好的技巧.我自己只是在学习它,但很想听到别人在我正在阅读的文章之外的想法.特别是我在追求:
如果您可以发布一个提示或思想,或每个帖子的任何内容.我想看看他们如何投票.
先感谢您.
我正在努力编写我的第一个DSL用于工作中的简单工具.我正在使用构建器模式来设置复杂的父对象,但是我遇到了砖墙,用于构建父对象的子集合.这是一个示例:
使用:
var myMorningCoffee = Coffee.Make.WithCream().WithOuncesToServe(16);
Run Code Online (Sandbox Code Playgroud)
关闭样本(我认为这就是他们所谓的):
var myMorningCoffee = Coffee.Make.WithCream().PourIn(
x => {
x.ShotOfExpresso.AtTemperature(100);
x.ShotOfExpresso.AtTemperature(100).OfPremiumType();
}
).WithOuncesToServe(16);
Run Code Online (Sandbox Code Playgroud)
示例类(没有子PourIn()方法,因为这是我想要弄清楚的.)
public class Coffee
{
private bool _cream;
public Coffee Make { get new Coffee(); }
public Coffee WithCream()
{
_cream = true;
return this;
}
public Coffee WithOuncesToServe(int ounces)
{
_ounces = ounces;
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
所以在我的应用程序工作中,我有复杂的对象构建很好,但我不能为我的生活弄清楚如何获取父对象上的子集合编码的lambda.(在这个例子中,它是expresso的镜头(儿童收藏)).
也许我在这里混淆概念而且我不介意被直接设置; 但是,我真的很喜欢这个如何阅读,并想知道如何使这个工作.
谢谢,山姆
在本讨论中(创建流畅的API),响应表明Builder模式比使用Extension方法创建Fluent接口要好.
这可能是什么原因?扩展方法遵循SOLID原则中的"O"......我个人只使用扩展方法来开发Fluent接口,但我想知道是否需要重新考虑这个...
我该如何进行以下编码?
Class1 objClass1 = new Class1().Add(1).Add(2).Add(3)...
Run Code Online (Sandbox Code Playgroud)
等等..
我如何实现该Add()方法来调用将反映在同一对象上的无限时间?