From 998c9ea23219e1e7bfec20aa24b99d5e934624fe Mon Sep 17 00:00:00 2001 From: Petrutiu Mihai Date: Tue, 5 Jul 2016 20:57:31 +0300 Subject: [PATCH] Add Strategies for ArrangeInterview --- .../ArrangeInterviewMotivationalExample.cs | 2 +- .../Strategy/ArrangeInterviewExample.cs | 139 ++++++++++++++++++ .../Strategy/DesignerStrategies.cs | 44 ++++++ .../Strategy/DevOpStrategy.cs | 38 +++++ .../Strategy/DeveloperStrategies.cs | 42 ++++++ .../Strategy/IInterviewStrategy.cs | 7 + .../Strategy/ManagerStratgies.cs | 36 +++++ .../Strategy/TestingStrategies.cs | 41 ++++++ 8 files changed, 348 insertions(+), 1 deletion(-) create mode 100644 src/StrategyPattern/ArrangeInterview/Strategy/ArrangeInterviewExample.cs create mode 100644 src/StrategyPattern/ArrangeInterview/Strategy/DesignerStrategies.cs create mode 100644 src/StrategyPattern/ArrangeInterview/Strategy/DevOpStrategy.cs create mode 100644 src/StrategyPattern/ArrangeInterview/Strategy/DeveloperStrategies.cs create mode 100644 src/StrategyPattern/ArrangeInterview/Strategy/IInterviewStrategy.cs create mode 100644 src/StrategyPattern/ArrangeInterview/Strategy/ManagerStratgies.cs create mode 100644 src/StrategyPattern/ArrangeInterview/Strategy/TestingStrategies.cs diff --git a/src/StrategyPattern/ArrangeInterview/ArrangeInterviewMotivationalExample.cs b/src/StrategyPattern/ArrangeInterview/ArrangeInterviewMotivationalExample.cs index 8f56eaf..fcb648d 100644 --- a/src/StrategyPattern/ArrangeInterview/ArrangeInterviewMotivationalExample.cs +++ b/src/StrategyPattern/ArrangeInterview/ArrangeInterviewMotivationalExample.cs @@ -158,7 +158,7 @@ namespace StrategyPattern.ArrangeInterview Console.WriteLine("Reserve a meeting with any medium/senior developer"); break; case Experience.Medium: - Console.WriteLine("Prepare medium tester interview questions"); + Console.WriteLine("Prepare medium developer 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; diff --git a/src/StrategyPattern/ArrangeInterview/Strategy/ArrangeInterviewExample.cs b/src/StrategyPattern/ArrangeInterview/Strategy/ArrangeInterviewExample.cs new file mode 100644 index 0000000..df52b63 --- /dev/null +++ b/src/StrategyPattern/ArrangeInterview/Strategy/ArrangeInterviewExample.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace StrategyPattern.ArrangeInterview.Strategy +{ + public class ArrangeInterviewExample + { + public static void Run(InterviewedPerson[] persons) + { + InterviewManager interviewManager = new InterviewManager(); + 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); + + IInterviewStrategy strategy = interviewManager.GetInterviewStrategy(person); + + strategy.Arrange(person); + } + } + } + + public class InterviewManager + { + public IInterviewStrategy GetInterviewStrategy(InterviewedPerson person) + { + Console.WriteLine("Reserve a meeting with one from HR"); + switch (person.Role) + { + case Role.Devloper: + return GetDeveloperStrategy(person); + case Role.Designer: + return GetStrategyFOrDesigner(person); + case Role.Tester: + return GetStrategyForTester(person); + case Role.Manager: + return GetStrategyForManager(person); + case Role.DevOp: + return GetStrategyForDevOp(person); + default: + throw new NotImplementedException("not implemented how to arrange interview for:" + person.Role); + } + } + + private IInterviewStrategy GetStrategyForDevOp(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: + return new JuniorDevOpStrategy(); + case Experience.Medium: + return new MediumDevOpStrategy(); + case Experience.Senior: + return new SeniorDevOpStrategy(); + case Experience.RockStar: + return new RockstarDevOpStrategy(); + default: + throw new NotImplementedException("hiring for " + person.Experience + " is not implemented"); + } + } + + private IInterviewStrategy GetStrategyForManager(InterviewedPerson person) + { + switch (person.Experience) + { + case Experience.Junior: + return new JuniorManagerStrategy(); + case Experience.Medium: + if (person.HiringType == HiringType.FullTime) + return new MediumFullTimeManagerStrategy(); + else + return new MediumNonFullTimeManagerStrategy(); + case Experience.Senior: + case Experience.RockStar: + return new SeniorAndRockstarManagerStrategy(); + default: + throw new NotImplementedException("What kind of experience is this?"); + } + } + + private IInterviewStrategy GetStrategyForTester(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: + return new JuniorTesterStrategy(); + case Experience.Medium: + return new MediumTesterStrategy(); + case Experience.Senior: + return new SeniorTestingStrategy(); + case Experience.RockStar: + return new RockstarTestingStrategy(); + default: + throw new NotImplementedException("hiring for " + person.Experience + " is not implemented"); + } + } + + private IInterviewStrategy GetStrategyFOrDesigner(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: + return new JuniorDesignerStrategy(); + case Experience.Medium: + return new MediumDesignerStrategy(); + case Experience.Senior: + return new SeniorDesignerStrategy(); + case Experience.RockStar: + return new RockstarDesignerStrategy(); + default: + throw new NotImplementedException("hiring for " + person.Experience + " is not implemented"); + } + } + + private IInterviewStrategy GetDeveloperStrategy(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: + return new JuniorDeveloperStrategy(); + case Experience.Medium: + return new MediumDeveloperStrategy(); + case Experience.Senior: + return new SeniorDeveloperStrategy(); + case Experience.RockStar: + return new RockstarDeveloperStrategy(); + default: + throw new NotImplementedException("hiring for " + person.Experience + " is not implemented"); + } + } + } +} diff --git a/src/StrategyPattern/ArrangeInterview/Strategy/DesignerStrategies.cs b/src/StrategyPattern/ArrangeInterview/Strategy/DesignerStrategies.cs new file mode 100644 index 0000000..8911c68 --- /dev/null +++ b/src/StrategyPattern/ArrangeInterview/Strategy/DesignerStrategies.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace StrategyPattern.ArrangeInterview.Strategy +{ + public class JuniorDesignerStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Reserve a meeting with any medium/senior designer"); + } + } + + public class MediumDesignerStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Give him medium designer test"); + Console.WriteLine("Reserve a meeting with any senior designer"); + } + } + + public class SeniorDesignerStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + 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"); + } + } + + public class RockstarDesignerStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + 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"); + } + } +} diff --git a/src/StrategyPattern/ArrangeInterview/Strategy/DevOpStrategy.cs b/src/StrategyPattern/ArrangeInterview/Strategy/DevOpStrategy.cs new file mode 100644 index 0000000..e2ff164 --- /dev/null +++ b/src/StrategyPattern/ArrangeInterview/Strategy/DevOpStrategy.cs @@ -0,0 +1,38 @@ +using System; + +namespace StrategyPattern.ArrangeInterview.Strategy +{ + public class JuniorDevOpStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Reserve a meeting with any medium/senior DevOp"); + } + } + + public class MediumDevOpStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Reserve a meeting with any senior DevOps"); + } + } + + public class SeniorDevOpStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Reserve a meeting with any 2 senior DevOps"); + Console.WriteLine("Reserver a meeting with one of the managers"); + } + } + + public class RockstarDevOpStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Reserve a meeting with best senior DevOps"); + Console.WriteLine("Reserver a meeting with one of the managers"); + } + } +} diff --git a/src/StrategyPattern/ArrangeInterview/Strategy/DeveloperStrategies.cs b/src/StrategyPattern/ArrangeInterview/Strategy/DeveloperStrategies.cs new file mode 100644 index 0000000..dcebd09 --- /dev/null +++ b/src/StrategyPattern/ArrangeInterview/Strategy/DeveloperStrategies.cs @@ -0,0 +1,42 @@ +using System; + +namespace StrategyPattern.ArrangeInterview.Strategy +{ + public class JuniorDeveloperStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Prepare junior developer interview questions"); + Console.WriteLine("Reserve a meeting with any medium/senior developer"); + } + } + + public class MediumDeveloperStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Prepare medium developer interview questions"); + Console.WriteLine("Give him a small program to develop before he comes here"); + Console.WriteLine("Reserve a meeting with any senior developer"); + } + } + + public class SeniorDeveloperStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + 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"); + } + } + + public class RockstarDeveloperStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("We don't hire rockstar developers, because they are too cocky, this title was a trap"); + } + } +} diff --git a/src/StrategyPattern/ArrangeInterview/Strategy/IInterviewStrategy.cs b/src/StrategyPattern/ArrangeInterview/Strategy/IInterviewStrategy.cs new file mode 100644 index 0000000..7b97d71 --- /dev/null +++ b/src/StrategyPattern/ArrangeInterview/Strategy/IInterviewStrategy.cs @@ -0,0 +1,7 @@ +namespace StrategyPattern.ArrangeInterview.Strategy +{ + public interface IInterviewStrategy + { + void Arrange(InterviewedPerson person); + } +} diff --git a/src/StrategyPattern/ArrangeInterview/Strategy/ManagerStratgies.cs b/src/StrategyPattern/ArrangeInterview/Strategy/ManagerStratgies.cs new file mode 100644 index 0000000..34b17da --- /dev/null +++ b/src/StrategyPattern/ArrangeInterview/Strategy/ManagerStratgies.cs @@ -0,0 +1,36 @@ +using System; + +namespace StrategyPattern.ArrangeInterview.Strategy +{ + public class JuniorManagerStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("We don't hire junior managers"); + } + } + + public class MediumFullTimeManagerStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Reserve a meeting with one of the managers"); + } + } + + public class MediumNonFullTimeManagerStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("We dont hire Medium managers only full time"); + } + } + + public class SeniorAndRockstarManagerStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Reserver a meeting with all the managers"); + } + } +} diff --git a/src/StrategyPattern/ArrangeInterview/Strategy/TestingStrategies.cs b/src/StrategyPattern/ArrangeInterview/Strategy/TestingStrategies.cs new file mode 100644 index 0000000..c7b1115 --- /dev/null +++ b/src/StrategyPattern/ArrangeInterview/Strategy/TestingStrategies.cs @@ -0,0 +1,41 @@ +using System; + +namespace StrategyPattern.ArrangeInterview.Strategy +{ + public class JuniorTesterStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Prepare junior tester interview questions"); + Console.WriteLine("Reserve a meeting with any medium/senior tester"); ; + } + } + + public class MediumTesterStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("Prepare medium tester interview questions"); + Console.WriteLine("Reserve a meeting with any senior tester"); + } + } + + public class SeniorTestingStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + 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"); + } + } + + public class RockstarTestingStrategy : IInterviewStrategy + { + public void Arrange(InterviewedPerson person) + { + Console.WriteLine("get third party rockstar testers to test him out"); + Console.WriteLine("Reserver a meeting with one of the managers"); + } + } +}