У меня есть код, который выполняет различные проверки базы данных на основе переданного строкового значения. Я могу решить это с помощью нескольких условных операторов (if и else), и я точно знаю, что это нарушает принцип OCP в Solid, потому что он открыт для модификации. Я думал о способах приблизиться к этому, но это только усложняет кодовую базу. (Простота является ключевым моментом)
Как лучше всего это сделать?
В настоящее время я пытался создать интерфейс, реализованный классами, но я не могу оценить на основе переданного значения, поскольку он выполняет все классы, реализующие интерфейс.
Пример, если есть переданные строки, такие как «готовить», «выпекать», «спать» и «драться». Я не хочу писать: если(действие == 'готовить'), то СДЕЛАТЬ это, или если(действие == 'выпечка'), то СДЕЛАТЬ это, или если(действие == 'спать'), то СДЕЛАТЬ это, или если(действие == 'драться') тогда СДЕЛАЙТЕ это
Скорее то, что я сделал, это создал интерфейс
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(){
.....
}
}
Основная проблема возникает, когда если действие передано, это приготовление. Я хочу выполнить только метод повара. Действие.Действие(); выполняет все классы, реализующие интерфейс.
public IHttpActionResult ThingToDo(string action){
if(string.IsnullOrEmpty(action) == false){
bool response = Iaction.Act();
}
....
....
...
}
Есть ли способ добиться этого с помощью OCP в Solid Principle?
Iaction.Act()
. - person Fildor   schedule 10.10.2019Act
не статический метод, не так ли? Должно быть что-то вродеIaction localAction = .... ; localAction.Act();
- person Fildor   schedule 10.10.2019