From a977b697fa0f9f269e767bc314c16dbe65daf26c Mon Sep 17 00:00:00 2001 From: Petrutiu Mihai Date: Sat, 2 Jul 2016 17:34:09 +0300 Subject: [PATCH] Add ArrangeInterview motivational example --- .../ArrangeInterviewMotivationalExample.cs | 179 ++++++++++++++++++ .../ArrangeInterview/InterviewPersons.cs | 147 ++++++++++++++ .../StrategyPatternExamples.cs | 10 +- 3 files changed, 333 insertions(+), 3 deletions(-) create mode 100644 src/StrategyPattern/ArrangeInterview/ArrangeInterviewMotivationalExample.cs create mode 100644 src/StrategyPattern/ArrangeInterview/InterviewPersons.cs diff --git a/src/StrategyPattern/ArrangeInterview/ArrangeInterviewMotivationalExample.cs b/src/StrategyPattern/ArrangeInterview/ArrangeInterviewMotivationalExample.cs new file mode 100644 index 0000000..8f56eaf --- /dev/null +++ b/src/StrategyPattern/ArrangeInterview/ArrangeInterviewMotivationalExample.cs @@ -0,0 +1,179 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace StrategyPattern.ArrangeInterview +{ + public class ArrangeInterviewMotivationalExample + { + public static void Run(InterviewedPerson[] persons) + { + MInterviewManager interviewManager = new MInterviewManager(); + Console.WriteLine("Arranging interview for {0} perons", persons.Length); + foreach (var person in persons) + { + Console.WriteLine(); + Console.WriteLine("Arranging interview for {0}-{1}-{2}-{3}", person.Name, person.Role, person.Experience, person.HiringType); + + interviewManager.ArrangeInterview(person); + } + } + } + + public class MInterviewManager + { + public void ArrangeInterview(InterviewedPerson person) + { + Console.WriteLine("Reserve a meeting with one from HR"); + switch (person.Role) + { + case Role.Devloper: + ArrangeInterviewForDeveloper(person); + break; + case Role.Designer: + ArrangeInterviewForDesigner(person); + break; + case Role.Tester: + ArrangeInterviewForTester(person); + break; + case Role.Manager: + ArrangeInterviewForManager(person); + break; + case Role.DevOp: + ArrangeInterviewForDevOp(person); + break; + default: + throw new NotImplementedException("not implemented how to arrange interview for:" + person.Role); + } + } + + private void ArrangeInterviewForDevOp(InterviewedPerson person) + { + //It could get more complex, if we decide we want different process for different positions(part time/full time) + switch (person.Experience) + { + case Experience.Junior: + Console.WriteLine("Reserve a meeting with any medium/senior DevOp"); + break; + case Experience.Medium: + Console.WriteLine("Reserve a meeting with any senior DevOps"); + break; + case Experience.Senior: + Console.WriteLine("Reserve a meeting with any 2 senior DevOps"); + Console.WriteLine("Reserver a meeting with one of the managers"); + break; + case Experience.RockStar: + Console.WriteLine("Reserve a meeting with best senior DevOps"); + Console.WriteLine("Reserver a meeting with one of the managers"); + break; + default: + throw new NotImplementedException("hiring for " + person.Experience + " is not implemented"); + } + } + + private void ArrangeInterviewForManager(InterviewedPerson person) + { + switch (person.Experience) + { + case Experience.Junior: + Console.WriteLine("We don't hire junior managers"); + break; + case Experience.Medium: + if (person.HiringType == HiringType.FullTime) + Console.WriteLine("Reserve a meeting with one of the managers"); + else + Console.WriteLine("We dont hire Medium managers only full time"); + break; + case Experience.Senior: + case Experience.RockStar: + Console.WriteLine("Reserver a meeting with all the managers"); + break; + default: + throw new NotImplementedException("What kind of experience is this?"); + } + } + + private void ArrangeInterviewForTester(InterviewedPerson person) + { + //It could get more complex, if we decide we want different process for different positions(part time/full time) + switch (person.Experience) + { + case Experience.Junior: + Console.WriteLine("Prepare junior tester interview questions"); + Console.WriteLine("Reserve a meeting with any medium/senior tester"); + break; + case Experience.Medium: + Console.WriteLine("Prepare medium tester interview questions"); + Console.WriteLine("Reserve a meeting with any senior tester"); + break; + case Experience.Senior: + Console.WriteLine("Prepare senior tester interview questions"); + Console.WriteLine("Reserve a meeting with any 2 senior testers"); + Console.WriteLine("Reserver a meeting with one of the managers"); + break; + case Experience.RockStar: + Console.WriteLine("get third party rockstar testers to test him out"); + Console.WriteLine("Reserver a meeting with one of the managers"); + break; + default: + throw new NotImplementedException("hiring for " + person.Experience + " is not implemented"); + } + } + + private void ArrangeInterviewForDesigner(InterviewedPerson person) + { + //It could get more complex, if we decide we want different process for different positions(part time/full time) + switch (person.Experience) + { + case Experience.Junior: + Console.WriteLine("Reserve a meeting with any medium/senior designer"); + break; + case Experience.Medium: + Console.WriteLine("Give him medium designer test"); + Console.WriteLine("Reserve a meeting with any senior designer"); + break; + case Experience.Senior: + Console.WriteLine("Give him a website to design"); + Console.WriteLine("Reserve a meeting with any 2 senior desginers"); + Console.WriteLine("Reserver a meeting with one of the managers"); + break; + case Experience.RockStar: + Console.WriteLine("Give him a website to design"); + Console.WriteLine("Reserve a meeting with best senior designers"); + Console.WriteLine("Reserver a meeting with one of the managers"); + break; + default: + throw new NotImplementedException("hiring for " + person.Experience + " is not implemented"); + } + } + + private void ArrangeInterviewForDeveloper(InterviewedPerson person) + { + //It could get more complex, if we decide we want different process for different positions(part time/full time) + switch (person.Experience) + { + case Experience.Junior: + Console.WriteLine("Prepare junior developer interview questions"); + Console.WriteLine("Reserve a meeting with any medium/senior developer"); + break; + case Experience.Medium: + Console.WriteLine("Prepare medium tester interview questions"); + Console.WriteLine("Give him a small program to develop before he comes here"); + Console.WriteLine("Reserve a meeting with any senior developer"); + break; + case Experience.Senior: + Console.WriteLine("Give him a complex program to develop before he comes here"); + Console.WriteLine("Prepare senior tester interview questions"); + Console.WriteLine("Reserve a meeting with any 2 senior developers"); + Console.WriteLine("Reserver a meeting with one of the managers"); + break; + case Experience.RockStar: + Console.WriteLine("We don't hire rockstar developers, because they are too cocky, this title was a trap"); + break; + default: + throw new NotImplementedException("hiring for " + person.Experience + " is not implemented"); + } + } + } +} diff --git a/src/StrategyPattern/ArrangeInterview/InterviewPersons.cs b/src/StrategyPattern/ArrangeInterview/InterviewPersons.cs new file mode 100644 index 0000000..a92386e --- /dev/null +++ b/src/StrategyPattern/ArrangeInterview/InterviewPersons.cs @@ -0,0 +1,147 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace StrategyPattern.ArrangeInterview +{ + public class InterviewPersons + { + public static InterviewedPerson[] Get() + { + return new InterviewedPerson[] { + new InterviewedPerson(Role.Designer, Experience.Junior, HiringType.Contractor), + new InterviewedPerson(Role.Designer, Experience.Junior, HiringType.FullTime), + new InterviewedPerson(Role.Designer, Experience.Junior, HiringType.PartTime), + + new InterviewedPerson(Role.Designer, Experience.Medium, HiringType.Contractor), + new InterviewedPerson(Role.Designer, Experience.Medium, HiringType.FullTime), + new InterviewedPerson(Role.Designer, Experience.Medium, HiringType.PartTime), + + new InterviewedPerson(Role.Designer, Experience.Senior, HiringType.Contractor), + new InterviewedPerson(Role.Designer, Experience.Senior, HiringType.FullTime), + new InterviewedPerson(Role.Designer, Experience.Senior, HiringType.PartTime), + + new InterviewedPerson(Role.Designer, Experience.RockStar, HiringType.Contractor), + new InterviewedPerson(Role.Designer, Experience.RockStar, HiringType.FullTime), + new InterviewedPerson(Role.Designer, Experience.RockStar, HiringType.PartTime), + + + new InterviewedPerson(Role.Devloper, Experience.Junior, HiringType.Contractor), + new InterviewedPerson(Role.Devloper, Experience.Junior, HiringType.FullTime), + new InterviewedPerson(Role.Devloper, Experience.Junior, HiringType.PartTime), + + new InterviewedPerson(Role.Devloper, Experience.Medium, HiringType.Contractor), + new InterviewedPerson(Role.Devloper, Experience.Medium, HiringType.FullTime), + new InterviewedPerson(Role.Devloper, Experience.Medium, HiringType.PartTime), + + new InterviewedPerson(Role.Devloper, Experience.Senior, HiringType.Contractor), + new InterviewedPerson(Role.Devloper, Experience.Senior, HiringType.FullTime), + new InterviewedPerson(Role.Devloper, Experience.Senior, HiringType.PartTime), + + new InterviewedPerson(Role.Devloper, Experience.RockStar, HiringType.Contractor), + new InterviewedPerson(Role.Devloper, Experience.RockStar, HiringType.FullTime), + new InterviewedPerson(Role.Devloper, Experience.RockStar, HiringType.PartTime), + + + new InterviewedPerson(Role.DevOp, Experience.Junior, HiringType.Contractor), + new InterviewedPerson(Role.DevOp, Experience.Junior, HiringType.FullTime), + new InterviewedPerson(Role.DevOp, Experience.Junior, HiringType.PartTime), + + new InterviewedPerson(Role.DevOp, Experience.Medium, HiringType.Contractor), + new InterviewedPerson(Role.DevOp, Experience.Medium, HiringType.FullTime), + new InterviewedPerson(Role.DevOp, Experience.Medium, HiringType.PartTime), + + new InterviewedPerson(Role.DevOp, Experience.Senior, HiringType.Contractor), + new InterviewedPerson(Role.DevOp, Experience.Senior, HiringType.FullTime), + new InterviewedPerson(Role.DevOp, Experience.Senior, HiringType.PartTime), + + new InterviewedPerson(Role.DevOp, Experience.RockStar, HiringType.Contractor), + new InterviewedPerson(Role.DevOp, Experience.RockStar, HiringType.FullTime), + new InterviewedPerson(Role.DevOp, Experience.RockStar, HiringType.PartTime), + + + new InterviewedPerson(Role.Manager, Experience.Junior, HiringType.Contractor), + new InterviewedPerson(Role.Manager, Experience.Junior, HiringType.FullTime), + new InterviewedPerson(Role.Manager, Experience.Junior, HiringType.PartTime), + + new InterviewedPerson(Role.Manager, Experience.Medium, HiringType.Contractor), + new InterviewedPerson(Role.Manager, Experience.Medium, HiringType.FullTime), + new InterviewedPerson(Role.Manager, Experience.Medium, HiringType.PartTime), + + new InterviewedPerson(Role.Manager, Experience.Senior, HiringType.Contractor), + new InterviewedPerson(Role.Manager, Experience.Senior, HiringType.FullTime), + new InterviewedPerson(Role.Manager, Experience.Senior, HiringType.PartTime), + + new InterviewedPerson(Role.Manager, Experience.RockStar, HiringType.Contractor), + new InterviewedPerson(Role.Manager, Experience.RockStar, HiringType.FullTime), + new InterviewedPerson(Role.Manager, Experience.RockStar, HiringType.PartTime), + + + new InterviewedPerson(Role.Tester, Experience.Junior, HiringType.Contractor), + new InterviewedPerson(Role.Tester, Experience.Junior, HiringType.FullTime), + new InterviewedPerson(Role.Tester, Experience.Junior, HiringType.PartTime), + + new InterviewedPerson(Role.Tester, Experience.Medium, HiringType.Contractor), + new InterviewedPerson(Role.Tester, Experience.Medium, HiringType.FullTime), + new InterviewedPerson(Role.Tester, Experience.Medium, HiringType.PartTime), + + new InterviewedPerson(Role.Tester, Experience.Senior, HiringType.Contractor), + new InterviewedPerson(Role.Tester, Experience.Senior, HiringType.FullTime), + new InterviewedPerson(Role.Tester, Experience.Senior, HiringType.PartTime), + + new InterviewedPerson(Role.Tester, Experience.RockStar, HiringType.Contractor), + new InterviewedPerson(Role.Tester, Experience.RockStar, HiringType.FullTime), + new InterviewedPerson(Role.Tester, Experience.RockStar, HiringType.PartTime) + }; + + } + } + + public class InterviewedPerson + { + static int id = 0; + public InterviewedPerson(Role role, Experience xp, HiringType hiringType) + { + Id = id++; + Name = "Name" + Id; + Role = role; + Experience = xp; + HiringType = hiringType; + + } + public string Name { get; set; } + + public int Id { get; set; } + + public Role Role { get; set; } + + public Experience Experience { get; set; } + + public HiringType HiringType { get; set; } + } + + public enum Role + { + Devloper, + Designer, + Tester, + Manager, + DevOp + } + + public enum Experience + { + Junior, + Medium, + Senior, + RockStar + } + + public enum HiringType + { + Contractor, + PartTime, + FullTime + } +} diff --git a/src/StrategyPattern/StrategyPatternExamples.cs b/src/StrategyPattern/StrategyPatternExamples.cs index 906bcea..303e1f2 100644 --- a/src/StrategyPattern/StrategyPatternExamples.cs +++ b/src/StrategyPattern/StrategyPatternExamples.cs @@ -1,4 +1,5 @@ -using StrategyPattern.ShippingCalculator; +using StrategyPattern.ArrangeInterview; +using StrategyPattern.ShippingCalculator; using System; using System.Collections.Generic; using System.Linq; @@ -13,13 +14,16 @@ namespace StrategyPattern { public static void Run() { + + ArrangeInterviewMotivationalExample.Run(InterviewPersons.Get()); + Console.WriteLine(GetDescription()); Console.WriteLine(WhenToUse()); GoToNextStep(); ShippingMotivatingExample.Run(); - ShippingWithStrategyExample.Run(); - + Console.WriteLine("Now the same example, but implemented with strategy pattern"); + ShippingWithStrategyExample.Run(); //TODO:add more examples //Show the switch moving problem }