Мне нужно провести рефакторинг этого кода, так как с точки зрения SOLID это не очень хорошая практика (не расширяемая), какие есть альтернативы?
У меня есть текстовый файл, из которого я читаю команды,его формат выглядит следующим образом:
ADD_CHILD name1 name2 пол
GET_RELATIONSHIP отношение name1 ..
Мне кажется, что проблема в том, что когда я передаю слова потому что, если формат текстового файла изменится, мой код сломается. Одна вещь, которая приходит на ум, это использование операторов if-elif, но они не рекомендуются по принципу открытого-закрытого. Каковы другие возможные подходы?
path_str=input("Enter the path of input file ")
fileinput=open(path_str,"r")
for line in fileinput:
words=line.split()
function=set1solution.function_select_map.get(words[0])
result=function(family,words)
function_select_map={
"ADD_CHILD":add_child,
"GET_RELATIONSHIP":get_relationship
}
relation_map={
"Paternal-Uncle":Family.get_Paternal_Uncle,
......}
def add_child(family,words):
#find person just returns an object of person class
parent=family.find_person(words[1])
new_addition=Person(words[2],words[3],words[1])
result=family.add_external_child(words[1],new_addition.name,new_addition.gender)
return result
def get_relationship(family,words):
person=family.find_person(words[1])
function=set1solution.relation_map.get(words[2])
result=function(family,person)
return result