多型, DDD如何體現
Account類有withdraw, deposit兩個方法,是放在Account類的裡面還是外面?
方案一:
Account代表我的賬戶,代表我的一個身份,那麼當然是一個主動的物件。
Account取錢,存錢是裡所當然的。withdraw, deposit兩個方法應該是Account的方法。呼叫方法:
account.withdraw(money) account.deposit(money) <p class="indent"> |
方案二:
Account就是戶頭,就是一個被動的金額資料記錄。
User每次申請銀行管理機構(出納),AccountManager來操作這個Account。
呼叫方法:
AccountManager.withdraw(account, money) AccountManager.deposit(account, money) <p class="indent"> |
如果只存在一種Account型別的情況下(比如只有銀行櫃檯賬戶),那麼程式設計上沒有根本的區別。只是這個加錢、減錢的動作的位置不同 -- 是在Account裡面做,還是在AccountManager裡面做。
在有多個Account型別的情況下,那情況就大不一樣了。
比如,有電子信用卡遠端帳戶 ECardAccount,有櫃檯存摺賬戶PaperAccount。這兩種賬戶的業務規則都是不同的。
比如,電子信用卡遠端帳戶的取錢,要收取一定比率的手續費,而櫃檯存摺賬戶就不需要。
這個時候,兩種劃分方法的程式設計上的優劣,就體現出來了。
按照第一種方案,只要為相同的Account介面,實現兩個不同的類,ECardAccount,PaperAccount,分別實現不同的withdraw,deposit就可以了。
第二種方法,就有些麻煩了。需要在AccountManager裡面用一個 if else,或者switch來判斷Account的型別,是ECard信用卡,還是Paper存摺。
這兩個方法都涉及到資料庫的操作。
各位,如果是DDD,怎麼處理?
相關文章
- Go 如何實現多型Go多型
- 什麼是Java多型?如何實現Java多型?Java多型
- go中如何實現多型Go多型
- TypeScript如何實現DDD的值物件?TypeScript物件
- 如何實踐DDD?
- C++ 多型的實現原理與記憶體模型C++多型記憶體模型
- 剖析C++多型:用C實現簡單多型C++多型
- 實現多型多對多 幾個注意點多型
- cqrs模式下ddd中的domain service如何實現模式AI
- 多型體驗,和探索爺爺類指標的多型性多型指標
- 多型記憶體圖解多型記憶體圖解
- 如何實現DDD事件建模的詳細步驟 - goeleven事件Go
- C/C++—— C++編譯器是如何實現多型C++編譯多型
- 在spring和hibernate框架下如何實現DDD思想?Spring框架
- Python 3.6:多型的實現Python多型
- Java實現DDD中UnitOfWorkJava
- 使用Akka實現Reactive DDDReact
- 體質型別共有幾種以及各體質表現,如何調養型別
- DDD實體值物件的equals和hashcode方法實現 - wimdeblauwe物件
- DDD 和 記憶體快取記憶體快取
- 反DDD模式之關係型資料庫模式資料庫
- IOS多型別Cell的tableView實現iOS多型型別View
- Java多型實現的必要條件Java多型
- C語言實現繼承多型C語言繼承多型
- C++ 多型的實現及原理C++多型
- 多型引擎如何工作在病毒中(譯)多型
- 用Scala和Akka實現DDD
- 多型。多型
- 多型~多型
- 多型多型
- Java 介面實現多型 -- 膝上型電腦綜合例項Java多型
- [MAUI程式設計]介面多型與實現UI程式設計多型
- golang 實現多型的賦值問題Golang多型賦值
- C/C++—— 對多型現象的理解C++多型
- c++實現多型的方法 虛表C++多型
- aardio 實現封裝繼承多型封裝繼承多型
- 可落地的DDD(4)-如何利用DDD進行微服務的劃分(2)微服務
- java中介面多個實現類,如何指定實現類,根據子類型別選擇實現方法Java型別