[设计] 写了个小专案,请给我设计上的建议~

楼主: 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