diff --git a/EmployeeManagementSystem/EmployeeManagementSystem/Database.cs b/EmployeeManagementSystem/EmployeeManagementSystem/Database.cs new file mode 100644 index 0000000..e9c8409 --- /dev/null +++ b/EmployeeManagementSystem/EmployeeManagementSystem/Database.cs @@ -0,0 +1,10 @@ +namespace EmployeeManagementSystem +{ + public class Database : IDatabase + { + public void Save(Employee employee) + { + Console.WriteLine($"Saved employee: {employee.Name}."); + } + } +} diff --git a/EmployeeManagementSystem/EmployeeManagementSystem/Employee.cs b/EmployeeManagementSystem/EmployeeManagementSystem/Employee.cs new file mode 100644 index 0000000..c0ba86f --- /dev/null +++ b/EmployeeManagementSystem/EmployeeManagementSystem/Employee.cs @@ -0,0 +1,14 @@ +namespace EmployeeManagementSystem +{ + public class Employee + { + public string Name { get; private set; } + public string Address { get; private set; } + + public Employee(string name, string address) + { + Name = name; + Address = address; + } + } +} diff --git a/EmployeeManagementSystem/EmployeeManagementSystem/EmployeeService.cs b/EmployeeManagementSystem/EmployeeManagementSystem/EmployeeService.cs new file mode 100644 index 0000000..5409d58 --- /dev/null +++ b/EmployeeManagementSystem/EmployeeManagementSystem/EmployeeService.cs @@ -0,0 +1,17 @@ +namespace EmployeeManagementSystem +{ + public class EmployeeService + { + private readonly IDatabase _database; + + public EmployeeService(IDatabase database) + { + _database = database; + } + + public void SaveEmployee(Employee employee) + { + _database.Save(employee); + } + } +} diff --git a/EmployeeManagementSystem/EmployeeManagementSystem/IDatabase.cs b/EmployeeManagementSystem/EmployeeManagementSystem/IDatabase.cs new file mode 100644 index 0000000..e5c4977 --- /dev/null +++ b/EmployeeManagementSystem/EmployeeManagementSystem/IDatabase.cs @@ -0,0 +1,7 @@ +namespace EmployeeManagementSystem +{ + public interface IDatabase + { + void Save(Employee employee); + } +} \ No newline at end of file diff --git a/EmployeeManagementSystem/EmployeeManagementSystem/IEmployeeService.cs b/EmployeeManagementSystem/EmployeeManagementSystem/IEmployeeService.cs new file mode 100644 index 0000000..2a028fe --- /dev/null +++ b/EmployeeManagementSystem/EmployeeManagementSystem/IEmployeeService.cs @@ -0,0 +1,7 @@ +namespace EmployeeManagementSystem +{ + public interface IEmployeeService + { + void SaveEmployee(Employee employee); + } +} \ No newline at end of file diff --git a/EmployeeManagementSystem/EmployeeManagementSystem/Program.cs b/EmployeeManagementSystem/EmployeeManagementSystem/Program.cs new file mode 100644 index 0000000..23ca9e2 --- /dev/null +++ b/EmployeeManagementSystem/EmployeeManagementSystem/Program.cs @@ -0,0 +1,16 @@ +namespace EmployeeManagementSystem +{ + internal class Program + { + static void Main(string[] args) + { + IDatabase database = new Database(); + + IEmployeeService employeeService = new EmployeeService(database); + + Employee employee = new Employee("Mukul Palol", "Jaipur"); + + employeeService.SaveEmployee(employee); + } + } +} diff --git a/EmployeeManagementSystem/README.md b/EmployeeManagementSystem/README.md new file mode 100644 index 0000000..4f5e3ec --- /dev/null +++ b/EmployeeManagementSystem/README.md @@ -0,0 +1,40 @@ +# Assignemnt 6: Dependency Inversion Principle + +### Objective: + +```java +//Apply the Dependency Inversion Principle (DIP) by refactoring a set of classes +// Note: Also mention why this code violating DIP + +public class EmployeeService { + private Database database = new Database(); + + public void saveEmployee(Employee employee) { + database.save(employee); + } +} + +public class Database { + public void save(Employee employee) { + // Code to save employee to the database + } +} + +public class Employee { + private String name; + private String address; + + public Employee(String name, String address) { + this.name = name; + this.address = address; + } + + // Getters and setters +} +``` + +### Why this code is violating DIP: +- The **EmployeeService** class directly depends on the **Database** class. +- **EmployeeService** is tightly coupled with the implementation of **Database**. +- It is difficult to change the database implementation without modifying the EmployeeService class. +- There is no abstraction layer between **EmployeeService** and **Database**. DIP states that high-level modules (**EmployeeService**) should not depend on low-level modules (**Database**), instead, both should depend on abstractions. \ No newline at end of file