コード例 #1
0
        public void Filter_GetLargeBlackProducts_ReturnListWithSingleElement()
        {
            IEnumerable <Product> products = new List <Product>()
            {
                new Product("Polo Shirt", ProductColor.Black, ProductSize.L),
                new Product("T-Shirt", ProductColor.Blue, ProductSize.XS),
                new Product("T-Shirt", ProductColor.Red, ProductSize.S),
                new Product("Jeans", ProductColor.Blue, ProductSize.XL),
                new Product("Jeans", ProductColor.Black, ProductSize.XL),
            };
            var betterFilter     = new BetterFilter();
            var andSpecification = new AndSpecification <Product>(
                new ColorSpecification(ProductColor.Black),
                new SizeSpecification(ProductSize.L));

            var filteredProducts = betterFilter.Filter(products, andSpecification).ToList();

            Assert.That(filteredProducts.Count, Is.EqualTo(1));
            return;
        }
コード例 #2
0
        static void Main(string[] args)
        {
            #region OCP
            var apple = new Product("Jabłko", Color.Green, Size.Small);
            var tree  = new Product("Drzewo", Color.Green, Size.Large);

            var       house    = new Product("Dom", Color.Blue, Size.Large);
            Product[] products = { apple, tree, house };

            var bf = new BetterFilter();

            var largeGreenSpec = new ColorSpecification(Color.Green)
                                 & new SizeSpecification(Size.Large);

            foreach (var p in bf.Filter(products, largeGreenSpec))
            {
                Console.WriteLine($" - {p.Name} jest zielony");
            }
            #endregion
        }
コード例 #3
0
        // OCP = open for extension but closed for modification
        public void MainCall()
        {
            var apple = new Product("Apple", Color.Green, Size.Small);
            var tree  = new Product("Tree", Color.Green, Size.Large);
            var house = new Product("House", Color.Blue, Size.Large);

            Product[] products = { apple, tree, house };

            var pf = new ProductFilter();

            Console.WriteLine("Green products (old):");
            foreach (var p in pf.FilterByColor(products, Color.Green))
            {
                Console.WriteLine($" - {p.Name} is green");
            }

            // ^^ BEFORE

            // vv AFTER
            var bf = new BetterFilter();

            Console.WriteLine("Green products (new):");
            foreach (var p in bf.Filter(products, new ColorSpecification(Color.Green)))
            {
                Console.WriteLine($" - {p.Name} is green");
            }

            Console.WriteLine("Large products");
            foreach (var p in bf.Filter(products, new SizeSpecification(Size.Large)))
            {
                Console.WriteLine($" - {p.Name} is large");
            }

            Console.WriteLine("Large blue items");
            foreach (var p in bf.Filter(products,
                                        new AndSpecification <Product>(new ColorSpecification(Color.Blue), new SizeSpecification(Size.Large)))
                     )
            {
                Console.WriteLine($" - {p.Name} is big and blue");
            }
        }
