Skip to content

Commit adc6019

Browse files
committed
Hexagonal pattern: Remove interfaces with only one implementation
1 parent 0f2807b commit adc6019

File tree

9 files changed

+115
-274
lines changed

9 files changed

+115
-274
lines changed

hexagonal/etc/hexagonal.ucls

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<operations public="true" package="true" protected="true" private="true" static="true"/>
2323
</display>
2424
</class>
25-
<class id="3" language="java" name="com.iluwatar.hexagonal.domain.LotterySystemImpl" project="hexagonal"
25+
<class id="3" language="java" name="com.iluwatar.hexagonal.domain.LotterySystem" project="hexagonal"
2626
file="/hexagonal/src/main/java/com/iluwatar/hexagonal/domain/LotterySystemImpl.java" binary="false"
2727
corner="BOTTOM_RIGHT">
2828
<position height="167" width="421" x="1263" y="122"/>
@@ -62,7 +62,7 @@
6262
<operations public="true" package="true" protected="true" private="true" static="true"/>
6363
</display>
6464
</interface>
65-
<class id="7" language="java" name="com.iluwatar.hexagonal.service.ConsoleService" project="hexagonal"
65+
<class id="7" language="java" name="com.iluwatar.hexagonal.service.LotteryService" project="hexagonal"
6666
file="/hexagonal/src/main/java/com/iluwatar/hexagonal/service/ConsoleService.java" binary="false"
6767
corner="BOTTOM_RIGHT">
6868
<position height="113" width="421" x="2029" y="122"/>
@@ -122,7 +122,7 @@
122122
<operations public="true" package="true" protected="true" private="true" static="true"/>
123123
</display>
124124
</class>
125-
<class id="13" language="java" name="com.iluwatar.hexagonal.administration.ConsoleAdministration" project="hexagonal"
125+
<class id="13" language="java" name="com.iluwatar.hexagonal.administration.LotteryAdministration" project="hexagonal"
126126
file="/hexagonal/src/main/java/com/iluwatar/hexagonal/administration/ConsoleAdministration.java" binary="false"
127127
corner="BOTTOM_RIGHT">
128128
<position height="131" width="320" x="2490" y="122"/>

hexagonal/src/main/java/com/iluwatar/hexagonal/LotteryModule.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,12 @@
2323
package com.iluwatar.hexagonal;
2424

2525
import com.google.inject.AbstractModule;
26-
import com.iluwatar.hexagonal.administration.LotteryAdministration;
27-
import com.iluwatar.hexagonal.administration.ConsoleAdministration;
2826
import com.iluwatar.hexagonal.banking.InMemoryBank;
2927
import com.iluwatar.hexagonal.banking.WireTransfers;
3028
import com.iluwatar.hexagonal.database.InMemoryTicketRepository;
3129
import com.iluwatar.hexagonal.database.LotteryTicketRepository;
32-
import com.iluwatar.hexagonal.domain.LotterySystem;
33-
import com.iluwatar.hexagonal.domain.LotterySystemImpl;
3430
import com.iluwatar.hexagonal.notifications.LotteryNotifications;
3531
import com.iluwatar.hexagonal.notifications.StdOutNotifications;
36-
import com.iluwatar.hexagonal.service.ConsoleService;
3732
import com.iluwatar.hexagonal.service.LotteryService;
3833

3934
/**
@@ -43,10 +38,7 @@ public class LotteryModule extends AbstractModule {
4338
@Override
4439
protected void configure() {
4540
bind(LotteryTicketRepository.class).to(InMemoryTicketRepository.class);
46-
bind(LotterySystem.class).to(LotterySystemImpl.class);
4741
bind(LotteryNotifications.class).to(StdOutNotifications.class);
4842
bind(WireTransfers.class).to(InMemoryBank.class);
49-
bind(LotteryAdministration.class).to(ConsoleAdministration.class);
50-
bind(LotteryService.class).to(ConsoleService.class);
5143
}
5244
}

hexagonal/src/main/java/com/iluwatar/hexagonal/administration/ConsoleAdministration.java

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

hexagonal/src/main/java/com/iluwatar/hexagonal/administration/LotteryAdministration.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,32 +22,46 @@
2222
*/
2323
package com.iluwatar.hexagonal.administration;
2424

25+
import com.google.inject.Inject;
2526
import com.iluwatar.hexagonal.domain.LotteryNumbers;
27+
import com.iluwatar.hexagonal.domain.LotterySystem;
2628
import com.iluwatar.hexagonal.domain.LotteryTicket;
2729
import com.iluwatar.hexagonal.domain.LotteryTicketId;
2830

2931
import java.util.Map;
3032

