У меня есть кусок кода Ruby, который сводится к следующему:Ruby: Совершенствование метода сложной инициализации
class Foo
attr_reader :a, :b, :c
def initialize
build_a
build_b
build_c
end
private
def build_a
# something complex that eventually results in @a = something
end
def build_b
# something complex that eventually results in @b = something
end
def build_c
# something complex that eventually results in @c = something
end
end
Вызов build_*
в методе initialize
кажется немного излишним. Есть ли лучший способ написать это? Конечно, я в курсе ленивым загружения:
class A
def a
@a ||= something_complex
end
end
Но, мне нужен этот код, чтобы быть поточно, поэтому я не могу использовать этот шаблон здесь.
Edit: Моя главная забота с этим кодом, в том, что я хотел бы видеть тот факт, что build_a
должен быть вызван после инициализации, написанный в определении build_a
, а не в методе initialize
.
Хм, мне нравится идея помещать этот список строителей в другой метод, но я не думаю, что он решает главную проблему: этот список вызываемых методов. Возможно, я попытаюсь реализовать цикл, который вызывает все методы 'build_ *' или что-то в этом роде. –