2010-01-21 54 views
1

考慮下面的代碼:簡單的重構例如

public static bool UpdateUser(string userId, 
             string jobTitle) 
{  
     return GetProvider().UpdateUser 
      (userId, jobTitle); 
} 

它需要被改變,可能不會返回一個布爾值,例如:

UserProfile userProfile = new UserProfile(); 
    userProfile.Initialize(user.UserName, true); 
    userProfile.ProfileJobTitle = jobTitle; 
    userProfile.Save(); 

你應該確保它返回一個布爾值,或只是徹底改變方法?

這種類型的問題的正確方法是什麼?

+1

是您的第二個代碼塊,說明該函數的替代BODY或INVOCATION?如果是這樣,UpdateUser在哪裏調用? – 2010-01-21 17:14:34

+0

爲什麼被標記爲C++? – 2010-01-21 17:21:49

回答

0

大概你問題中的第二塊代碼是GetProvider::UpdateUser()的實現。

確保它返回一個布爾的明顯替代方法是讓它在失敗時拋出異常。根據你有多少現有的代碼不會返回一個值,這可能會節省大量的工作。特別是,任何目前沒有價值的回報都可以單獨存在。任何返回「成功」的東西都可以簡單地刪除返回值。返回失敗的東西需要修改才能拋出異常。

如果你這樣做,困難的部分將確保所有其他代碼是異常安全的。根據你對異常的其他用法(如果有的話),你應該幾乎可以肯定地做到這一點,但這可能會迫使這個問題,所以你需要儘快清理其他代碼中的問題。

+0

謝謝傑裏,這可能是我使用錯誤的方法更新使用aspnet成員資格代碼的用戶配置文件。也許「正確」的方式會給我一個回報價值? – 78lro 2010-02-05 08:14:04

0

我相信取決於你和你正在嘗試做什麼,如果你只是不介意返回的值(布爾),你可以忽略它,但如果你介意它,讓我們假設它是否返回false可以顯示一條消息(即「保存不成功」或其他)。