2015-02-05 39 views
1

我想更好地瞭解如何在具有繼承功能的簡單庫存管理器程序中構造方法。瞭解'行爲'和方法的位置

上下文:零售環境中的產品在不在銷售層時被分配一個位置。位置看作與行和列,這樣的劃分書架:

enter image description here

程序必須執行一個動作是將產品添加到一個位置。比如將紅色的星星分配到上圖中的位置10/2/3。我的問題是,這是工人,垃圾桶還是產品的「行爲/方法」?當你從執行角度思考時,你如何決定哪一類?該工人可以該產品...該產品可以是放置 ...和斌可以收到。看起來它可以全部實現3.

我的大腦想告訴我,我應該在bin級別執行此操作,因爲bin最終應該負責處理它。例如,當它收到存儲物品的請求時,確保它不存儲不合適的產品或非產品。明白我的意思嗎?

那麼該產品可以負責檢查自己以確保它是正確的,甚至工人確保它有一個合適的產品?有些東西告訴我,也許應該有一種超級形式的驗證,然後每個都實現它自己的版本?

也許我沒有正確地思考這個問題。你如何看待它?我是在簡化它嗎?在簡化?這種事情或最佳做法是否有規定?

+1

我不明白繼承與你的問題有什麼關係。你爲什麼覺得把它說出來很重要?我明白你爲什麼叫出行爲。我覺得你在問每個班級應該承擔什麼責任。那是對的嗎? – 2015-02-05 19:39:31

+0

這個簡單的項目可能不值得,但另一種方法是將關係視爲圖。 – chrylis 2015-02-05 19:53:05

+0

是的,我猜繼承與我的問題沒有關係。我在問責任。我要糾正這一點。 – KiloJKilo 2015-02-05 20:17:22

回答

3

真正的答案是「它取決於」。我認爲很多開發人員很早就開始與之鬥爭。

它也取決於不斷變化的要求。您的第一個解決方案最初可能會有很多意義,但在您實施新功能2年後無法理解。

我最好的建議是購買(或借用)Martin Fowler關於重構的書的副本,並在(我相信)第一章中閱讀他的電影租賃示例。他展示了一個簡單的例子,以及由於需求的變化,他如何重構它。 (他的微不足道的例子表現出與你表達的一些相同的擔憂,租賃類,電影類或客戶類應該處理哪些需求)。你不僅應該閱讀他的例子,還應該在你自己的IDE中遵循。而且你應該嘗試獨立工作,在給定相同變化的要求的情況下查看你提出的內容。

這可能會讓您瞭解最初需要擔心的問題以及隨着時間的推移如何調整代碼。你會犯錯,並學會在你的代碼中識別「不好的氣味」。這將在未來爲您的設計決策提供信息。這本書也將幫助你解決你已經擁有的那些難聞的氣味。

這裏有一個鏈接:http://refactoring.com

+1

我會看看這本書。感謝您的答覆。 – KiloJKilo 2015-02-05 20:19:12