2015-02-24 53 views
0

我明白,一種方法應該有效地服務於一個單一的目的。但是,如果我的方法(也充當API)被命名爲execute()呢?設計:一個方法應該做多少?

所以東西是這樣的:

void execute() { 
    /* some steps to initialize stuff */ 
    List<String> dataToBeExecuted = mainClass.getData(); 
    /* initialization ends */ 

    /* steps to actually execute data */ 
    for(...) { 
     try { 
      /* generate args to be passed to executeData() */ 
      otherClass.executeData(args.. , dataToBeExecuted); 
     } catch { 
      /* log stuff */ 
     } 
    } 
    /* execution ends */ 

    /* steps to do some validation */ 
} 

好了,現在這個功能本身是做三件事情,

* initialize stuff * execute Data * validate stuff

它可以細分爲3種方法,但我認爲,因爲邏輯足夠簡單,它可以保存在父級execute()方法中。

什麼是正確的方法?

+4

即使你的邏輯現在已經足夠簡單了,但它明天可能會改變,所以例如驗證步驟變得很大。你可能希望在3種方法中分裂init,執行和驗證(如果外部不需要它們,可能會有私有的可見性),並創建一個名爲更通用的過程(process?),它可以完成3個方法。 – 2015-02-24 12:59:38

回答

2

這不是邏輯是否簡單的問題。這是數據完整性的問題。例如:

  • 初始化操作會使數據處於某種可暴露的狀態嗎?意思是說,初始化後對象可能會發生什麼對執行有害的對象?
  • 該類的客戶端是否有意義獲取已初始化但未執行的對象?或執行但未驗證?
  • 除了在初始化對象上執行之外,是否還有其他可能的操作?或查詢?或者執行是初始化後唯一自然發生的事情?

這樣的問題的答案將指導決定執行是單一的公共方法,還是分成三個。 (當然,你可以在內部把它分成三種私有方法。)

相關問題