//https://dotnettutorials.net/lesson/dependency-inversion-principle/ static void Main(string[] args) { Invoice FInvoice = new FinalInvoice(); Invoice PInvoice = new ProposedInvoice(); Invoice RInvoice = new RecurringInvoice(); double FInvoiceAmount = FInvoice.GetInvoiceDiscount(10000); double PInvoiceAmount = PInvoice.GetInvoiceDiscount(10000); double RInvoiceAmount = RInvoice.GetInvoiceDiscount(10000); }
public void CanAddFinalInvoice() { var finalInvoice = new FinalInvoice(); Assert.IsNotNull(finalInvoice); Assert.Greater(finalInvoice.GetDiscount(200), 0); finalInvoice.Add(); finalInvoice.Delete(); }
public void GetInvoiceDiscount_Calculated() { IInvoice invoice = new FinalInvoice(); double amount = 200; double actual = invoice.GetInvoiceDiscount(amount); double expected = 140; Assert.Equal(expected, actual); }
static void Main(string[] args) { Invoice FInvoice = new FinalInvoice(); Invoice PInvoice = new ProposedInvoice(); Invoice RInvoice = new RecurringInvoice(); Console.WriteLine(FInvoice.GetInvoiceDiscount(10000)); Console.WriteLine(PInvoice.GetInvoiceDiscount(10000)); Console.WriteLine(RInvoice.GetInvoiceDiscount(10000)); }
static void Main(string[] args) { //The Dependency Inversion Principle (DIP) states that high-level modules/classes should not depend on low-level modules/classes. //Both should depend upon abstractions. Secondly, abstractions should not depend upon details. Details should depend upon abstractions. //dependency inversion principle var employee = new EmployeeBusinessLogic(); Console.WriteLine(JsonSerializer.Serialize(employee.GetEmployeeDetails(1))); //dependency inversion principle //liskov substitution principle : This principle states that, if S is a subtype of T, then objects of type T should be replaced with the objects of type S. // yerine koyma Apple apple = new Orange(); Console.WriteLine(apple.GetColor()); //after Fruit fruit = new Avocado(); Console.WriteLine(fruit.GetColor()); fruit = new Banana(); Console.WriteLine(fruit.GetColor()); //liskov substitution principle //open close principle var invoice = new Invoice(); Console.WriteLine(invoice.GetInvoiceDiscount(1000, InvoiceType.FinalInvoice)); Console.WriteLine(invoice.GetInvoiceDiscount(1000, InvoiceType.ProposedInvoice)); //after InvoiceOCP fInvoice = new FinalInvoice(); InvoiceOCP pInvoice = new ProposedInvoice(); InvoiceOCP rInvoice = new RecurringInvoice(); Console.WriteLine(fInvoice.GetInvoiceDiscount(100)); Console.WriteLine(pInvoice.GetInvoiceDiscount(100)); Console.WriteLine(rInvoice.GetInvoiceDiscount(100)); //open close principle Console.Read(); /* * * Single Responsibility : Sınıflarımızın iyi tanımlanmış tek bir sorumluluğu olmalı. * Open/Closed : Sınıflarımız değişikliğe kapalı ancak yeni davranışların eklenmesine açık olmalı. * Liskov Substitution(yerine koyma) : Kodumuzda herhangi bir değişiklik yapmaya gerek kalmadan türetilmiş sınıfları (sub class) türedikleri ata sınıfın (base class) yerine kullanabilmeliyiz. * Interface Segregation : Genel kullanım amaçlı tek bir kontrat yerine daha özelleşmiş birden çok kontrat oluşturmayı tercih etmeliyiz. * Dependency Inversion : Katmanlı mimarilerde üst seviye modüller alt seviyedeki modüllere doğruda bağımlı olmamalıdır. * */ // https://dotnettutorials.net/lesson/dependency-inversion-principle/ }
static void Main(string[] args) { Console.WriteLine($"Employee work hour for a day is {readonly_workHours}"); Console.WriteLine($"Employee work hour for a day is {const_workHours}"); var days = new List <int>(); days.AddRange(new List <int> { 1, 2, 3, 4, 5, 6, 7 }); var daysThatAreOdd = days.Where(x => x % 2 != 0); var daysThatAreEven = days.Where(x => x % 2 == 0); // Loose Coupling using Interfaces CustomerRepository cr; cr = new CustomerRepository(new SqlDatabase()); cr.Add("Jagadish"); cr = new CustomerRepository(new XMLDatabase()); cr.Add("Palanivelu"); IBank bank = new Chase(); bank.Connect(); // Connect to bank BankOfAmerica Console.WriteLine("Single Responsibility Principle"); Console.WriteLine("-------------------------------"); // Single Responsibility Principle DataAccess.InsertData(); Logger.WriteLog(); Console.WriteLine(""); Console.WriteLine("Open Closed Principle"); Console.WriteLine("---------------------"); Employee employee = new Employee(new Payroll()); employee.GetEmployeeDetails(8); // Open CLosed Principle Rectangle rectangle = new Rectangle { Width = 3, Height = 5 }; Console.WriteLine("Area of a rectangle " + rectangle.Area()); OCP.Circle circle = new OCP.Circle { Radius = 3 }; Console.WriteLine("Area of a circle " + circle.Area()); /* * OCP * */ FinalInvoice finalInvoice = new FinalInvoice(); Console.WriteLine($"Final invoice amount: {finalInvoice.GetInvoiceDiscount(50)}"); Console.WriteLine(""); Console.WriteLine("Liskov Substitution Principle"); Console.WriteLine("---------------------"); List <Customer> Customers = new List <Customer>(); Customers.Add(new SilverCustomer()); Customers.Add(new GoldCustomer()); //Customers.Add(new Enquiry());//error Fruit fruit = new Orange(); Console.WriteLine(fruit.GetColor()); fruit = new Apple(); Console.WriteLine(fruit.GetColor()); Console.WriteLine(""); Console.WriteLine("Interface Segregation Principle"); Console.WriteLine("---------------------"); ToyHouse toyHouse = new ToyHouse(); toyHouse.Color(); ToyTrain toyTrain = new ToyTrain(); toyTrain.Run(); toyTrain.Stop(); ISP.Classes.Shape s = new Triangle(); Console.WriteLine($"Shape : {s.GetShape()}"); s = new ISP.Classes.Circle(); Console.WriteLine($"Shape : {s.GetShape()}"); OfflineOrder offlineOrder = new OfflineOrder(); offlineOrder.AddToCart(); OnlineOrder onlineOrder = new OnlineOrder(); onlineOrder.AddToCart(); onlineOrder.CCProcess(); BMW b = new BMW(); b.StartEngine(); b.StopEngine(); Console.ReadLine(); }
static void Main(string[] args) { #region Single Responsible Principle Console.WriteLine("\n#-------------SR: Single Responsible Principle Violation---------------#\n"); SOLID_Principle.SRP.Violation.UserService userService = new SOLID_Principle.SRP.Violation.UserService(); userService.Register("*****@*****.**", "1234"); userService.ValidateEmail("*****@*****.**"); userService.SendEmail("*****@*****.**"); Console.WriteLine("\n#-------------SR: Single Responsible Principle Implement---------------#\n"); SOLID_Principle.SRP.Implementation.EmailService emailService = new SOLID_Principle.SRP.Implementation.EmailService(); emailService.ValidateEmail("*****@*****.**"); emailService.SendEmail("*****@*****.**"); SOLID_Principle.SRP.Implementation.UserService userService1 = new SOLID_Principle.SRP.Implementation.UserService(emailService); userService1.Register("*****@*****.**", "1234"); #endregion #region Open Close Principle Console.WriteLine("\n#-------------OC:Open Close Principle Violation---------------#\n"); SOLID_Principle.OCP.Violation.Invoice invoice = new SOLID_Principle.OCP.Violation.Invoice(); Console.WriteLine(invoice.GetInvoiceDiscount(10000, SOLID_Principle.OCP.Violation.InvoiceType.ProposedInvoice)); Console.WriteLine("\n#-------------OC:Open Close Principle Implement---------------#\n"); Invoice FInvoice = new FinalInvoice(); Invoice PInvoice = new ProposedInvoice(); Invoice RInvoice = new RecurringInvoice(); double FInvoiceAmount = FInvoice.GetInvoiceDiscount(10000); double PInvoiceAmount = PInvoice.GetInvoiceDiscount(10000); double RInvoiceAmount = RInvoice.GetInvoiceDiscount(10000); Console.WriteLine(PInvoiceAmount); #endregion #region Liscov Substiution Principle Console.WriteLine("\n#-------------LS:Liscov Substiution Principle Violation---------------#\n"); SOLID_Principle.LSP.Violation.Apple apple = new SOLID_Principle.LSP.Violation.Orange(); Console.WriteLine("I am an apple object of {0} color", apple.GetColor()); Console.WriteLine("\n#-------------LS:Liscov Substiution Principle Implementation---------------#\n"); SOLID_Principle.LSP.Implementation.Fruit fruit = new SOLID_Principle.LSP.Implementation.Orange(); Console.WriteLine(fruit.GetColor()); fruit = new SOLID_Principle.LSP.Implementation.Apple(); Console.WriteLine(fruit.GetColor()); #endregion #region Interface Segregation Console.WriteLine("\n#-------------IS:Interface Segregation Violation---------------#\n"); SOLID_Principle.ISP.Violation.HPLaserJetPrinter laserJetPrinter = new SOLID_Principle.ISP.Violation.HPLaserJetPrinter(); laserJetPrinter.PrintDuplex(""); SOLID_Principle.ISP.Violation.LiquidInkjetPrinter liquidInkjetPrinter = new SOLID_Principle.ISP.Violation.LiquidInkjetPrinter(); liquidInkjetPrinter.PrintDuplex(""); Console.WriteLine("\n#-------------IS:Interface Segregation Implement---------------#\n"); SOLID_Principle.ISP.Implementation.HPLaserJetPrinter laserJetPrinter1 = new SOLID_Principle.ISP.Implementation.HPLaserJetPrinter(); laserJetPrinter1.PrintDuplex(""); SOLID_Principle.ISP.Implementation.LiquidInkjetPrinter liquidInkjetPrinter1 = new SOLID_Principle.ISP.Implementation.LiquidInkjetPrinter(); liquidInkjetPrinter1.Print(""); #endregion #region Dependency Inversion Console.WriteLine("\n#-------------DI:Dependency Inversion Violation---------------#\n"); SOLID_Principle.DIP.Violation.EmployeeBusinessLogic obj = new SOLID_Principle.DIP.Violation.EmployeeBusinessLogic(); var result = obj.GetEmployeeDetails(1); Console.WriteLine($"Id:{result.ID},\nName:{result.Name},\nDepartment:{result.Department},\nSalary:{result.Salary}"); Console.WriteLine("\n#-------------DI:Dependency Inversion Implement---------------#\n"); SOLID_Principle.DIP.Implementation.EmployeeBusinessLogic obj1 = new SOLID_Principle.DIP.Implementation.EmployeeBusinessLogic(); var result1 = obj.GetEmployeeDetails(1); Console.WriteLine($"Id:{result1.ID},\nName:{result1.Name},\nDepartment:{result1.Department},\nSalary:{result1.Salary}"); #endregion }