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

作者: guestid (訪客ID)   2012-11-18 23:21:29
最近因為在上一門程式設計的課, 有個期中專案報告,
加上很想學好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可能異動, 或改成分散式服務等~

Links booklink

Contact Us: admin [ a t ] ucptt.com