Refactoring 最佳实践和良好模式,以避免干法违规
我想得到一些关于以下函数重构的建议: 有三个功能执行几乎相同的逻辑Refactoring 最佳实践和良好模式,以避免干法违规,refactoring,dry,Refactoring,Dry,我想得到一些关于以下函数重构的建议: 有三个功能执行几乎相同的逻辑 public SendResult ExecuteSendMessageByEmployee(Employee emp, SendingOptions options) { var result = SendMessage(emp); if (options.DepictEmpData) { _generator.DepictData(emp); } if (options.DepictResul
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;
}
public SendResult ExecuteSendMessageByEmployee(员工emp,发送选项){
var结果=发送消息(emp);
如果(选项.数据)
{
_发电机数据(emp);
}
如果(选项.结果)
{
_数据发生器(结果);
}
}
public SendResult ExecuteSendMessageByID(int employeeID,SendingOptions选项){
var结果=发送消息(员工ID);
var emp=_empService.GetByID(employeeID);
如果(emp==null)
{
_generator.NotifyNoEmployeeFound(employeeID);
返回新的SendResult(){Success=false};
}
如果(选项.数据)
{
_发电机数据(emp);
}
如果(选项.结果)
{
_数据发生器(结果);
}
返回结果;
}
public SendResult ExecuteSendMessageByDNA(列出dna、发送选项){
var结果=发送消息(dna);
var emp=_empService.GetByID(dna);
如果(emp==null)
{
_生成器。未发现员工(dna);
}
如果(选项.数据)
{
_发电机数据(emp);
}
如果(选项.结果)
{
_数据发生器(结果);
}
返回结果;
}
上述功能非常相似,但系统可以通过不同的数据关联员工。如图所示:有时我有完整的Employee对象,另一次我只有ID,另一次是DNA字节
上面的函数仅用于描述用例
应用程序需要在许多地方使用不同的参数执行函数;SendOptions也可以更改
您对减少冗余代码有什么建议吗?多接吻,不违反干法 只需从后两个方法调用第一个方法即可
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);
}
public SendResult ExecuteSendMessageByEmployee(员工emp,发送选项){
var结果=发送消息(emp);
如果(选项.数据){
_发电机数据(emp);
}
如果(选项.结果){
_数据发生器(结果);
}
}
public SendResult ExecuteSendMessageByID(int employeeID,SendingOptions选项){
var emp=_empService.GetByID(employeeID);
如果(emp==null){
_generator.NotifyNoEmployeeFound(employeeID);
返回新的SendResult(){Success=false};
}
返回ExecuteSendMessageByEmployee(emp,选项);
}
public SendResult ExecuteSendMessageByDNA(列出dna、发送选项){
var emp=_empService.GetByID(dna);
如果(emp==null){
_generator.NotifyNoEmployeeFound(employeeID);
}
返回ExecuteSendMessageByEmployee(emp,选项);
}
如果每个函数都调用同一个函数sendmessage(员工emp),您的建议似乎没有问题。如果我有机会高效地调用不同的SendMessage函数该怎么办。此外,必须首先调用它。在每个函数中,我选择不同的重载SendMessage,一次按员工,另一次按ID,等等?如果您可以证明存在可测量的显著性能差异,那么您不应该采用这种方法。我敢打赌你不能。