2013-02-06 54 views
0

我在OOP中比較新。關於OOP中的方法

我理解類,方法等等,但我在哲學上遇到麻煩。

現在,我正在開展項目管理,項目管理,班級,方法,變量,用戶,組,日誌和任務管理等項目。

因此,從Project類的,我說:

public function create_project() 
public function get_projects() 
public function delete_project() 

然後,ProjectClass類:

public class create_class() 
public class get_classes() 
public class delete_class() 

但後來,我雖然這是不正確的做法,所以我已更改爲:

Project分類方法:

set_name,GET_NAME(以及類似的方法) add_class get_classes add_log get_logs

ProjectClass類方法:

set_project_id(和獲取) add_variables(和獲取) add_method ...

因此,在第一種情況下,創建新項目的Project類,創建類的ProjectClass類和創建類的Method類在第二種情況下,是創建和管理其類的Project類,並且是創建和管理其方法的ProjectClass類。

那麼,這些「樣式」中的任何一個是正確的?

如果是第二種情況,誰創建項目的正確案例?本身?

謝謝你這麼多

回答

0

在一般情況下,它是真的很難說,如果一個設計比其他的更好,如果你沒有明確的責任分配(通過這個我外面是指從干將行爲和制定者)。隨着時間的推移,我從前期設計轉向迭代/漸進式設計,一次解決一個問題,並根據需要重構設計。在這種情況下,我會嘗試確定系統的基本要求,併爲每個系統開始設計實施週期,並在解決新需求時重新構建模型。

只是一個例子考慮這個問題:是否有意義的是有一個類不被綁定到一個項目?如果答案是那麼有一個像Project>>createClass(aClassName)這樣的方法可能是一個好主意,因爲您明確指出在項目的上下文中創建了一個類。你也可以在類和它所屬的項目之間建立正確的連接。然而,在將項目作爲參數的ProjectClass類中定義構造函數也是有效的方法。這樣你就會說「如果你想創建一個新班級,那麼你必須提供它所屬的項目」。使用哪種方法取決於很多事情,其中​​之一就是程序員的口味:),所以如果沒有特定的上下文來評估它們,那麼很難說明其中一個比另一個更好。

最後,如果有幫助,有幾件事情值得一提:

  • 假設public function create_project()是一個實例方法,爲什麼一個Project的實例知道如何創建其他項目?起初它沒有什麼意義,因爲這基本上是一個階級方面的責任,除非你有特定的動機(例如Prototype模式)。
  • 爲什麼項目回答get_projects()?它們是以某種方式相關的嗎?或者它只是列出所有的項目?然後,這聽起來像是一個階級責任。
  • 我通常不喜歡添加消息接收者表示爲消息一部分的概念。所以,我不會稱之爲delete_project()的消息,因爲它對狀態$project->delete_project()是冗餘的(你已經知道消息的接收者是一個項目)。
  • 你應該和你的班級名稱保持一致。如果您使用ProjectClass來表示類,那麼您應該使用ProjectMethod來表示方法(儘管我個人不喜歡這些名稱,恕我直言他們誤導)。選擇正確的名稱並使其在您的域模型中保持一致非常重要。

HTH