Created
June 26, 2024 23:57
-
-
Save franreyes/8f8d24a9d5c6848b39eb7b667f3c49cd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
BankAccount { | |
public void Spend(double amount) { ... } | |
} | |
/* ---- */ | |
OneClient { | |
... | |
bankAccount.Spend(amount); | |
... | |
} | |
/* ---- */ | |
OtherClient { | |
... | |
bankAccount.Spend(amount); | |
... | |
} | |
/* new changes => log expenses that exceed 1000 euros in a text file */ | |
// Refactor step 1 | |
BankAccount { | |
public BankAccount() { // used by clients in production code | |
} | |
public void Spend(double amount) { // used by clients in production code | |
// ... | |
if(amount > 1000) { | |
LogExpense(amount); | |
} | |
} | |
private void LogExpense(amount) { | |
} | |
} | |
// Refactor step 2 | |
BankAccount { | |
public BankAccount() { // used by clients in production code | |
this.expenseLogger = new NoExpenseLogger(); | |
} | |
public void Spend(double amount) { // used by clients in production code | |
// ... | |
if(amount > 1000) { | |
LogExpense(amount); | |
} | |
} | |
private void LogExpense(amount) { | |
this.expenseLogger.Log(amount); | |
} | |
} | |
NoSpendLogger { | |
public void Log(amount) { } | |
} | |
// Refactor step 3 | |
BankAccount { | |
public BankAccount() { // used by clients in production code | |
this.expenseLogger = new NoExpenseLogger(); | |
} | |
public BankAccount(SpendLogger expendLogger) { // no used by clients in production code | |
this.spendLogger = expendeLogger; | |
} | |
public void Spend(double amount) { // used by clients in production code | |
// ... | |
if(amount > 1000) { | |
LogExpense(amount); | |
} | |
} | |
private void LogExpense(amount) { | |
this.expenseLogger.Log(amount); | |
} | |
} | |
NoSpendLogger { | |
public void Log(amount) { } | |
} | |
Interface SpendLogger { | |
void Log(amount) | |
} | |
// Final state: new feture working | |
BankAccount { | |
public BankAccount(SpendLogger expendLogger) { // used by clients in production code | |
this.spendLogger = expendeLogger; | |
} | |
public void Spend(double amount) { // used by clients in production code | |
// ... | |
if(amount > 1000) { | |
this.expenseLogger.Log(amount); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment