ElDorado-Travel-and-Tour-Management-System icon indicating copy to clipboard operation
ElDorado-Travel-and-Tour-Management-System copied to clipboard

Bad Coding Smells concerns: Duplicate Code

Open gsus25 opened this issue 1 year ago • 0 comments

THIS ISSUE IS POSTED AS A COLLEGE ASSIGNMENT I recommend applying the "Replace Type Code with State/Strategy" refactoring technique in this code. The current implementation uses a switch statement to handle different verification options in the verification method. By employing the State/Strategy pattern, you can replace this switch statement with a set of strategy classes, each representing a specific verification option. This approach enhances maintainability, readability, and adheres to the Single Responsibility Principle. The refactored code introduces a set of VerificationStrategy classes, each encapsulating the behavior for a specific verification option. The YourClass class now uses a VerificationStrategy interface and a getVerificationStrategy method to select the appropriate strategy based on the user's choice. This design promotes extensibility, making it easier to add new verification options without modifying existing code. Refactored Code:

import java.util.Scanner;

class YourClass {
    private static final Scanner scan = new Scanner(System.in);

    void verification() {
        clearConsole();
        new UserInterface().logo();
        System.out.println("\t\t\t\t\t\t======================================================");
        System.out.println("\t\t\t\t\t\t|                        User                        |");
        System.out.println("\t\t\t\t\t\t|         Please Select from the option Below        |");
        System.out.println("\t\t\t\t\t\t******************************************************");
        System.out.println("\t\t\t\t\t\t|               1. Visa Verification                 |");
        System.out.println("\t\t\t\t\t\t|               2. Passport Verification             |");
        System.out.println("\t\t\t\t\t\t|               3. Covid Certificate Verification    |");
        System.out.println("\t\t\t\t\t\t|               4. Return To Homepage                |");
        System.out.println("\t\t\t\t\t\t******************************************************");

        int choice = scan.nextInt();
        VerificationStrategy strategy = getVerificationStrategy(choice);
        strategy.verify();
    }

    private VerificationStrategy getVerificationStrategy(int choice) {
        switch (choice) {
            case 1:
                return new VisaVerificationStrategy();
            case 2:
                return new PassportVerificationStrategy();
            case 3:
                return new CovidCertificateVerificationStrategy();
            case 4:
                return new ReturnToHomepageStrategy(this);
            default:
                return new DefaultVerificationStrategy(this);
        }
    }

    private void clearConsole() {
        System.out.print("\033[H\033[2J");
    }
}

interface VerificationStrategy {
    void verify();
}

class VisaVerificationStrategy implements VerificationStrategy {
    @Override
    public void verify() {
        // Implementation for Visa Verification
    }
}

class PassportVerificationStrategy implements VerificationStrategy {
    @Override
    public void verify() {
        // Implementation for Passport Verification
    }
}

class CovidCertificateVerificationStrategy implements VerificationStrategy {
    @Override
    public void verify() {
        // Implementation for Covid Certificate Verification
    }
}

class ReturnToHomepageStrategy implements VerificationStrategy {
    private final YourClass yourClass;

    public ReturnToHomepageStrategy(YourClass yourClass) {
        this.yourClass = yourClass;
    }

    @Override
    public void verify() {
        yourClass.frontPage();
    }
}

class DefaultVerificationStrategy implements VerificationStrategy {
    private final YourClass yourClass;

    public DefaultVerificationStrategy(YourClass yourClass) {
        this.yourClass = yourClass;
    }

    @Override
    public void verify() {
        yourClass.verification();
    }
}

class UserInterface {
    // ... (existing code)
}

gsus25 avatar Jan 09 '24 02:01 gsus25