Skip to content

Commit 64824d6

Browse files
author
Serdar Hamzaoğulları
committed
Some Object Orianted refactor
1 parent 1474a50 commit 64824d6

File tree

10 files changed

+106
-71
lines changed

10 files changed

+106
-71
lines changed

event-sourcing/src/main/java/com/iluwatar/event/sourcing/api/DomainEvent.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
public abstract class DomainEvent implements Serializable {
99
private final long sequenceId;
1010
private final long createdTime;
11-
private boolean replica = false;
11+
private boolean realTime = true;
1212
private final String eventClassName;
1313

1414
public DomainEvent(long sequenceId, long createdTime, String eventClassName) {
@@ -25,12 +25,12 @@ public long getCreatedTime() {
2525
return createdTime;
2626
}
2727

28-
public boolean isReplica() {
29-
return replica;
28+
public boolean isRealTime() {
29+
return realTime;
3030
}
3131

32-
public void setReplica(boolean replica) {
33-
this.replica = replica;
32+
public void setRealTime(boolean realTime) {
33+
this.realTime = realTime;
3434
}
3535

3636
public abstract void process();

event-sourcing/src/main/java/com/iluwatar/event/sourcing/api/EventProcessor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,5 @@
66
public interface EventProcessor {
77
void process(DomainEvent domainEvent);
88
void setPrecessorJournal(ProcessorJournal precessorJournal);
9-
void addExternalEventListener(ExternalEventListener externalEventListener);
109
void recover();
1110
}

event-sourcing/src/main/java/com/iluwatar/event/sourcing/api/ExternalEventListener.java

Lines changed: 0 additions & 8 deletions
This file was deleted.

event-sourcing/src/main/java/com/iluwatar/event/sourcing/domain/Account.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
package com.iluwatar.event.sourcing.domain;
22

3+
import com.iluwatar.event.sourcing.event.AccountCreateEvent;
4+
import com.iluwatar.event.sourcing.event.MoneyDepositEvent;
5+
import com.iluwatar.event.sourcing.event.MoneyTransferEvent;
6+
import com.iluwatar.event.sourcing.event.MoneyWithdrawalEvent;
7+
import com.iluwatar.event.sourcing.gateway.Gateways;
8+
import com.iluwatar.event.sourcing.state.AccountAggregate;
9+
310
import java.math.BigDecimal;
411
import java.util.ArrayList;
512
import java.util.List;
@@ -60,4 +67,64 @@ public String toString() {
6067
", transactions=" + transactions +
6168
'}';
6269
}
70+
71+
private Transaction depositMoney(BigDecimal money) {
72+
this.money = this.money.add(money);
73+
Transaction transaction = new Transaction(accountNo,money,BigDecimal.ZERO,this.money);
74+
transactions.add(transaction);
75+
return transaction;
76+
}
77+
78+
private Transaction withdrawMoney(BigDecimal money) {
79+
this.money = this.money.subtract(money);
80+
Transaction transaction = new Transaction(accountNo,BigDecimal.ZERO,money,this.money);
81+
transactions.add(transaction);
82+
return transaction;
83+
}
84+
85+
private void handleDeposit(BigDecimal money,boolean realTime) {
86+
Transaction transaction = depositMoney(money);
87+
AccountAggregate.putAccount(this);
88+
if(realTime) {
89+
Gateways.getTransactionLogger().log(transaction);
90+
}
91+
}
92+
93+
private void handleWithdrawal(BigDecimal money, boolean realTime) {
94+
if(this.money.compareTo(money)==-1){
95+
throw new RuntimeException("Insufficient Account Balance");
96+
}
97+
98+
Transaction transaction = withdrawMoney(money);
99+
AccountAggregate.putAccount(this);
100+
if(realTime) {
101+
Gateways.getTransactionLogger().log(transaction);
102+
}
103+
}
104+
105+
public void handleEvent(MoneyDepositEvent moneyDepositEvent) {
106+
handleDeposit(moneyDepositEvent.getMoney(),moneyDepositEvent.isRealTime());
107+
}
108+
109+
110+
public void handleEvent(MoneyWithdrawalEvent moneyWithdrawalEvent) {
111+
handleWithdrawal(moneyWithdrawalEvent.getMoney(),moneyWithdrawalEvent.isRealTime());
112+
}
113+
114+
115+
public void handleTransferFromEvent(MoneyTransferEvent moneyTransferEvent) {
116+
handleWithdrawal(moneyTransferEvent.getMoney(),moneyTransferEvent.isRealTime());
117+
}
118+
119+
public void handleTransferToEvent(MoneyTransferEvent moneyTransferEvent) {
120+
handleDeposit(moneyTransferEvent.getMoney(),moneyTransferEvent.isRealTime());
121+
}
122+
123+
public void handleEvent(AccountCreateEvent accountCreateEvent) {
124+
AccountAggregate.putAccount(this);
125+
// check if this event is replicated from journal before calling an external gateway function
126+
if(accountCreateEvent.isRealTime()) {
127+
Gateways.getAccountCreateContractSender().sendContractInfo(this);
128+
}
129+
}
63130
}

event-sourcing/src/main/java/com/iluwatar/event/sourcing/event/AccountCreateEvent.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.iluwatar.event.sourcing.api.DomainEvent;
44
import com.iluwatar.event.sourcing.domain.Account;
5-
import com.iluwatar.event.sourcing.gateway.Gateways;
65
import com.iluwatar.event.sourcing.state.AccountAggregate;
76

87
/**
@@ -33,11 +32,6 @@ public void process() {
3332
throw new RuntimeException("Account already exists");
3433
}
3534
account = new Account(accountNo,owner);
36-
AccountAggregate.putAccount(account);
37-
38-
// check if this event is replicated from journal before calling an external gateway function
39-
if(!isReplica()) {
40-
Gateways.getAccountCreateContractSender().sendContractInfo(account);
41-
}
35+
account.handleEvent(this);
4236
}
4337
}

event-sourcing/src/main/java/com/iluwatar/event/sourcing/event/MoneyDepositEvent.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import com.iluwatar.event.sourcing.api.DomainEvent;
44
import com.iluwatar.event.sourcing.domain.Account;
5-
import com.iluwatar.event.sourcing.domain.Transaction;
6-
import com.iluwatar.event.sourcing.gateway.Gateways;
75
import com.iluwatar.event.sourcing.state.AccountAggregate;
86

97
import java.math.BigDecimal;
@@ -21,18 +19,20 @@ public MoneyDepositEvent(long sequenceId, long createdTime, int accountNo,BigDec
2119
this.accountNo = accountNo;
2220
}
2321

22+
public BigDecimal getMoney() {
23+
return money;
24+
}
25+
26+
public int getAccountNo() {
27+
return accountNo;
28+
}
29+
2430
@Override
2531
public void process() {
2632
Account account = AccountAggregate.getAccount(accountNo);
2733
if(account==null){
2834
throw new RuntimeException("Account not found");
2935
}
30-
account.setMoney(account.getMoney().add(money));
31-
Transaction transaction = new Transaction(accountNo,money,BigDecimal.ZERO,account.getMoney());
32-
account.getTransactions().add(transaction);
33-
AccountAggregate.putAccount(account);
34-
if(!isReplica()) {
35-
Gateways.getTransactionLogger().log(transaction);
36-
}
36+
account.handleEvent(this);
3737
}
3838
}

event-sourcing/src/main/java/com/iluwatar/event/sourcing/event/MoneyTransferEvent.java

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import com.iluwatar.event.sourcing.api.DomainEvent;
44
import com.iluwatar.event.sourcing.domain.Account;
5-
import com.iluwatar.event.sourcing.domain.Transaction;
6-
import com.iluwatar.event.sourcing.gateway.Gateways;
75
import com.iluwatar.event.sourcing.state.AccountAggregate;
86

97
import java.math.BigDecimal;
@@ -23,6 +21,18 @@ public MoneyTransferEvent(long sequenceId, long createdTime, BigDecimal money, i
2321
this.accountNoTo = accountNoTo;
2422
}
2523

24+
public BigDecimal getMoney() {
25+
return money;
26+
}
27+
28+
public int getAccountNoFrom() {
29+
return accountNoFrom;
30+
}
31+
32+
public int getAccountNoTo() {
33+
return accountNoTo;
34+
}
35+
2636
@Override
2737
public void process() {
2838
Account accountFrom = AccountAggregate.getAccount(accountNoFrom);
@@ -33,24 +43,8 @@ public void process() {
3343
if(accountTo==null){
3444
throw new RuntimeException("Account not found"+ accountTo);
3545
}
36-
if(accountFrom.getMoney().compareTo(money)==-1){
37-
throw new RuntimeException("Insufficient Account Balance");
38-
}
39-
accountFrom.setMoney(accountFrom.getMoney().subtract(money));
40-
accountTo.setMoney(accountTo.getMoney().add(money));
41-
42-
Transaction transactionFrom = new Transaction(accountNoFrom,BigDecimal.ZERO,money,accountFrom.getMoney());
43-
accountFrom.getTransactions().add(transactionFrom);
44-
45-
Transaction transactionTo = new Transaction(accountNoTo,money,BigDecimal.ZERO,accountTo.getMoney());
46-
accountTo.getTransactions().add(transactionTo);
4746

48-
AccountAggregate.putAccount(accountFrom);
49-
AccountAggregate.putAccount(accountTo);
50-
51-
if(!isReplica()) {
52-
Gateways.getTransactionLogger().log(transactionFrom);
53-
Gateways.getTransactionLogger().log(transactionTo);
54-
}
47+
accountFrom.handleTransferFromEvent(this);
48+
accountTo.handleTransferToEvent(this);
5549
}
5650
}

event-sourcing/src/main/java/com/iluwatar/event/sourcing/event/MoneyWithdrawalEvent.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import com.iluwatar.event.sourcing.api.DomainEvent;
44
import com.iluwatar.event.sourcing.domain.Account;
5-
import com.iluwatar.event.sourcing.domain.Transaction;
6-
import com.iluwatar.event.sourcing.gateway.Gateways;
75
import com.iluwatar.event.sourcing.state.AccountAggregate;
86

97
import java.math.BigDecimal;
@@ -21,18 +19,20 @@ public MoneyWithdrawalEvent(long sequenceId, long createdTime, int accountNo,Big
2119
this.accountNo = accountNo;
2220
}
2321

22+
public BigDecimal getMoney() {
23+
return money;
24+
}
25+
26+
public int getAccountNo() {
27+
return accountNo;
28+
}
29+
2430
@Override
2531
public void process() {
2632
Account account = AccountAggregate.getAccount(accountNo);
2733
if(account==null){
2834
throw new RuntimeException("Account not found");
2935
}
30-
account.setMoney(account.getMoney().subtract(money));
31-
Transaction transaction = new Transaction(accountNo,BigDecimal.ZERO,money,account.getMoney());
32-
account.getTransactions().add(transaction);
33-
AccountAggregate.putAccount(account);
34-
if(!isReplica()) {
35-
Gateways.getTransactionLogger().log(transaction);
36-
}
36+
account.handleEvent(this);
3737
}
3838
}

event-sourcing/src/main/java/com/iluwatar/event/sourcing/journal/JsonFileJournal.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public DomainEvent readNext() {
9393
throw new RuntimeException("Journal Event not recegnized");
9494
}
9595

96-
domainEvent.setReplica(true);
96+
domainEvent.setRealTime(false);
9797
return domainEvent;
9898
}
9999
}

event-sourcing/src/main/java/com/iluwatar/event/sourcing/processor/DomainEventProcessor.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,17 @@
22

33
import com.iluwatar.event.sourcing.api.DomainEvent;
44
import com.iluwatar.event.sourcing.api.EventProcessor;
5-
import com.iluwatar.event.sourcing.api.ExternalEventListener;
65
import com.iluwatar.event.sourcing.api.ProcessorJournal;
76

8-
import java.util.ArrayList;
9-
import java.util.List;
10-
117
/**
128
* Created by serdarh on 06.08.2017.
139
*/
1410
public class DomainEventProcessor implements EventProcessor {
1511

1612
private ProcessorJournal precessorJournal;
17-
private List<ExternalEventListener> externalEventListeners = new ArrayList<>();
1813

1914
@Override
2015
public void process(DomainEvent domainEvent) {
21-
externalEventListeners.forEach(externalEventListener -> externalEventListener.notify(domainEvent));
2216
domainEvent.process();
2317
precessorJournal.write(domainEvent);
2418
}
@@ -28,11 +22,6 @@ public void setPrecessorJournal(ProcessorJournal precessorJournal) {
2822
this.precessorJournal = precessorJournal;
2923
}
3024

31-
@Override
32-
public void addExternalEventListener(ExternalEventListener externalEventListener) {
33-
externalEventListeners.add(externalEventListener);
34-
}
35-
3625
@Override
3726
public void recover() {
3827
DomainEvent domainEvent;

0 commit comments

Comments
 (0)