Add ArrangeInterview motivational example
This commit is contained in:
committed by
Petrutiu Mihai
parent
015b1d3f9a
commit
a977b697fa
@@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
147
src/StrategyPattern/ArrangeInterview/InterviewPersons.cs
Normal file
147
src/StrategyPattern/ArrangeInterview/InterviewPersons.cs
Normal file
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using StrategyPattern.ShippingCalculator;
|
using StrategyPattern.ArrangeInterview;
|
||||||
|
using StrategyPattern.ShippingCalculator;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -13,13 +14,16 @@ namespace StrategyPattern
|
|||||||
{
|
{
|
||||||
public static void Run()
|
public static void Run()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
ArrangeInterviewMotivationalExample.Run(InterviewPersons.Get());
|
||||||
|
|
||||||
Console.WriteLine(GetDescription());
|
Console.WriteLine(GetDescription());
|
||||||
Console.WriteLine(WhenToUse());
|
Console.WriteLine(WhenToUse());
|
||||||
GoToNextStep();
|
GoToNextStep();
|
||||||
ShippingMotivatingExample.Run();
|
ShippingMotivatingExample.Run();
|
||||||
|
|
||||||
ShippingWithStrategyExample.Run();
|
Console.WriteLine("Now the same example, but implemented with strategy pattern");
|
||||||
|
ShippingWithStrategyExample.Run();
|
||||||
//TODO:add more examples
|
//TODO:add more examples
|
||||||
//Show the switch moving problem
|
//Show the switch moving problem
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user