107 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			107 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | @startuml | ||
|  | package com.iluwatar.event.sourcing.processor { | ||
|  |   class DomainEventProcessor { | ||
|  |     - processorJournal : JsonFileJournal | ||
|  |     + DomainEventProcessor() | ||
|  |     + process(domainEvent : DomainEvent) | ||
|  |     + recover() | ||
|  |     + reset() | ||
|  |   } | ||
|  |   class JsonFileJournal { | ||
|  |     - events : List<String> | ||
|  |     - file : File | ||
|  |     - index : int | ||
|  |     + JsonFileJournal() | ||
|  |     + readNext() : DomainEvent | ||
|  |     + reset() | ||
|  |     + write(domainEvent : DomainEvent) | ||
|  |   } | ||
|  | } | ||
|  | package com.iluwatar.event.sourcing.event { | ||
|  |   class AccountCreateEvent { | ||
|  |     - accountNo : int | ||
|  |     - owner : String | ||
|  |     + AccountCreateEvent(sequenceId : long, createdTime : long, accountNo : int, owner : String) | ||
|  |     + getAccountNo() : int | ||
|  |     + getOwner() : String | ||
|  |     + process() | ||
|  |   } | ||
|  |   abstract class DomainEvent { | ||
|  |     - createdTime : long | ||
|  |     - eventClassName : String | ||
|  |     - realTime : boolean | ||
|  |     - sequenceId : long | ||
|  |     + DomainEvent(sequenceId : long, createdTime : long, eventClassName : String) | ||
|  |     + getCreatedTime() : long | ||
|  |     + getEventClassName() : String | ||
|  |     + getSequenceId() : long | ||
|  |     + isRealTime() : boolean | ||
|  |     + process() {abstract} | ||
|  |     + setRealTime(realTime : boolean) | ||
|  |   } | ||
|  |   class MoneyDepositEvent { | ||
|  |     - accountNo : int | ||
|  |     - money : BigDecimal | ||
|  |     + MoneyDepositEvent(sequenceId : long, createdTime : long, accountNo : int, money : BigDecimal) | ||
|  |     + getAccountNo() : int | ||
|  |     + getMoney() : BigDecimal | ||
|  |     + process() | ||
|  |   } | ||
|  |   class MoneyTransferEvent { | ||
|  |     - accountNoFrom : int | ||
|  |     - accountNoTo : int | ||
|  |     - money : BigDecimal | ||
|  |     + MoneyTransferEvent(sequenceId : long, createdTime : long, money : BigDecimal, accountNoFrom : int, accountNoTo : int) | ||
|  |     + getAccountNoFrom() : int | ||
|  |     + getAccountNoTo() : int | ||
|  |     + getMoney() : BigDecimal | ||
|  |     + process() | ||
|  |   } | ||
|  | } | ||
|  | package com.iluwatar.event.sourcing.app { | ||
|  |   class App { | ||
|  |     + ACCOUNT_OF_DAENERYS : int {static} | ||
|  |     + ACCOUNT_OF_JON : int {static} | ||
|  |     - LOGGER : Logger {static} | ||
|  |     + App() | ||
|  |     + main(args : String[]) {static} | ||
|  |   } | ||
|  | } | ||
|  | package com.iluwatar.event.sourcing.state { | ||
|  |   class AccountAggregate { | ||
|  |     - accounts : Map<Integer, Account> {static} | ||
|  |     - AccountAggregate() | ||
|  |     + getAccount(accountNo : int) : Account {static} | ||
|  |     + putAccount(account : Account) {static} | ||
|  |     + resetState() {static} | ||
|  |   } | ||
|  | } | ||
|  | package com.iluwatar.event.sourcing.domain { | ||
|  |   class Account { | ||
|  |     - LOGGER : Logger {static} | ||
|  |     - MSG : String {static} | ||
|  |     - accountNo : int | ||
|  |     - money : BigDecimal | ||
|  |     - owner : String | ||
|  |     + Account(accountNo : int, owner : String) | ||
|  |     + copy() : Account | ||
|  |     - depositMoney(money : BigDecimal) | ||
|  |     + getAccountNo() : int | ||
|  |     + getMoney() : BigDecimal | ||
|  |     + getOwner() : String | ||
|  |     - handleDeposit(money : BigDecimal, realTime : boolean) | ||
|  |     + handleEvent(accountCreateEvent : AccountCreateEvent) | ||
|  |     + handleEvent(moneyDepositEvent : MoneyDepositEvent) | ||
|  |     + handleTransferFromEvent(moneyTransferEvent : MoneyTransferEvent) | ||
|  |     + handleTransferToEvent(moneyTransferEvent : MoneyTransferEvent) | ||
|  |     - handleWithdrawal(money : BigDecimal, realTime : boolean) | ||
|  |     + setMoney(money : BigDecimal) | ||
|  |     + toString() : String | ||
|  |     - withdrawMoney(money : BigDecimal) | ||
|  |   } | ||
|  | } | ||
|  | DomainEventProcessor -->  "-processorJournal" JsonFileJournal | ||
|  | AccountCreateEvent --|> DomainEvent  | ||
|  | MoneyDepositEvent --|> DomainEvent  | ||
|  | MoneyTransferEvent --|> DomainEvent  | ||
|  | @enduml |