Hexagonal pattern: Remove unnecessary factories

This commit is contained in:
Ilkka Seppälä 2016-09-17 09:07:06 +03:00
parent 914d1353a1
commit 6aa58e8ae6
13 changed files with 66 additions and 81 deletions

View File

@ -180,7 +180,7 @@ public class MongoTicketRepository implements LotteryTicketRepository {
}
private LotteryTicket docToTicket(Document doc) {
PlayerDetails playerDetails = PlayerDetails.create(doc.getString("email"), doc.getString("bank"),
PlayerDetails playerDetails = new PlayerDetails(doc.getString("email"), doc.getString("bank"),
doc.getString("phone"));
int[] numArray = Arrays.asList(doc.getString("numbers").split(",")).stream().mapToInt(Integer::parseInt).toArray();
HashSet<Integer> numbers = new HashSet<>();
@ -188,6 +188,6 @@ public class MongoTicketRepository implements LotteryTicketRepository {
numbers.add(num);
}
LotteryNumbers lotteryNumbers = LotteryNumbers.create(numbers);
return LotteryTicket.create(new LotteryTicketId(doc.getInteger("ticketId")), playerDetails, lotteryNumbers);
return new LotteryTicket(new LotteryTicketId(doc.getInteger("ticketId")), playerDetails, lotteryNumbers);
}
}

View File