コード例 #4
0
        private static void SolidPrinciples()
        {
            var journal = new Journal();

            journal.AddEntry("I Started today Udemy.");
            journal.AddEntry("I started with Solid.");
            Console.WriteLine(journal);

            var persistence = new Persistence();
            var fileName    = @"C:\dev\designPatterns\journal.txt";

            persistence.SaveToFile(journal, fileName, true);

            var apple  = new Product("apple", Enums.Color.Green, Enums.Size.Small);
            var orange = new Product("orange", Enums.Color.Red, Enums.Size.Small);
            var tree   = new Product("tree", Enums.Color.Blue, Enums.Size.Large);
            var house  = new Product("house", Enums.Color.Blue, Enums.Size.Large);

            Product[] products = { apple, tree, house, orange };

            var productFilter = new ProductFilter();

            Console.WriteLine("Blue products (old): ");
            foreach (var p in productFilter.FilterByColor(products, Enums.Color.Blue))
            {
                Console.WriteLine($" - {p.Name} is Blue");
            }

            var betterFilter = new BetterFilter();
            var colorSpec    = new ColorSpecification(Enums.Color.Blue);

            Console.WriteLine("Blue products (new): ");
            foreach (var p in betterFilter.Filter(products, colorSpec))
            {
                Console.WriteLine($" - {p.Name} is Blue");
            }
            var sizeSpec   = new SizeSpecification(Enums.Size.Large);
            var doubleSpec = new AndSpecification <Product>(colorSpec, sizeSpec);

            Console.WriteLine("Blue and Large products (new): ");
            foreach (var p in betterFilter.Filter(products, doubleSpec))
            {
                Console.WriteLine($" - {p.Name} is Blue and large");
            }

            var rectangle = new Rectangle(2, 3);

            Console.WriteLine($"{rectangle} has area {Area(rectangle)}");

            Rectangle square = new Square();

            square.Width = 3;
            Console.WriteLine($"{square} has area {Area(square)}");

            var parent = new PersonDependencyInversion {
                Name = "Otman"
            };
            var child1 = new PersonDependencyInversion {
                Name = "Loreto"
            };
            var child2 = new PersonDependencyInversion {
                Name = "Emilio"
            };

            rS.AddParentChild(parent, child1);
        }
コード例 #5
0
        static void Main(string[] args)
        {
            //demo1
            var devCalculations = new List <BaseSalaryCalculator>
            {
                new SeniorDevSalaryCalculator(new DeveloperReport {
                    Id = 1, Name = "Dev1", Level = "Senior developer", HourlyRate = 30.5, WorkingHours = 160
                }),
                new JuniorDevSalaryCalculator(new DeveloperReport {
                    Id = 2, Name = "Dev2", Level = "Junior developer", HourlyRate = 20, WorkingHours = 150
                }),
                new SeniorDevSalaryCalculator(new DeveloperReport {
                    Id = 3, Name = "Dev3", Level = "Senior developer", HourlyRate = 30.5, WorkingHours = 180
                })
            };
            //SalaryCalculator class is now closed for modification and opened for an extension, which is exactly what OCP states.
            var calculator = new SalaryCalculator(devCalculations);

            Console.WriteLine($"Sum of all the developer salaries is {calculator.CalculateTotalSalaries()} dollars");



            //demo2
            //old
            var apple = new Product("Apple", Color.Green, Size.Small);
            var tree  = new Product("Tree", Color.Green, Size.Large);
            var house = new Product("House", Color.Red, Size.Large);

            Product[] products      = { apple, tree, house };
            var       productFilter = new ProductFilter();

            Console.WriteLine("Green products(Old): ");

            foreach (var product in productFilter.FilterByColor(products, Color.Green))
            {
                Console.WriteLine($" - {product.Name} is green");
            }

            //new
            var betterFilter = new BetterFilter();

            Console.WriteLine("Green products (new)");
            foreach (var product in betterFilter.Filter(products, new ColorSpecification(Color.Green)))
            {
                Console.WriteLine($" - {product.Name} is green");
            }

            //filter with two specification
            Console.WriteLine("Large  red items");
            foreach (var product in betterFilter.Filter(
                         products,
                         new AndSpecification <Product>(
                             new ColorSpecification(Color.Red),
                             new SizeSpecification(Size.Large))))
            {
                Console.WriteLine($" - {product.Name} big and red");
            }

            Console.WriteLine();
            Console.WriteLine("DEMO3");

            //demo3
            new DEMO3.Demo3().Execute();

            Console.ReadLine();
        }
