我正在使用返回通用结果的方法。但我看到我在重复自己。
我的方法是这样的:
public Result<Size> ResultForSize(){
var result = new Result<Size>();
try{
result.data = service.GetBySize();
}catch(){
result.hasError = true;
}
}
public Result<Color> ResultForColor(){
var result = new Result<Color>();
try{
result.data = service.GetByColor();
}catch(){
result.hasError = true;
}
}
public Result<Model> ResultForModel(int id){
var result = new Result<Model>();
try{
result.data = service.GetByModdel(id);
}catch(){
result.hasError = true;
}
}
我发现差异代码块只有try
try {
result.data = service.GetBySize();
}
如何使用面向对象的方法并为此重复创建一个简短的解决方案。
答案 0 :(得分:4)
您可以按照模式创建通用构造函数方法:
public static Result<T> CreateResult<T>(Func<T> constructor)
{
var result = new Result<T>();
try
{
result.data = constructor();
}
catch
{
result.hasError = true;
}
return result;
}
然后从这三种方法中调用它:
public Result<Size> ResultForSize()
{
return CreateResult(() => service.GetBySize());
}
public Result<Color> ResultForColor()
{
return CreateResult(() => service.GetByColor());
}
public Result<Model> ResultForModel(int id)
{
return CreateResult(() => service.GetByModdel(id));
}