智慧領域物件設計
我們重新審視的以下JAVA的Object的物件,其中包含了兩個特殊的方法,equals和clone,從這兩個方法我們可以看出,在物件導向的程式設計中,物件的設計不能緊緊參考其所描述的物件,而不是不可新增其他便於物件活動的行為的。為什麼會有這樣的結論,equals的判斷兩個物件是否相同,這種物件與物件之間相同與否的問題,是隻有具備智慧的動物或者智慧機器人才有的能力做這樣的結論,大多數的物件是沒有此能力的,clone就不必說了。故做物件設計不必嚴格遵守現實,現在大家在寫程式的時候經常建立的javabean,只有setter和getter,也是一種無活力物件,只具備傳遞資料的能力,而且要配合對應的service方法才完成工作,service類就是一個方法集,嚴格來講不是物件導向程式設計。
我們不必在意是否遵守了物件導向的設計方法,能提高生產力的方法,就是好方法。我嘗試了一種新的設計方法,看是否可以提高生產力,大家不妨看看。
第一,Object物件已經具備equals和clone了這樣的智慧方法了,我們不妨再讓這個object聰明點,給他提供記憶聯想功能。接下來的兩點詳細說明。
第二,很多物件是需要儲存的,物件儲取能力不需要外部提供,而是繼承提供存取能力的物件,這就好像說,你家養的狗狗可以自己到寵物管理機構登記和變更它自己的資訊了(聽著都輕鬆),不用那麼現實。
第三,世界上任何物件都不是孤立存在,而是相互影響的,存在因果關係的,一種原因能產生什麼樣的結果,有些是一定的,有的卻不一定,物件之間的關聯,有些情況是聯絡緊密的、有些是疏散的,物件具備自己的關係網路。如你目睹一起三車相撞的交通事故,其中一人的腿的傷勢給你印象深刻,以後任何人提起腿受傷,你都會想起那個人,接著想起親眼目睹那次事故,你還可以想到這起事故具體是如何發生的,即有點到面,有面到體,逐步深入。下面是我的一個物件設計(原始碼https://sourceforge.net/projects/thinery/files/try.zip/download
):
我們不必在意是否遵守了物件導向的設計方法,能提高生產力的方法,就是好方法。我嘗試了一種新的設計方法,看是否可以提高生產力,大家不妨看看。
第一,Object物件已經具備equals和clone了這樣的智慧方法了,我們不妨再讓這個object聰明點,給他提供記憶聯想功能。接下來的兩點詳細說明。
第二,很多物件是需要儲存的,物件儲取能力不需要外部提供,而是繼承提供存取能力的物件,這就好像說,你家養的狗狗可以自己到寵物管理機構登記和變更它自己的資訊了(聽著都輕鬆),不用那麼現實。
第三,世界上任何物件都不是孤立存在,而是相互影響的,存在因果關係的,一種原因能產生什麼樣的結果,有些是一定的,有的卻不一定,物件之間的關聯,有些情況是聯絡緊密的、有些是疏散的,物件具備自己的關係網路。如你目睹一起三車相撞的交通事故,其中一人的腿的傷勢給你印象深刻,以後任何人提起腿受傷,你都會想起那個人,接著想起親眼目睹那次事故,你還可以想到這起事故具體是如何發生的,即有點到面,有面到體,逐步深入。下面是我的一個物件設計(原始碼https://sourceforge.net/projects/thinery/files/try.zip/download
):
public abstract class IObject extends Observable { protected static boolean inited = false; public IObject() { …..... } /** * 物件第一此載入的時候初始化所有的監聽器,該類的活動如果影響的其他物件 * 都可以在監聽器完成因果傳遞,監聽器統一配置在一個叫:[子類名稱]_lstnr.properties * 的配置檔案中,如果物件找不到該檔案,會認為沒有監聽器 */ static Map<String, Observer> observers = new HashMap(); /** * 把物件自身持久的資料庫的方法。子類可以根據類的情況,重寫該方法。 如該類是一對一, *一對多的,想把關聯物件一起儲存,就需要重寫該方法 */ public abstract void remember(); /** * 刪除此物件對應的資料庫記錄。 恰如我們忘記一件事物 */ public abstract void forget(); /** * 用於更新資料庫記錄,需要更新物件的某一個屬性時,用到此方法。 恰如我們需要更新對一件事物的記憶。 * 我們每隔三天去看一個正在建設的高樓,那麼大腦每次都要更新高樓的高度。 * * @param updateFields * 屬性的名稱,如果你更改username的值,那麼這個引數就應該是username, 注意不是username的值 */ public abstract void updateMemory(String... updateFields); /** * 這是一個最自由的方法,該類方法名稱意為”聯想“,一般預設實現是查詢相關物件。 * 如:我們透過寶馬,聯想到賓士和奧迪。 * 如果這是一個事件物件,那麼你可以讓他想到與這個事件相關的任何東西。 * * @param params * 任何物件 * @return */ public abstract List associate(Object... params); /** * 根據主鍵資料庫中獲取自身的全部資訊 * * @param id * @return */ public abstract void obtainMe(); } <p class="indent"> |
相關文章
- 領域驅動設計戰術模式--值物件模式物件
- 戲說領域驅動設計(二十)——值物件物件
- DDD領域驅動設計:領域事件事件
- DDD-領域物件與領域服務物件
- 領域驅動設計戰術模式--領域事件模式事件
- 戲說領域驅動設計(廿五)——領域事件事件
- 領域驅動設計戰術模式--領域服務模式
- 戲說領域驅動設計(廿一)——領域服務
- 領域驅動設計示例
- MasaFramework -- 領域驅動設計Framework
- DDD領域設計概念梳理
- 理解領域驅動設計
- 實現領域驅動設計
- 領域驅動設計核心概念
- 領域驅動設計簡介
- 領域設計:聚合與聚合根
- 再談領域驅動設計
- DDD領域驅動設計pdf
- 戲說領域驅動設計(五)——子域
- 物聯網智慧家居領域的測試用例設計思路?
- 在複雜領域中設計軟體:領域驅動設計 - levelup
- 《實現領域驅動設計》筆記——領域、子域和限界上下文筆記
- 前端開發-領域驅動設計前端
- DDD-領域驅動設計示例
- 淺談DDD(領域驅動設計)
- JavaScript中的領域驅動設計JavaScript
- 淺談 DDD 領域驅動設計
- 何時使用領域驅動設計
- 微服務領域驅動設計 - semaphoreci微服務
- DDD領域驅動設計:倉儲
- 戲說領域驅動設計(廿七)——Saga設計模型模型
- 探秘JavaScript深度領域:精通物件導向程式設計、虛擬DOM等核心技術JavaScript物件程式設計
- 最常見領域驅動設計錯誤
- 領域驅動設計整合與架構架構
- 領域驅動設計(DDD)入門&概要
- 整潔的領域驅動設計 - George
- DDD-領域驅動設計簡談
- 戲說領域驅動設計(三)——困境
- dayatang/dddlib:DDD領域驅動設計庫