2014-02-19 42 views
0
public EmployeeProcessOutput RetrieveEmployee(EmployeeProcessInput input) 
{  
     var employee = input.Employee; 
     if (input.EmployeeId == null) 
      employee= CreateEmployee(employee); 

     return new EmployeeProcessOutput 
      { 
       Employee = employee, 
       State = "Stored" 
      }; 
} 

private Employee CreateEmployee(employee) 
{ 
     //Call a service to create an employee in the system using the employee 
     //info such as name, address etc and will generate an id and other 
     //employee info. 
     var output = Service(employee) 
     var employee = output.Employee; 
     return employee; 
} 

是否有一個乾淨的方法並將僱員參數傳遞給CreateEmployee方法。我覺得這條線可能更清潔:傳遞參數的清潔方式

employee = CreateEmployee(employee); 

有什麼想法?

+1

你的代碼不會編譯 – Grundy

+0

你不必編譯。只需要一個更乾淨的方式來做到這一點。 – user1527762

+1

你的意思是乾淨? wat問題或不一致(你認爲)現在有嗎?順便說一句,'CreateEmployee'簽名似乎完全沒問題。 –

回答

2

您是否在談論通過引用而不是返回並分配Employee值?如果是這樣,你可以這樣做:

public EmployeeProcessOutput RetrieveEmployee(EmployeeProcessInput input) 
{  
     var employee = input.Employee; 
     if (input.EmployeeId == null) 
      CreateEmployee(ref employee); 

     return new EmployeeProcessOutput 
      { 
       Employee = employee, 
       State = "Stored" 
      }; 
} 

private void CreateEmployee(ref Employee employee) 
{ 
     //Call a service to create an employee in the system using the employee 
     //info such as name, address etc and will generate an id and other 
     //employee info. 
     var output = Service(employee) 
     employee = output.Employee; 
} 

請注意,您必須使用ref關鍵字,因爲您正在更改參數本身的值。有關更多詳細信息,請參見this answer

這就是說,這並不一定使代碼「更清潔」,而且很難準確地告訴你所要求的是什麼。但由於某種原因,我得到的印象就是你所指的。

0

我不會說有什麼錯,你已經做什麼,但如果你絕對想改變和簡化這一行,也許你可以使用一個extension method

employee = employee.Create(); 

這將撥打:

public static Employee Create(this employee) 
{ 
    // ..call service, etc.. 

    return employee; 
} 

注意,此Create()方法需要駐留在一個單獨的公共靜態類。