Skip to content

Instantly share code, notes, and snippets.

@franreyes
Created June 26, 2024 23:57
Show Gist options
  • Save franreyes/8f8d24a9d5c6848b39eb7b667f3c49cd to your computer and use it in GitHub Desktop.
Save franreyes/8f8d24a9d5c6848b39eb7b667f3c49cd to your computer and use it in GitHub Desktop.
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