Exemplo n.º 1
0
 //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);
 }
Exemplo n.º 2
0
        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);
            }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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/
        }
Exemplo n.º 6
0
        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();
        }
Exemplo n.º 7
0
        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
        }