2016-06-29 31 views
-2

在我的第一個實際的非學術相關的Java項目上工作時,我已經慢慢地開始看到並意識到我的控制器類(我處理所有「幕後」工作的地方)已經變得相當大..如何分解控制器方法?

我多次被告知和閱讀,嘗試將類/方法分解成更小的類是非常好的做法。我將如何去組織分離,就像我一樣,我怎麼知道班級的哪些部分應該分解並放入另一個班級?

例如 - 我正在處理的項目會爲每個人加載人員列表和開始日期,然後在每個人遇到特定日期里程碑時給用戶定期提醒(例如,在第5天, 15和20,提醒用戶人X已經到達Y日)。

我的控制器有各種各樣的方法,從將文件中的人加載到ArrayList,生成GUI所需的報告信息,基於日期的數學計算,如果需要的話將文件添加/寫入文件等等..

如何知道他們的課程應該如何分解?

我的猜測:將類似的方法分解成一個類?例如,方法loadPeople()和loadMilestones()(它們都只是將文本文件放入ArrayList中)可以放入一個LoadingManager類中?然而在這種情況下 - 我將如何從另一個類訪問這些方法?我不需要實例化它們然後調用它們的方法嗎?創建5 +課後,我會想象這會變得非常單調乏味。

謝謝!

+0

對不起朋友,但這個問題太多**太廣泛,無法在這裏回答。我建議你閱讀Robert Martin的「敏捷原則」和「乾淨代碼」等書籍;並採取另一個維度:觀看https://www.youtube.com/playlist?list=PLD0011D00849E1B79 ...一般來說:您從一個完全不同的想法開始:您確定組件中的不同責任;每個責任都變成了自己的階級。 – GhostCat

+0

因此,一旦你有一堆類 - 他們都不需要嘗試訪問/使用他們的方法時實例化?創建了這麼多課後 - 連續實例化它們是不是很乏味?還有哪裏是存儲數據的好地方,比如ArrayLists?那些有自己的班級嗎? – Hazim

+0

當然。你會看到例如我的鏈接中的第二個視頻解決了這一問題。並認真:讀這些書。然後練習。提出你的代碼進行審查;與同行最好;或codereview.stackexchange.com ...如上所述:這個地方是不適合你的問題。一般來說:簡單類的**複雜**網絡總是比簡單的複雜類網絡更好。因爲:簡單的類可以自行測試。複雜的類不能被測試。 – GhostCat

回答

1

很難知道如何根據您提供的簡短說明將您的項目分解成不同的類。但是,這聽起來像你在正確的道路上。 LoadingManager類聽起來像是一個好主意。

是的,你會實例化一個LoadingManager,然後在你需要的時候調用loadingMngr.loadPeople()。這比在一個大文件中包含所有代碼更清潔。