patterncsharpModerate
Refactoring a bunch of and statements
Viewed 0 times
refactoringstatementsbunchand
Problem
Trying to refactor this code and can't seem to think of a way to make it cleaner.
I should note that there are other types in the
Type is a property in my Person class.foreach (var item in list)
{
if (person.Type != PersonType.Employee && person.Type != PersonType.Manager && person.Type != PersonType.Contractor && person.Type != PersonType.Executive)
{
DoSomething();
}
}
public enum PersonType : int {
Employee = 0,
Manager = 1,
Contractor = 2,
President = 3,
Executive = 4
}I should note that there are other types in the
PersonType class which I don't want to show.Solution
This is such a perfect match for the Replace Conditional with Polymorphism Refactoring that it even looks as if it was specifically designed to demonstrate the Replace Conditional with Polymorphism Refactoring. I mean, the field it is basing its behavior on is even called
Type!interface Person { void DoSomething(); }
class PrivilegedPerson : Person {
public void DoSomething() {
// do something
}
}
class UnprivilegedPerson : Person {
public void DoSomething() {} // literally do nothing
}
class Employee : UnprivilegedPerson {}
class Manager : UnprivilegedPerson {}
class Contractor : UnprivilegedPerson {}
class President : UnprivilegedPerson {}
class Executive : UnprivilegedPerson {}Code Snippets
interface Person { void DoSomething(); }
class PrivilegedPerson : Person {
public void DoSomething() {
// do something
}
}
class UnprivilegedPerson : Person {
public void DoSomething() {} // literally do nothing
}
class Employee : UnprivilegedPerson {}
class Manager : UnprivilegedPerson {}
class Contractor : UnprivilegedPerson {}
class President : UnprivilegedPerson {}
class Executive : UnprivilegedPerson {}Context
StackExchange Code Review Q#946, answer score: 15
Revisions (0)
No revisions yet.