是否有流畅的C#方法的命名约定?我希望读者知道在查看方法名称时,方法遵循流畅的设计模式。
我即将编写一个类类型,它使用许多流畅的方法来构建静态工厂式构造函数。例如,
Person bob = Person.New()
.Name("Bob")
.Age(30)
.Location("USA")
.MakeAwesome()
.PutACatOnHisHeadJustToScrewWithHim()
.MakeIntoStackOverflowExample();
我理解可选参数是这个过程的一种方法。例如,它可能是
Person bob = Person.New(
name : "Bob"
, age : 30
, location : "USA"
, isAwesome : true
, hasACatOnHisHeadJustToScrewWithHim : true
, isAStackOverflowExample : true
);
,但我更喜欢流畅的方法,因为命名参数方法更局限于单个方法调用,因此在构建后稍后将一只猫添加到Bob的头部不太实际。
由于该项目尚未采用流畅的方法,我想以一种使其流利性质明显的方式命名。我认为fluent_AssertName
可以代替Name()
,但这似乎很麻烦。目前我在考虑F_Name()
。
虽然上面的示例是针对构造函数的,但我想在整个程序的操作中使用这种流畅的方法。此外,流畅的方法具有订购和允许裁员的优势。
Number x = Number.New(0)
.Add(1)
.Multiply(2)
.Subtract(1)
.Multiply(2)
;
// ...other code that uses x...
x.Add(5)
.Multiply(10);
在我的特定用例中,流畅的方法似乎是最好的。我只是在寻找一个明显的命名约定来反映这种设计模式。
答案 0 :(得分:3)
我不确定你是否真的需要流畅的方法,因为你可以这样简单地使用对象初始化器:
var person = new Person { Name= "Bob", Age= 30 };
但是如果您需要流畅的方法,例如为了为属性赋值而进行多次重载,例如使用int,string或color设置颜色,这里有一个选项:
基础构建器类:
public class Builder<T, TBuilder>
where T: new()
where TBuilder : Builder<T, TBuilder>, new()
{
protected T model;
protected Builder()
{
model = new T();
}
public static TBuilder New()
{
return new TBuilder();
}
public T Get()
{
return model;
}
}
人员类:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Person Builder类:
public class PersonBuilder:Builder<Person, PersonBuilder>
{
public PersonBuilder():base()
{
}
public PersonBuilder Name(string name)
{
model.Name = name;
return this;
}
public PersonBuilder Age(int age)
{
model.Age = age;
return this;
}
}
<强>用法:强>
var p = PersonBuilder.New().Name("Bob").Age(30).Get();