当 return 类型不同时,我可以避免代码重复吗?
Can I avoid code duplication when the return type is different?
我有两种逻辑完全相同的方法:
Dog RunDog()
{
// a LOT of businees logic
return DogMethod(dogParams);
}
Employee RunEmployee()
{
// the exact same logic from above
return EmployeeMethod(employeeParams (can be easily converted to/from dogParams));
}
是否有通用的设计模式来帮助我避免代码重复?
可能是这样的:
T RunT()
{
// Logic...
// Invoke DogMethod/EmployeeMethod depending on T and construct the params accodringly
}
我选择 Dog/Employee 是为了强调没有简单的方法可以在两者之间进行转换。
您可以将method/action作为参数传递:
T RunT<T>(Func<T> function){
return function()
}
更多关于:https://simpleprogrammer.com/2010/09/24/explaining-what-action-and-func-are/
如果这两个方法 return 类型不同,那么尽管它们在内部使用相同的业务逻辑,但它们会做不同的事情。所以我会提取常用的业务逻辑,如
class Running
{
public Dog RunDog()
{
var dogParams = GetParams();
return DogMethod(dogParams);
}
public Employee RunEmployee()
{
var dogParams = GetParams();
var employeeParams = ConvertParams(dogParams);
return EmployeeMethod(employeeParams);
}
private DogParams GetParams()
{
// a LOT of business logic
}
}
可能您的建模系统有问题...
如果您有两个不同的 class 元素,它们在一个或多个元素上共享相同的行为(或逻辑),那么它们的共同点应该在基础 class 中或通过一个接口。
假设你想制作它们运行,创建一个接口 IRunner
interface IRunner
{
IRunner runMethod(runnerParam);
}
因此,如果您的 classes 都实现了此 class,您只需执行一次逻辑即可:
IRunner Run()
{
//Your logic here
return myRunner.runMethod(runnerParam);
}
我有两种逻辑完全相同的方法:
Dog RunDog()
{
// a LOT of businees logic
return DogMethod(dogParams);
}
Employee RunEmployee()
{
// the exact same logic from above
return EmployeeMethod(employeeParams (can be easily converted to/from dogParams));
}
是否有通用的设计模式来帮助我避免代码重复?
可能是这样的:
T RunT()
{
// Logic...
// Invoke DogMethod/EmployeeMethod depending on T and construct the params accodringly
}
我选择 Dog/Employee 是为了强调没有简单的方法可以在两者之间进行转换。
您可以将method/action作为参数传递:
T RunT<T>(Func<T> function){
return function()
}
更多关于:https://simpleprogrammer.com/2010/09/24/explaining-what-action-and-func-are/
如果这两个方法 return 类型不同,那么尽管它们在内部使用相同的业务逻辑,但它们会做不同的事情。所以我会提取常用的业务逻辑,如
class Running
{
public Dog RunDog()
{
var dogParams = GetParams();
return DogMethod(dogParams);
}
public Employee RunEmployee()
{
var dogParams = GetParams();
var employeeParams = ConvertParams(dogParams);
return EmployeeMethod(employeeParams);
}
private DogParams GetParams()
{
// a LOT of business logic
}
}
可能您的建模系统有问题...
如果您有两个不同的 class 元素,它们在一个或多个元素上共享相同的行为(或逻辑),那么它们的共同点应该在基础 class 中或通过一个接口。
假设你想制作它们运行,创建一个接口 IRunner
interface IRunner
{
IRunner runMethod(runnerParam);
}
因此,如果您的 classes 都实现了此 class,您只需执行一次逻辑即可:
IRunner Run()
{
//Your logic here
return myRunner.runMethod(runnerParam);
}