@ -39,7 +39,6 @@ public class LotteryAdministration {
private final LotteryTicketRepository repository;
private final LotteryEventLog notifications;
private final WireTransfers wireTransfers;
private final LotteryTicketChecker checker;
/**
* Constructor
@ -50,7 +49,6 @@ public class LotteryAdministration {
this.repository = repository;
this.notifications = notifications;
this.wireTransfers = wireTransfers;
this.checker = new LotteryTicketChecker(this.repository);
}
/**
@ -67,7 +65,7 @@ public class LotteryAdministration {
LotteryNumbers numbers = LotteryNumbers.createRandom();
Map<LotteryTicketId, LotteryTicket> tickets = getAllSubmittedTickets();
for (LotteryTicketId id : tickets.keySet()) {
LotteryTicketCheckResult result = checker.checkTicketForPrize(id, numbers);
LotteryTicketCheckResult result = new LotteryTicketChecker(repository).checkTicketForPrize(id, numbers);
if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.WIN_PRIZE)) {
boolean transferred = wireTransfers.transferFunds(LotteryConstants.PRIZE_AMOUNT,
LotteryConstants.SERVICE_BANK_ACCOUNT, tickets.get(id).getPlayerDetails().getBankAccount());

View File

@ -29,6 +29,9 @@ package com.iluwatar.hexagonal.domain;
*/
public class LotteryConstants {
private LotteryConstants() {
}
public static final int PRIZE_AMOUNT = 100000;
public static final String SERVICE_BANK_ACCOUNT = "123-123";
public static final int TICKET_PRIZE = 3;

View File

@ -39,7 +39,6 @@ public class LotteryService {
private final LotteryTicketRepository repository;
private final LotteryEventLog notifications;
private final WireTransfers wireTransfers;
private final LotteryTicketChecker checker;
/**
* Constructor
@ -50,7 +49,6 @@ public class LotteryService {
this.repository = repository;
this.notifications = notifications;
this.wireTransfers = wireTransfers;
this.checker = new LotteryTicketChecker(this.repository);
}
/**
@ -74,6 +72,6 @@ public class LotteryService {
* Check if lottery ticket has won
*/
public LotteryTicketCheckResult checkTicketForPrize(LotteryTicketId id, LotteryNumbers winningNumbers) {
return checker.checkTicketForPrize(id, winningNumbers);
return new LotteryTicketChecker(repository).checkTicketForPrize(id, winningNumbers);
}
}

View File

@ -36,19 +36,12 @@ public class LotteryTicket {
/**
* Constructor.
*/
private LotteryTicket(LotteryTicketId id, PlayerDetails details, LotteryNumbers numbers) {
public LotteryTicket(LotteryTicketId id, PlayerDetails details, LotteryNumbers numbers) {
this.id = id;
playerDetails = details;
lotteryNumbers = numbers;
}
/**
* Factory for creating lottery tickets;
*/
public static LotteryTicket create(LotteryTicketId id, PlayerDetails details, LotteryNumbers numbers) {
return new LotteryTicket(id, details, numbers);
}
/**
* @return player details
*/

View File

@ -36,19 +36,12 @@ public class PlayerDetails {
/**
* Constructor.
*/
private PlayerDetails(String email, String bankAccount, String phone) {
public PlayerDetails(String email, String bankAccount, String phone) {
emailAddress = email;
bankAccountNumber = bankAccount;
phoneNumber = phone;
}
/**
* Factory for creating new objects.
*/
public static PlayerDetails create(String email, String bankAccount, String phone) {
return new PlayerDetails(email, bankAccount, phone);
}
/**
* @return email
*/

View File

@ -43,45 +43,45 @@ public class SampleData {
static {
PLAYERS = new ArrayList<>();
PLAYERS.add(PlayerDetails.create("john@google.com", "312-342", "+3242434242"));
PLAYERS.add(PlayerDetails.create("mary@google.com", "234-987", "+23452346"));
PLAYERS.add(PlayerDetails.create("steve@google.com", "833-836", "+63457543"));
PLAYERS.add(PlayerDetails.create("wayne@google.com", "319-826", "+24626"));
PLAYERS.add(PlayerDetails.create("johnie@google.com", "983-322", "+3635635"));
PLAYERS.add(PlayerDetails.create("andy@google.com", "934-734", "+0898245"));
PLAYERS.add(PlayerDetails.create("richard@google.com", "536-738", "+09845325"));
PLAYERS.add(PlayerDetails.create("kevin@google.com", "453-936", "+2423532"));
PLAYERS.add(PlayerDetails.create("arnold@google.com", "114-988", "+5646346524"));
PLAYERS.add(PlayerDetails.create("ian@google.com", "663-765", "+928394235"));
PLAYERS.add(PlayerDetails.create("robin@google.com", "334-763", "+35448"));
PLAYERS.add(PlayerDetails.create("ted@google.com", "735-964", "+98752345"));
PLAYERS.add(PlayerDetails.create("larry@google.com", "734-853", "+043842423"));
PLAYERS.add(PlayerDetails.create("calvin@google.com", "334-746", "+73294135"));
PLAYERS.add(PlayerDetails.create("jacob@google.com", "444-766", "+358042354"));
PLAYERS.add(PlayerDetails.create("edwin@google.com", "895-345", "+9752435"));
PLAYERS.add(PlayerDetails.create("mary@google.com", "760-009", "+34203542"));
PLAYERS.add(PlayerDetails.create("lolita@google.com", "425-907", "+9872342"));
PLAYERS.add(PlayerDetails.create("bruno@google.com", "023-638", "+673824122"));
PLAYERS.add(PlayerDetails.create("peter@google.com", "335-886", "+5432503945"));
PLAYERS.add(PlayerDetails.create("warren@google.com", "225-946", "+9872341324"));
PLAYERS.add(PlayerDetails.create("monica@google.com", "265-748", "+134124"));
PLAYERS.add(PlayerDetails.create("ollie@google.com", "190-045", "+34453452"));
PLAYERS.add(PlayerDetails.create("yngwie@google.com", "241-465", "+9897641231"));
PLAYERS.add(PlayerDetails.create("lars@google.com", "746-936", "+42345298345"));
PLAYERS.add(PlayerDetails.create("bobbie@google.com", "946-384", "+79831742"));
PLAYERS.add(PlayerDetails.create("tyron@google.com", "310-992", "+0498837412"));
PLAYERS.add(PlayerDetails.create("tyrell@google.com", "032-045", "+67834134"));
PLAYERS.add(PlayerDetails.create("nadja@google.com", "000-346", "+498723"));
PLAYERS.add(PlayerDetails.create("wendy@google.com", "994-989", "+987324454"));
PLAYERS.add(PlayerDetails.create("luke@google.com", "546-634", "+987642435"));
PLAYERS.add(PlayerDetails.create("bjorn@google.com", "342-874", "+7834325"));
PLAYERS.add(PlayerDetails.create("lisa@google.com", "024-653", "+980742154"));
PLAYERS.add(PlayerDetails.create("anton@google.com", "834-935", "+876423145"));
PLAYERS.add(PlayerDetails.create("bruce@google.com", "284-936", "+09843212345"));
PLAYERS.add(PlayerDetails.create("ray@google.com", "843-073", "+678324123"));
PLAYERS.add(PlayerDetails.create("ron@google.com", "637-738", "+09842354"));
PLAYERS.add(PlayerDetails.create("xavier@google.com", "143-947", "+375245"));
PLAYERS.add(PlayerDetails.create("harriet@google.com", "842-404", "+131243252"));
PLAYERS.add(new PlayerDetails("john@google.com", "312-342", "+3242434242"));
PLAYERS.add(new PlayerDetails("mary@google.com", "234-987", "+23452346"));
PLAYERS.add(new PlayerDetails("steve@google.com", "833-836", "+63457543"));
PLAYERS.add(new PlayerDetails("wayne@google.com", "319-826", "+24626"));
PLAYERS.add(new PlayerDetails("johnie@google.com", "983-322", "+3635635"));
PLAYERS.add(new PlayerDetails("andy@google.com", "934-734", "+0898245"));
PLAYERS.add(new PlayerDetails("richard@google.com", "536-738", "+09845325"));
PLAYERS.add(new PlayerDetails("kevin@google.com", "453-936", "+2423532"));
PLAYERS.add(new PlayerDetails("arnold@google.com", "114-988", "+5646346524"));
PLAYERS.add(new PlayerDetails("ian@google.com", "663-765", "+928394235"));
PLAYERS.add(new PlayerDetails("robin@google.com", "334-763", "+35448"));
PLAYERS.add(new PlayerDetails("ted@google.com", "735-964", "+98752345"));
PLAYERS.add(new PlayerDetails("larry@google.com", "734-853", "+043842423"));
PLAYERS.add(new PlayerDetails("calvin@google.com", "334-746", "+73294135"));
PLAYERS.add(new PlayerDetails("jacob@google.com", "444-766", "+358042354"));
PLAYERS.add(new PlayerDetails("edwin@google.com", "895-345", "+9752435"));
PLAYERS.add(new PlayerDetails("mary@google.com", "760-009", "+34203542"));
PLAYERS.add(new PlayerDetails("lolita@google.com", "425-907", "+9872342"));
PLAYERS.add(new PlayerDetails("bruno@google.com", "023-638", "+673824122"));
PLAYERS.add(new PlayerDetails("peter@google.com", "335-886", "+5432503945"));
PLAYERS.add(new PlayerDetails("warren@google.com", "225-946", "+9872341324"));
PLAYERS.add(new PlayerDetails("monica@google.com", "265-748", "+134124"));
PLAYERS.add(new PlayerDetails("ollie@google.com", "190-045", "+34453452"));
PLAYERS.add(new PlayerDetails("yngwie@google.com", "241-465", "+9897641231"));
PLAYERS.add(new PlayerDetails("lars@google.com", "746-936", "+42345298345"));
PLAYERS.add(new PlayerDetails("bobbie@google.com", "946-384", "+79831742"));
PLAYERS.add(new PlayerDetails("tyron@google.com", "310-992", "+0498837412"));
PLAYERS.add(new PlayerDetails("tyrell@google.com", "032-045", "+67834134"));
PLAYERS.add(new PlayerDetails("nadja@google.com", "000-346", "+498723"));
PLAYERS.add(new PlayerDetails("wendy@google.com", "994-989", "+987324454"));
PLAYERS.add(new PlayerDetails("luke@google.com", "546-634", "+987642435"));
PLAYERS.add(new PlayerDetails("bjorn@google.com", "342-874", "+7834325"));
PLAYERS.add(new PlayerDetails("lisa@google.com", "024-653", "+980742154"));
PLAYERS.add(new PlayerDetails("anton@google.com", "834-935", "+876423145"));
PLAYERS.add(new PlayerDetails("bruce@google.com", "284-936", "+09843212345"));
PLAYERS.add(new PlayerDetails("ray@google.com", "843-073", "+678324123"));
PLAYERS.add(new PlayerDetails("ron@google.com", "637-738", "+09842354"));
PLAYERS.add(new PlayerDetails("xavier@google.com", "143-947", "+375245"));
PLAYERS.add(new PlayerDetails("harriet@google.com", "842-404", "+131243252"));
InMemoryBank wireTransfers = new InMemoryBank();
Random random = new Random();
for (int i = 0; i < PLAYERS.size(); i++) {
@ -95,7 +95,7 @@ public class SampleData {
*/
public static void submitTickets(LotteryService lotteryService, int numTickets) {
for (int i = 0; i < numTickets; i++) {
LotteryTicket ticket = LotteryTicket.create(new LotteryTicketId(),
LotteryTicket ticket = new LotteryTicket(new LotteryTicketId(),
getRandomPlayerDetails(), LotteryNumbers.createRandom());
lotteryService.submitTicket(ticket);
}

View File

@ -76,7 +76,7 @@ public class ConsoleLottery {
String account = readString(scanner);
System.out.println("What is your phone number?");
String phone = readString(scanner);
PlayerDetails details = PlayerDetails.create(email, account, phone);
PlayerDetails details = new PlayerDetails(email, account, phone);
System.out.println("Give 4 comma separated lottery numbers?");
String numbers = readString(scanner);
try {
@ -86,7 +86,7 @@ public class ConsoleLottery {
chosen.add(Integer.parseInt(parts[i]));
}
LotteryNumbers lotteryNumbers = LotteryNumbers.create(chosen);
LotteryTicket lotteryTicket = LotteryTicket.create(new LotteryTicketId(), details, lotteryNumbers);
LotteryTicket lotteryTicket = new LotteryTicket(new LotteryTicketId(), details, lotteryNumbers);
Optional<LotteryTicketId> id = service.submitTicket(lotteryTicket);
if (id.isPresent()) {
System.out.println("Submitted lottery ticket with id: " + id.get());

View File

@ -76,9 +76,9 @@ public class MongoTicketRepositoryTest {
@Test
public void testCrudOperations() {
// create new lottery ticket and save it
PlayerDetails details = PlayerDetails.create("foo@bar.com", "123-123", "07001234");
PlayerDetails details = new PlayerDetails("foo@bar.com", "123-123", "07001234");
LotteryNumbers random = LotteryNumbers.createRandom();
LotteryTicket original = LotteryTicket.create(new LotteryTicketId(), details, random);
LotteryTicket original = new LotteryTicket(new LotteryTicketId(), details, random);
Optional<LotteryTicketId> saved = repository.save(original);
assertEquals(1, repository.getTicketsCollection().count());
assertTrue(saved.isPresent());

View File

@ -34,16 +34,16 @@ public class LotteryTicketTest {
@Test
public void testEquals() {
PlayerDetails details1 = PlayerDetails.create("bob@foo.bar", "1212-121212", "+34332322");
PlayerDetails details1 = new PlayerDetails("bob@foo.bar", "1212-121212", "+34332322");
LotteryNumbers numbers1 = LotteryNumbers.create(new HashSet<Integer>(Arrays.asList(1, 2, 3, 4)));
LotteryTicket ticket1 = LotteryTicket.create(new LotteryTicketId(), details1, numbers1);
PlayerDetails details2 = PlayerDetails.create("bob@foo.bar", "1212-121212", "+34332322");
LotteryTicket ticket1 = new LotteryTicket(new LotteryTicketId(), details1, numbers1);
PlayerDetails details2 = new PlayerDetails("bob@foo.bar", "1212-121212", "+34332322");
LotteryNumbers numbers2 = LotteryNumbers.create(new HashSet<Integer>(Arrays.asList(1, 2, 3, 4)));
LotteryTicket ticket2 = LotteryTicket.create(new LotteryTicketId(), details2, numbers2);
LotteryTicket ticket2 = new LotteryTicket(new LotteryTicketId(), details2, numbers2);
assertEquals(ticket1, ticket2);
PlayerDetails details3 = PlayerDetails.create("elsa@foo.bar", "1223-121212", "+49332322");
PlayerDetails details3 = new PlayerDetails("elsa@foo.bar", "1223-121212", "+49332322");
LotteryNumbers numbers3 = LotteryNumbers.create(new HashSet<Integer>(Arrays.asList(1, 2, 3, 8)));
LotteryTicket ticket3 = LotteryTicket.create(new LotteryTicketId(), details3, numbers3);
LotteryTicket ticket3 = new LotteryTicket(new LotteryTicketId(), details3, numbers3);
assertFalse(ticket1.equals(ticket3));
}
}

View File

@ -36,10 +36,10 @@ public class PlayerDetailsTest {
@Test
public void testEquals() {
PlayerDetails details1 = PlayerDetails.create("tom@foo.bar", "11212-123434", "+12323425");
PlayerDetails details2 = PlayerDetails.create("tom@foo.bar", "11212-123434", "+12323425");
PlayerDetails details1 = new PlayerDetails("tom@foo.bar", "11212-123434", "+12323425");
PlayerDetails details2 = new PlayerDetails("tom@foo.bar", "11212-123434", "+12323425");
assertEquals(details1, details2);
PlayerDetails details3 = PlayerDetails.create("john@foo.bar", "16412-123439", "+34323432");
PlayerDetails details3 = new PlayerDetails("john@foo.bar", "16412-123439", "+34323432");
assertFalse(details1.equals(details3));
}
}

View File

@ -59,7 +59,7 @@ public class MongoEventLogTest {
@Test
public void testFundTransfers() {
PlayerDetails playerDetails = PlayerDetails.create("john@wayne.com", "000-000", "03432534543");
PlayerDetails playerDetails = new PlayerDetails("john@wayne.com", "000-000", "03432534543");
mongoEventLog.prizeError(playerDetails, 1000);
assertEquals(1, mongoEventLog.getEventsCollection().count());
mongoEventLog.prizeError(playerDetails, 1000);

View File

@ -50,8 +50,8 @@ public class LotteryTestUtils {
*/
public static LotteryTicket createLotteryTicket(String email, String account, String phone,
Set<Integer> givenNumbers) {
PlayerDetails details = PlayerDetails.create(email, account, phone);
PlayerDetails details = new PlayerDetails(email, account, phone);
LotteryNumbers numbers = LotteryNumbers.create(givenNumbers);
return LotteryTicket.create(new LotteryTicketId(), details, numbers);
return new LotteryTicket(new LotteryTicketId(), details, numbers);
}
}