3133
/**
3234
*
33-
* Administrator interface for lottery service.
35+
* Lottery administration implementation
3436
*
3537
*/
36-
public interface LotteryAdministration {
38+
public class LotteryAdministration {
39+
40+
private final LotterySystem lotterySystem;
41+
42+
@Inject
43+
public LotteryAdministration(LotterySystem lotterySystem) {
44+
this.lotterySystem = lotterySystem;
45+
}
3746

3847
/**
3948
* Get all the lottery tickets submitted for lottery
4049
*/
41-
Map<LotteryTicketId, LotteryTicket> getAllSubmittedTickets();
50+
public Map<LotteryTicketId, LotteryTicket> getAllSubmittedTickets() {
51+
return lotterySystem.getAllSubmittedTickets();
52+
}
4253

4354
/**
4455
* Draw lottery numbers
4556
*/
46-
LotteryNumbers performLottery();
57+
public LotteryNumbers performLottery() {
58+
return lotterySystem.performLottery();
59+
}
4760

4861
/**
4962
* Begin new lottery round
5063
*/
51-
void resetLottery();
52-
64+
public void resetLottery() {
65+
lotterySystem.resetLottery();
66+
}
5367
}

hexagonal/src/main/java/com/iluwatar/hexagonal/domain/LotterySystem.java

Lines changed: 72 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,37 +22,101 @@
2222
*/
2323
package com.iluwatar.hexagonal.domain;
2424

25+
import com.google.inject.Inject;
26+
import com.iluwatar.hexagonal.banking.WireTransfers;
27+
import com.iluwatar.hexagonal.database.LotteryTicketRepository;
28+
import com.iluwatar.hexagonal.notifications.LotteryNotifications;
29+
2530
import java.util.Map;
2631
import java.util.Optional;
2732

2833
/**
29-
* Lottery system interface
34+
* Lottery system
3035
*/
31-
public interface LotterySystem {
36+
public class LotterySystem {
37+
38+
private final LotteryTicketRepository repository;
39+
private final LotteryNotifications notifications;
40+
private final WireTransfers wireTransfers;
41+
42+
/**
43+
* Constructor
44+
*/
45+
@Inject
46+
public LotterySystem(LotteryTicketRepository repository, LotteryNotifications notifications,
47+
WireTransfers wireTransfers) {
48+
this.repository = repository;
49+
this.notifications = notifications;
50+
this.wireTransfers = wireTransfers;
51+
}
3252

3353
/**
3454
* Get all the lottery tickets submitted for lottery
3555
*/
36-
Map<LotteryTicketId, LotteryTicket> getAllSubmittedTickets();
56+
public Map<LotteryTicketId, LotteryTicket> getAllSubmittedTickets() {
57+
return repository.findAll();
58+
}
3759

3860
/**
3961
* Draw lottery numbers
4062
*/
41-
LotteryNumbers performLottery();
63+
public LotteryNumbers performLottery() {
64+
LotteryNumbers numbers = LotteryNumbers.createRandom();
65+
Map<LotteryTicketId, LotteryTicket> tickets = getAllSubmittedTickets();
66+
for (LotteryTicketId id : tickets.keySet()) {
67+
LotteryTicketCheckResult result = checkTicketForPrize(id, numbers);
68+
if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.WIN_PRIZE)) {
69+
boolean transferred = wireTransfers.transferFunds(LotteryConstants.PRIZE_AMOUNT,
70+
LotteryConstants.SERVICE_BANK_ACCOUNT, tickets.get(id).getPlayerDetails().getBankAccount());
71+
if (transferred) {
72+
notifications.notifyPrize(tickets.get(id).getPlayerDetails(), LotteryConstants.PRIZE_AMOUNT);
73+
} else {
74+
notifications.notifyPrizeError(tickets.get(id).getPlayerDetails(), LotteryConstants.PRIZE_AMOUNT);
75+
}
76+
} else if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.NO_PRIZE)) {
77+
notifications.notifyNoWin(tickets.get(id).getPlayerDetails());
78+
}
79+
}
80+
return numbers;
81+
}
4282

4383
/**
4484
* Begin new lottery round
4585
*/
46-
void resetLottery();
86+
public void resetLottery() {
87+
repository.deleteAll();
88+
}
4789

4890
/**
4991
* Submit lottery ticket to participate in the lottery
5092
*/
51-
Optional<LotteryTicketId> submitTicket(LotteryTicket ticket);
93+
public Optional<LotteryTicketId> submitTicket(LotteryTicket ticket) {
94+
boolean result = wireTransfers.transferFunds(LotteryConstants.TICKET_PRIZE,
95+
ticket.getPlayerDetails().getBankAccount(), LotteryConstants.SERVICE_BANK_ACCOUNT);
96+
if (result == false) {
97+
notifications.notifyTicketSubmitError(ticket.getPlayerDetails());
98+
return Optional.empty();
99+
}
100+
Optional<LotteryTicketId> optional = repository.save(ticket);
101+
if (optional.isPresent()) {
102+
notifications.notifyTicketSubmitted(ticket.getPlayerDetails());
103+
}
104+
return optional;
105+
}
52106

53107
/**
54108
* Check if lottery ticket has won
55109
*/
56-
LotteryTicketCheckResult checkTicketForPrize(LotteryTicketId id, LotteryNumbers winningNumbers);
57-
110+
public LotteryTicketCheckResult checkTicketForPrize(LotteryTicketId id, LotteryNumbers winningNumbers) {
111+
Optional<LotteryTicket> optional = repository.findById(id);
112+
if (optional.isPresent()) {
113+
if (optional.get().getNumbers().equals(winningNumbers)) {
114+
return new LotteryTicketCheckResult(LotteryTicketCheckResult.CheckResult.WIN_PRIZE, 1000);
115+
} else {
116+
return new LotteryTicketCheckResult(LotteryTicketCheckResult.CheckResult.NO_PRIZE);
117+
}
118+
} else {
119+
return new LotteryTicketCheckResult(LotteryTicketCheckResult.CheckResult.TICKET_NOT_SUBMITTED);
120+
}
121+
}
58122
}

hexagonal/src/main/java/com/iluwatar/hexagonal/domain/LotterySystemImpl.java

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

0 commit comments

Comments
 (0)