[設計] 寫了個小專案,請給我設計上的建議~

看板OOAD作者 (訪客ID)時間12年前 (2012/11/18 23:21), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/1
最近因為在上一門程式設計的課, 有個期中專案報告, 加上很想學好OO設計, 所以很認真寫了個"簡易計算機"小專案, 希望請大家幫忙code review, 評論指教~ http://code.google.com/p/calculator-midterm-report/ ==== 簡易計算機(Calculator V0.61 r8)架構說明 ==== package calculator.ui 主視窗CalculatorFrame中有InputsField及AnswerField, 分別用來放置使用者輸入的算式及顯示計算結果, 另外也有一堆運算按鈕: 分為運算元, 運算子, 等號, Clear, Backspace, Null等6種 針對不同按鈕依其種類建立對應的CalButtonListener, 以CalCommand當參數, 將計算的任務委派給CalCommand package calculator.model CalCommand為abstract類別, 用來執行計算命令, 目前有以下子類別(對應6種按鈕): OperandCommand, OperatorCommand, DoCalculationCommand, ClearCommand, BackSpaceCommand, NullCommand CalButtonListener會執行CalCommand中的execute()來計算結果, 並notifyObservers() 通知 InputsField/AnswerField 更新畫面 (Observer Pattern, 讓model不用相依於swing的東西) ===== 問題 ===== 1. CalButtonListener把計算的行為指派給不同CalCommand去執行, 這樣應該算有用到Strategy Pattern? 還是根本就四不像,我自己亂套沒套好? 若沒套好可否給個建議? (我一開始之所以取名為CalCommand, 是想要套用Command Pattern, 但後來看head first DP中畫的類別圖, 又覺得比較像Strategy) 2. 接下來我還想在model的部分增加一個Interface如下: (因為看到Head First DP 介紹到了MVC架構) public interface CalculationModel { public void doOperand(String btnName, String newInputs); public void doOperator(String btnName, String newInputs); public void doCalculation(String newInputs); public void doBackSpace(String newInputs); public void doClear(); public void doNull(); // do nothing } 然後可能再做個類別(如: SimpleCalculationModel)去實作這個Interface 問題2.1: 那我原本的CalCommand架構要全部砍掉嗎= =? (改為計算邏輯都寫在SimpleCalculationModel就好) 還是在Model中建立這6種CalCommand, 將任務指派給它們比較好? (感覺又變更複雜了) 問題2.2: 這樣做真的會比較好嗎? 我想到的好處: CalculatorFrame中不用建構一堆CalCommand, 只要一個Model就好了, 架構也比較簡單直覺的樣子 我想到的壞處: 原本針對CalCommand有用到Strategy, 現在沒有了, CalButtonListener中可能要用switch case來處理, 或實作6種不同的CalButtonListener類別來執行對應的工作 3. 有必要再加上Controller(Model, View, Controller)嗎? 總覺得View相依於Controller和直接相依於Model沒什麼不同..., 還要多一層指派好像有點多餘 (就View有個controller能做事, 然後controller也只是利用Model真的去執行) 之後若要增加其它的View, 總覺得不用controller也行(Model不用修改就能重用) 在Head First DP compound patterns中介紹的DJ View範例MVC中, controller 是還有控制View的東西, 另外Model的使用上多了一些變化 4. 其它建議? (例如是否Over-Design了) 我是假設未來還想做不同的View(jsp/servlet, App, ...等), 及Model可能異動, 或改成分散式服務等~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 42.74.115.136

12/06 01:31, , 1F
用log4j寫log。先平鋪直敘的寫,切View-Model-Ctrl
12/06 01:31, 1F

12/06 01:31, , 2F
Model都不Model哩
12/06 01:31, 2F
文章代碼(AID): #1GgFpxJL (OOAD)
文章代碼(AID): #1GgFpxJL (OOAD)