Я часто возвращаю логическое значение из метода, который используется в нескольких местах, чтобы хранить всю логику вокруг этого метода в одном месте. Все (внутренний) вызывающий метод должен знать, была ли операция успешной или нет.
Я использую Python, но вопрос не обязательно специфичен для этого языка. Есть только два варианта, которые я могу придумать
- Вызовите исключение, хотя обстоятельства не являются исключительными, и не забудьте перехватить это исключение в каждом месте, где вызывается функция
- Верните логическое значение, как я делаю.
Это действительно простой пример, который демонстрирует то, о чем я говорю.
import os
class DoSomething(object):
def remove_file(self, filename):
try:
os.remove(filename)
except OSError:
return False
return True
def process_file(self, filename):
do_something()
if remove_file(filename):
do_something_else()
Хотя это функционально, мне действительно не нравится этот способ что-то делать, он «пахнет» и может иногда приводить к множеству вложенных ifs. Но я не могу придумать более простой способ.
Я мог бы обратиться к более философии LBYL и использовать os.path.exists(filename)
перед попыткой удаления, но нет никаких гарантий, что файл не будет заблокирован за это время (это маловероятно, но возможно), и мне все еще нужно определить, было ли удаление успешным или нет.
Является ли это «приемлемым» дизайном, и если нет, то каким будет лучший способ его разработки?