智慧領域物件設計(例項講解)-2/2
如果你沒有讀過關於智慧領域物件設計的文章,又對此有點興趣,那麼BaseService和ThinObject一定能滿足你的需要。
BaseService原始碼:
// 在此輸入java程式碼 public class BaseService { public BeanTable getBeanTable(Class clz) throws SQLException { return ThinContext.ctx.getBeanTable(clz); } public void add(Object bean) { try { getBeanTable(bean.getClass()).add(KVUtils.toKeyValue(bean)); } catch (Exception e) { e.printStackTrace(); } } protected List getObject(Class clz, Criterion... criterion) throws Exception { List<Map<String, Object>> kvs = getBeanTable(clz).get(criterion); return KVUtils.toBeans(kvs, clz); } public void updateObject(Object obj) throws Exception { getBeanTable(obj.getClass()).update(KVUtils.toKeyValue(obj)); } public void deleteObject(Object obj) throws Exception { getBeanTable(obj.getClass()).delete(KVUtils.toKeyValue(obj)); } } <p class="indent"> |
ThinObject以及相關程式碼可以從我的demo中找到,這個demo是完成就醫預約功能,填寫“就醫預約單”,單據儲存後,釋出預約醫生的事件,然後點選“查詢預約”查詢預約情況。
把工程匯入eclipse:
這是用maven構建的專案包含兩個模組,idemo-webapp包含顯示和業務邏輯等,thin是持久層框架。展開後:
org.idemo.common下的功能,無論增加多少程式碼這裡都不用變;
org.idemo.model是包含兩個領域物件;
org.idemo.view是用於顯示的頁面,本程式碼使用wicket框架。
我們以後增加其他的業務程式碼就在model和view下編寫即可,使業務邏輯程式碼比例最大化,將有限的精力專注在業務邏輯和UI程式碼。當然並不是說service類就絕對不需要了,當一個任務需要多個物件配合才能完成,就需要建立一個service類讓多個物件合作完成任務。如模擬戰爭場面中常見的炸碉堡,就需要守方機槍手,攻方機槍手掩護和爆破手三個物件參與,沒有service類是不易完成。
src/main/resources下有兩個配置檔案,分別對應Doctor和Reservation。
*Doctor_sql.properties是用來為Doctor物件提供個性化的、Thin無法提供的SQL,為了讓程式和SQL分離,更換資料庫,便於調整SQL。沒有個性SQL可以不要此檔案。
*Reservation_lstnr.properties這裡是用來配置監聽器的,在這裡配置的類都必須‘implements Observer’這裡配置的類可以讓物件發生關係,不需要影響其他的類,可以不要此檔案。
在一個系統中很多物件都不是孤立存在的,他們之間存在相互影響的因果關係,在通常情況下,一個“因”可能會有多個“果”,這種因果關係在不同的業務環境下,是易變,所以這裡必須提供可配置,做到易擴充套件和業務弱隔離。如此現實中的因果鏈,就很容易實現。如飛機上有一個人突發心臟病,(1)乘務員在著陸前透過無線電報告給機場;(2)機場收到訊息後通知120急救中心;(3.1)120急救中心通知心臟科的主治醫生馬上趕到醫院;(3.2)120急救中心派救護車趕往機場;......。乘務員從第2個因果關係開始就不知道接下來還發生什麼事情了,也不用關心了,因為他的職務已經完成,第2個原因產生了兩個果(3.1)、(3.2),在不同的應用系統環境中,可能還會有(3.3)、(3.4)等等。
再來看看測試,通常難以測試的開發模式,就難以使用。
分層的一個好處是測試的時候不用啟動Servlet容器,智慧領域物件設計同樣不許要啟動容器,除了需要thin,junit(習慣)外,其他都不需要了,從上圖可以簡單看到!你可以在不寫任何頁面程式碼的情況下,完成所有的和必要的業務邏輯開發和測試,使分工更加方便細緻。
[囉嗦的附錄-附上最新的IObject原始碼]
// 在此輸入java程式碼 /** * 這是智慧領域物件設計的核心類,所謂智慧主要體現在獨立性上,可不借助外援 完成份內工作。即便子類所描述的物件在現實中不具備此能力。 * * @author Haihong.Wang * @since 2010-8-4 */ public abstract class IObject extends Observable implements Serializable { /** */ private static final long serialVersionUID = 1L; /** * 把物件自身持久到資料庫。子類可以根據類的情況,重寫該方法。 如該類是複合物件,想關聯儲存,則需要重寫該方法 * */ public abstract void remember(); /** * 刪除此物件對應的資料庫記錄。 恰如我們忘記一件事物 */ public abstract void forget(); /** * 用於更新資料庫記錄,需要更新物件的某一個屬性時,用到此方法。 恰如我們需要更新對事物的記憶。 * 我們每隔三天去看一個正在建設的高樓,那麼大腦每次都要更新高樓的高度。 * * @param updateFields * 屬性的名稱,如果你更改username的值,那麼這個引數就應該是username, 注意不是username的值 */ public abstract void updateMemory(String... updateFields); /** * 這是一個最自由的,最難以理解的,最惹爭議的方法。所以在這裡解釋以下,該類方法名稱可意為 * “聯想”或者“匹配”,英語associate包含這兩種解釋,有一定哲學含義, 即:要素與一系列物件屬性的匹配過程就叫聯想。 * 預設實現是查詢相關物件。如:我們透過寶馬聯想到賓士和奧迪。 * * 如果這是一個事件物件,那麼你可以讓他想到與這個事件相關的任何東西。 在子類中可以自己新增相關的‘associateXXX()’方法。 * * @param params * 任何物件要素 * @return */ public abstract List associate(Object... params); /** * 根據主鍵資料庫中獲取自身全部資訊 * * @param id * @return */ public abstract void obtainMe(); } <p class="indent"> |
[該貼被cuwkuhaihong於2010-08-09 13:24修改過]
相關文章
- 智慧領域物件設計(演繹革命)-1/2物件
- 智慧領域物件設計物件
- Retrofit2與服務端例項講解服務端
- 設計模式 - 原則及例項講解設計模式
- 設計模式例項講解 - 里氏替換設計模式
- 設計模式例項講解 - 介面隔離設計模式
- 設計模式例項講解 - 依賴倒置設計模式
- J2ME遊戲開發例項講解遊戲開發
- 設計模式例項講解 - 開放封閉設計模式
- j2me遊戲開發例項講解 (轉)遊戲開發
- J2ME遊戲開發例項講解(上)(轉)遊戲開發
- J2ME遊戲開發例項講解(下)(轉)遊戲開發
- 物聯網智慧家居領域的測試用例設計思路?
- Python設計模式之"外觀模式"例項講解Python設計模式
- DDD領域驅動設計初探(2):倉儲Repository(上)
- 領域驅動設計戰術模式--值物件模式物件
- 戲說領域驅動設計(二十)——值物件物件
- 系統領域物件設計,希望大家探討物件
- 網路爬蟲筆記2, requests庫入門-2(程式設計例項)爬蟲筆記程式設計
- Spring程式設計式和宣告式事務例項講解Spring程式設計
- 領域物件與業務邏輯關係設計思路物件
- DDD領域驅動設計:領域事件事件
- 2.Vue例項Vue
- Smarty例項教程(2)
- 詳解Python物件導向程式設計之類、例項、方法Python物件程式設計
- 雲原生遊戲第 2 講:OpenKruiseGame 設計理念詳解遊戲UIGAM
- linux下bluetooth程式設計(六)L2CAP層程式設計例項Linux程式設計
- .Net設計模式例項詳解設計模式
- Macro / Micro / Weighted AUC 如何計算例項講解Mac
- shell指令碼例項(2)指令碼
- oracle create function 例項2OracleFunction
- 前端設計模式(2)--單例模式前端設計模式單例
- Net設計模式例項之備忘錄模式(Memento Pattern)(2)設計模式
- Winsock程式設計初步之<三> 源程式例項(2) (轉)程式設計
- SQL觸發器例項講解SQL觸發器
- 例項講解Java工廠模式Java模式
- 一文弄懂 CORS 跨域(前端+後端程式碼例項講解)CORS跨域前端後端
- DDD-領域物件與領域服務物件