我想获得一些关于以下函数重构的建议:
有三个函数执行几乎相同的逻辑。
public SendResult ExecuteSendMessageByEmployee(Employee emp, SendingOptions options) {
var result = SendMessage(emp);
if (options.DepictEmpData)
{
_generator.DepictData(emp);
}
if (options.DepictResult)
{
_generator.DepictData(result);
}
}
public SendResult ExecuteSendMessageByID(int employeeID, SendingOptions options) {
var result = SendMessage(employeeID);
var emp = _empService.GetByID(employeeID);
if(emp == null)
{
_generator.NotifyNoEmployeeFound(employeeID);
return new SendResult(){Success = false};
}
if (options.DepictEmpData)
{
_generator.DepictData(emp);
}
if (options.DepictResult)
{
_generator.DepictData(result);
}
return result;
}
public SendResult ExecuteSendMessageByDNA(list<byte> dna, SendingOptions options) {
var result = SendMessage(dna);
var emp = _empService.GetByID(dna);
if(emp == null)
{
_generator.NotifyNoEmployeeFound(dna);
}
if (options.DepictEmpData)
{
_generator.DepictData(emp);
}
if (options.DepictResult)
{
_generator.DepictData(result);
}
return result;
}
上述功能非常相似,但系统可以根据不同的数据关联员工。如图所示:有时我有完整的Employee对象,有时我只有ID,还有一次我有DNA字节。
上面的函数只是用来描述用例。
应用程序需要在许多地方用不同的参数执行函数;SendOptions也可以更改。
你对减少冗余代码有什么建议吗?多KISS,不违反DRY模式?
从第二个方法中调用第一个方法。
public SendResult ExecuteSendMessageByEmployee(Employee emp, SendingOptions options) {
var result = SendMessage(emp);
if (options.DepictEmpData) {
_generator.DepictData(emp);
}
if (options.DepictResult) {
_generator.DepictData(result);
}
}
public SendResult ExecuteSendMessageByID(int employeeID, SendingOptions options) {
var emp = _empService.GetByID(employeeID);
if (emp == null) {
_generator.NotifyNoEmployeeFound(employeeID);
return new SendResult(){Success = false};
}
return ExecuteSendMessageByEmployee(emp, options);
}
public SendResult ExecuteSendMessageByDNA(list<byte> dna, SendingOptions options) {
var emp = _empService.GetByID(dna);
if (emp == null) {
_generator.NotifyNoEmployeeFound(employeeID);
}
return ExecuteSendMessageByEmployee(emp, options);
}