У меня есть код, который выполняет различные проверки базы данных на основе переданного строкового значения. Я могу решить это с помощью нескольких условных операторов (если и еще), и я точно знаю, что это нарушает принцип OCP в Solid, потому что он открыт для модификации. Я думал о способах подойти к этому, но это только усложняет кодовую базу. (Простота является ключевым фактором)
Каков наилучший способ сделать это?
В настоящее время я пытался создать интерфейс, который реализовали классы, но я не могу оценить его на основе переданного значения, посколькуон выполняет все классы, которые реализуют интерфейс
Пример, если переданы такие строки, как «cook», «bake», «sleep» и «fight». Я не хочу писать: if (action == 'cook'), тогда DO это или if (action == 'bake'), тогда DO это или if (action == 'sleep'), тогда DO это или if (action== 'fight'), тогда ДЕЛАЙТЕ это
Скорее, я создал интерфейс
public interface Iaction{
public bool Act();
}
//then create various classes that implemented the interface
public class Sleep: Iaction{
public bool Act(){
.....
}
}
public class Cook: Iaction{
public bool Act(){
.....
}
}
public class Bake: Iaction{
public bool Act(){
.....
}
}
public class Fight: Iaction{
public bool Act(){
.....
}
}
Основная проблема возникает, если переданное действие - готовить. Я хочу только выполнить метод повара. Iaction.Act ();выполняет все классы, которые реализовали интерфейс.
public IHttpActionResult ThingToDo(string action){
if(string.IsnullOrEmpty(action) == false){
bool response = Iaction.Act();
}
....
....
...
}
Есть ли способ добиться этого с помощью OCP в Solid Principle?