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; }
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 }
// 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"); } }
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); }
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(); }
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); }
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); }