MVC(Model-View-Controller)源自 Smalltalk-80,經 MFC「文檔-視圖」模型普及,GoF 設計模式奠定經典地位。核心唯一詞:**分離**。Model 抽象實體、View 呈現介面、Controller 協調雙向互動。變種眾多,但分離思想不變。
| 優點 | 缺點 |
|---|---|
| 專家分工:資料庫/網路專家做 Model,UI 專家做 View | 類別膨脹:速效粉般增加類別數量 |
| 視圖變更不波及 Model,重構低成本 | 邊界模糊:Model 是螢幕資料還是實體?Controller 職責何在?爭論不斷 |
| Model 高內聚可復用,利於單元測試 | 實作成本高:小專案 ROI 可能為負 |
class MyFrame extends Form {
private Model model;
private StringItem nameItem;
MyFrame(Model model) {
this.model = model;
nameItem = new StringItem(model.getName());
append(nameItem);
}
}
class Model { String name = "M-V"; String getName() { return name; } }
switch-case 分派public abstract class MVCComponent implements CommandListener {
abstract void initModel(); abstract void createView(); abstract void updateView();
abstract void commandAction(Command c, Displayable s);
// 內部封裝 Model/View/Controller 三角色方法
}

| 角色 | UML 對應 | 職責 | 命名尾碼 |
|---|---|---|---|
| View | Boundary 類別 | 畫面呈現、收集輸入、回調 Controller | UI |
| Controller | Control 類別 | 提供 View 介面、協調 Model、共同負責使用者互動 | Workflow |
| Model | Entity 類別 | 實體物件(非螢幕資料集合),高獨立性、可復用 | Entity / 無 |
| Model 生命週期 | Entity 類別 | 實體建立/存取/刪除(RMS/資料庫) | Locator |