From 14f14825033aba09915f4e0ae5751f947d1ddb6b Mon Sep 17 00:00:00 2001 From: jihwooon Date: Thu, 6 Jun 2024 17:30:07 +0900 Subject: [PATCH] =?UTF-8?q?Refactor:=20=EA=B0=9D=EC=B2=B4=20=EA=B0=84?= =?UTF-8?q?=EC=9D=98=20=ED=98=91=EB=A0=A5=20=EB=B0=A9=EC=8B=9D=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TicketSeller가 Audience에게 티켓을 판매하도록 변경 - Audience가 Bag을 통해 티켓을 구매하도록 변경 - Bag이 초대장 소지 여부에 따라 티켓 구매 로직을 처리하도록 변경 - TicketOffice의 getTicket 메서드를 통해 티켓을 발급하도록 변경 - 관련 클래스들의 생성자를 간소화하고 접근 제어자 변경 - 이번 리팩토링을 통해 객체 간의 협력 방식을 개선하고, 불필요한 메서드 호출을 줄여 코드의 가독성과 유지보수성을 높였습니다. --- src/ticket/audience.ts | 11 ++++------- src/ticket/bag.ts | 21 +++++++++++++-------- src/ticket/theater.ts | 16 ++-------------- src/ticket/ticketOffice.ts | 9 +-------- src/ticket/ticketSeller.ts | 11 ++++------- 5 files changed, 24 insertions(+), 44 deletions(-) diff --git a/src/ticket/audience.ts b/src/ticket/audience.ts index fb285f2..3d9ebfa 100644 --- a/src/ticket/audience.ts +++ b/src/ticket/audience.ts @@ -1,13 +1,10 @@ import { Bag } from './bag'; +import { Ticket } from './ticket'; export class Audience { - private readonly bag: Bag; + constructor(private bag: Bag) {} - constructor(bag: Bag) { - this.bag = bag; - } - - get getBag(): Bag { - return this.bag; + buy(ticket: Ticket): number { + return this.bag.hold(ticket); } } diff --git a/src/ticket/bag.ts b/src/ticket/bag.ts index 8942c71..04199b4 100644 --- a/src/ticket/bag.ts +++ b/src/ticket/bag.ts @@ -2,16 +2,9 @@ import { Invitation } from './invitation'; import { Ticket } from './ticket'; export class Bag { - private amount: number; - - private invitation: Invitation; - private ticket: Ticket; - constructor(invitation: Invitation, amount: number) { - this.invitation = invitation; - this.amount = amount; - } + constructor(private invitation: Invitation, private amount: number) {} public hasInvitation(): boolean { return this.ticket != null; @@ -28,4 +21,16 @@ export class Bag { public plusAmount(amount: number) { this.amount += amount; } + + public hold(ticket: Ticket) { + if (this.hasInvitation()) { + this.setTicket(ticket); + return 0; + } + + this.setTicket(ticket); + this.minusAmount(ticket.getFee); + + return ticket.getFee; + } } diff --git a/src/ticket/theater.ts b/src/ticket/theater.ts index 3a9f48c..21d6e8e 100644 --- a/src/ticket/theater.ts +++ b/src/ticket/theater.ts @@ -2,21 +2,9 @@ import { Audience } from './audience'; import { TicketSeller } from './ticketSeller'; export class Theater { - private ticketSeller: TicketSeller; - - constructor(ticketSeller: TicketSeller) { - this.ticketSeller = ticketSeller; - } + constructor(private ticketSeller: TicketSeller) {} public enter(audience: Audience): void { - if (audience.getBag.hasInvitation()) { - const ticket = this.ticketSeller.getTicketOffice.getTicket; - audience.getBag.setTicket(ticket); - } else { - const ticket = this.ticketSeller.getTicketOffice.getTicket; - audience.getBag.minusAmount(ticket.getFee); - this.ticketSeller.getTicketOffice.plusAmount(ticket.getFee); - audience.getBag.setTicket(ticket); - } + this.ticketSeller.sellTo(audience); } } diff --git a/src/ticket/ticketOffice.ts b/src/ticket/ticketOffice.ts index c39c74a..8a1aeb1 100644 --- a/src/ticket/ticketOffice.ts +++ b/src/ticket/ticketOffice.ts @@ -1,14 +1,7 @@ import { Ticket } from './ticket'; export class TicketOffice { - private amount: number; - - private tickets: Array; - - constructor(amount: number, tickets: Array) { - this.amount = amount; - this.tickets = tickets; - } + constructor(private amount: number, private tickets: Array) {} get getTicket(): Ticket { return this.tickets.pop(); diff --git a/src/ticket/ticketSeller.ts b/src/ticket/ticketSeller.ts index 2cfe2f7..fb5f240 100644 --- a/src/ticket/ticketSeller.ts +++ b/src/ticket/ticketSeller.ts @@ -1,13 +1,10 @@ import { TicketOffice } from './ticketOffice'; +import { Audience } from './audience'; export class TicketSeller { - private readonly ticketOffice: TicketOffice; + constructor(private ticketOffice: TicketOffice) {} - constructor(ticketOffice: TicketOffice) { - this.ticketOffice = ticketOffice; - } - - get getTicketOffice(): TicketOffice { - return this.ticketOffice; + sellTo(audience: Audience) { + this.ticketOffice.plusAmount(audience.buy(this.ticketOffice.getTicket)); } }