コード例 #6
0
        static void Main(string[] args)
        {
            // 01 - SRP
            var j = new Journal();

            j.AddEntry("I cried today");
            j.AddEntry("I ate a bug");

            Console.WriteLine(j);

            var p        = new Persistence();
            var filename = @"Journal.txt";

            p.SaveToFIle(j, filename, true);
            Process.Start(filename);

            // 02 - OCP
            var apple = new Product("Apple", Color.Green, Size.Small);
            var tree  = new Product("Tree", Color.Green, Size.Large);
            var house = new Product("House", Color.Blue, Size.Large);

            Product[] products = { apple, tree, house };
            var       pf       = new ProductFilter();

            Console.WriteLine("Green Product (Old):");
            foreach (var item in pf.FilterByColor(products, Color.Green))
            {
                Console.WriteLine($" - {item.Name} is green");
            }

            var bf = new BetterFilter();

            Console.WriteLine("Green Product (New):");
            foreach (var item in bf.Filter(products, new ColorSpecification(Color.Green)))
            {
                Console.WriteLine($" - {item.Name} is green");
            }
            Console.WriteLine("Large Product (New):");
            foreach (var item in bf.Filter(products, new SizeSpecification(Size.Large)))
            {
                Console.WriteLine($" - {item.Name} is large");
            }
            Console.WriteLine("Large Blue Product (New):");
            foreach (var item in bf.Filter(products, new AndSpecification <Product>(new SizeSpecification(Size.Large), new ColorSpecification(Color.Blue))))
            {
                Console.WriteLine($" - {item.Name} is big and blue");
            }

            // 03 - LSP
            var rc = new Rectangle(2, 3);

            Console.WriteLine($"{rc} has area {Area(rc)}");
            Rectangle sq = new Square();

            sq.Width = 4;
            Console.WriteLine($"{sq} has area {Area(sq)}");

            // 05 - DIP
            var parent = new Person()
            {
                Name = "John"
            };
            var child1 = new Person()
            {
                Name = "Chris"
            };
            var child2 = new Person()
            {
                Name = "Mary"
            };

            var relationships = new DIP.Relationships();

            relationships.AddParentAndChild(parent, child1);
            relationships.AddParentAndChild(parent, child2);

            _ = new DIP.Research(relationships);
        }
コード例 #7
0
        public static string analyzeData(IEnumerable <Student> students, string subject, string yearGroup, out string message)
        {
            var spec1 = new ClassSpecification(subject);

            if (spec1.subjectName == "Invalid")
            {
                message = "Invalid Input";
                return("Invalid Input");
            }

            var bf = new BetterFilter();

            var           SubjectStud   = bf.filterItems(students, spec1);
            var           maleCount     = 0;
            var           femaleCount   = 0;
            var           counter       = 0;
            var           boySpec       = new GenderSpecification("Boy");
            var           swString1     = $"In year {yearGroup}, People who do {subject} are: \n \n  ";
            StringBuilder stringBuilder = new StringBuilder();

            foreach (var student in SubjectStud)
            {
                string string2 = $"{student.Name}, ";
                if (counter == 6)
                {
                    string2 = $"{student.Name} \n  ";
                    counter = -1;
                }

                stringBuilder.Append(string2);
                if (boySpec.IsSatisfied(student))
                {
                    maleCount++;
                }
                else if (!boySpec.IsSatisfied(student))
                {
                    femaleCount++;
                }

                counter++;
            }

            Console.ForegroundColor = ConsoleColor.DarkMagenta;
            var swString2 = stringBuilder.ToString();
            var swString3 = "\n";
            var swString4 = $"    {SubjectStud.Count()} people do {subject}\n";
            var swString5 = $"    {maleCount} boys do {subject}";
            var swString6 = $"    {femaleCount} girls do {subject} \n";
            var swString7 = "========================================================================" +
                            "================================================ \n";


            var semiCompletedString = swString2 + swString3;
            var combinedString      = swString1 + swString2 + swString3 + swString4 + swString5 + swString6
                                      + swString7;

            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine(swString1);
            System.Threading.Thread.Sleep(1000);
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine(semiCompletedString);
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.WriteLine(swString4 + swString5 + swString6);

            message = "Successful";
            return(combinedString);
        }