From 540adbb380284f6adc45b871927ab46b6f9bcfe4 Mon Sep 17 00:00:00 2001 From: keshav Date: Tue, 3 Aug 2021 00:14:22 +0530 Subject: [PATCH] fix single responsibility principle violation --- .../after/Employee.java | 60 +++++++++++++++++++ .../after/EmployeeRepository.java | 19 ++++++ .../after/FullTimeEmployee.java | 8 +++ .../after/PartTimeEmployee.java | 8 +++ .../after/SaveEmployeesMain.java | 17 ++++++ .../after/SaveToDisk.java | 40 +++++++++++++ 6 files changed, 152 insertions(+) create mode 100644 src/oops/SOLID/singleResponsibilityPrinciple/after/Employee.java create mode 100644 src/oops/SOLID/singleResponsibilityPrinciple/after/EmployeeRepository.java create mode 100644 src/oops/SOLID/singleResponsibilityPrinciple/after/FullTimeEmployee.java create mode 100644 src/oops/SOLID/singleResponsibilityPrinciple/after/PartTimeEmployee.java create mode 100644 src/oops/SOLID/singleResponsibilityPrinciple/after/SaveEmployeesMain.java create mode 100644 src/oops/SOLID/singleResponsibilityPrinciple/after/SaveToDisk.java diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/after/Employee.java b/src/oops/SOLID/singleResponsibilityPrinciple/after/Employee.java new file mode 100644 index 00000000..d60e5020 --- /dev/null +++ b/src/oops/SOLID/singleResponsibilityPrinciple/after/Employee.java @@ -0,0 +1,60 @@ +package oops.SOLID.singleResponsibilityPrinciple.after; + +/* +Models an employee form a business perspective + */ +public abstract class Employee { + private String firstName; + private String lastName; + private int monthlyIncome; + private int nbHoursPerWeek; + + public Employee(String fullName, int monthlyIncome){ + setMonthlyIncome(monthlyIncome); + + String[] names = fullName.split(" "); + this.firstName = names[0]; + this.lastName = names[1]; + } + + public String getEmail() { + return this.firstName + "." + + this.lastName + + "@globomanticshr.com"; + } + + @Override + public String toString() { + return this.firstName + " " + + this.lastName + " - " + + this.monthlyIncome; + } + + public int getMonthlyIncome() { + return monthlyIncome; + } + + public void setMonthlyIncome(int monthlyIncome) { + if(monthlyIncome < 0){ + throw new IllegalArgumentException("Income must be positive"); + } + + this.monthlyIncome = monthlyIncome; + } + + public int getNbHoursPerWeek() { + return nbHoursPerWeek; + } + + public void setNbHoursPerWeek(int nbHoursPerWeek) { + if(nbHoursPerWeek <= 0){ + throw new IllegalArgumentException("Income must be positive"); + } + + this.nbHoursPerWeek = nbHoursPerWeek; + } + + public String getFullName(){ + return this.firstName + " " + this.lastName; + } +} diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/after/EmployeeRepository.java b/src/oops/SOLID/singleResponsibilityPrinciple/after/EmployeeRepository.java new file mode 100644 index 00000000..b9e73600 --- /dev/null +++ b/src/oops/SOLID/singleResponsibilityPrinciple/after/EmployeeRepository.java @@ -0,0 +1,19 @@ +package oops.SOLID.singleResponsibilityPrinciple.after; + +import java.util.Arrays; +import java.util.List; + +public class EmployeeRepository { + + public List findAll(){ + + // Employees are kept in memory for simplicity + Employee anna = new FullTimeEmployee("Anna Smith", 2000); + Employee billy = new FullTimeEmployee("Billy Leech", 920); + + Employee steve = new PartTimeEmployee("Steve Jones", 800); + Employee magda = new PartTimeEmployee("Magda Iovan", 920); + + return Arrays.asList(anna, billy, steve, magda); + } +} \ No newline at end of file diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/after/FullTimeEmployee.java b/src/oops/SOLID/singleResponsibilityPrinciple/after/FullTimeEmployee.java new file mode 100644 index 00000000..48f2b614 --- /dev/null +++ b/src/oops/SOLID/singleResponsibilityPrinciple/after/FullTimeEmployee.java @@ -0,0 +1,8 @@ +package oops.SOLID.singleResponsibilityPrinciple.after; + +public class FullTimeEmployee extends Employee { + public FullTimeEmployee(String fullName, int monthlyIncome) { + super(fullName, monthlyIncome); + this.setNbHoursPerWeek(40); + } +} \ No newline at end of file diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/after/PartTimeEmployee.java b/src/oops/SOLID/singleResponsibilityPrinciple/after/PartTimeEmployee.java new file mode 100644 index 00000000..bf19e167 --- /dev/null +++ b/src/oops/SOLID/singleResponsibilityPrinciple/after/PartTimeEmployee.java @@ -0,0 +1,8 @@ +package oops.SOLID.singleResponsibilityPrinciple.after; + +public class PartTimeEmployee extends Employee { + public PartTimeEmployee(String fullName, int monthlyIncome) { + super(fullName, monthlyIncome); + this.setNbHoursPerWeek(20); + } +} \ No newline at end of file diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/after/SaveEmployeesMain.java b/src/oops/SOLID/singleResponsibilityPrinciple/after/SaveEmployeesMain.java new file mode 100644 index 00000000..4f559d71 --- /dev/null +++ b/src/oops/SOLID/singleResponsibilityPrinciple/after/SaveEmployeesMain.java @@ -0,0 +1,17 @@ +package oops.SOLID.singleResponsibilityPrinciple.after; + +import java.util.List; + +public class SaveEmployeesMain { + public static void main(String[] args) { + // Grab employees + EmployeeRepository repository = new EmployeeRepository(); + SaveToDisk util = new SaveToDisk(); + List employees = repository.findAll(); + + // Save all + for (Employee e : employees){ + util.saveEmployee(e); + } + } +} \ No newline at end of file diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/after/SaveToDisk.java b/src/oops/SOLID/singleResponsibilityPrinciple/after/SaveToDisk.java new file mode 100644 index 00000000..2822125e --- /dev/null +++ b/src/oops/SOLID/singleResponsibilityPrinciple/after/SaveToDisk.java @@ -0,0 +1,40 @@ +package oops.SOLID.singleResponsibilityPrinciple.after; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +public class SaveToDisk{ + public void saveEmployee(Employee employee){ + try { + StringBuilder employeeFileDetails = saveEmployeeHelper(employee); + Path path = Paths.get(employee.getFullName() + .replace(" ","_") + ".rec"); + Files.write(path, employeeFileDetails.toString().getBytes()); + + System.out.println("Saved employee " + employee.toString()); + } catch (IOException e){ + System.out.println("ERROR: Could not save employee. " + e); + } + } + private StringBuilder saveEmployeeHelper(Employee employee){ + StringBuilder sb = new StringBuilder(); + String [] fullName = employee.getFullName().split(" "); + sb.append("### EMPLOYEE RECORD ####"); + sb.append(System.lineSeparator()); + sb.append("NAME: "); + sb.append(fullName[0] + " " + fullName[1]); + sb.append(System.lineSeparator()); + sb.append("POSITION: "); + sb.append(employee.getClass().getTypeName()); + sb.append(System.lineSeparator()); + sb.append("EMAIL: "); + sb.append(employee.getEmail()); + sb.append(System.lineSeparator()); + sb.append("MONTHLY WAGE: "); + sb.append(employee.getMonthlyIncome()); + sb.append(System.lineSeparator()); + return sb; + } +} \ No newline at end of file