현재로드 위치에 1 또는 100 개의 플러그인이있을 수있는 위치에 있습니다.동적으로로드 된 루비 파일이 포함 된 전역 방지
이제 문제는 각 플러그인이 시작 루비 파일 내에 정의 된 클래스의 인스턴스를 요구한다는 것입니다.
정말 간단한 예는 다음과 같습니다
#startup.rb
def load_plugins
#... get each plugin file
require each_plugin
end
class MuchUsedClass
def do_something
#...
end
end
muchUsedInstance = MuchUsedClass.new
load_plugins
#some_plugin.rb
class SomePluginClass
def initialize(muchUsedInstance)
@muchUsedInstance = muchUsedInstance
end
def do_something_with_instance
@muchUsedInstance.do_something
end
end
somePluginInstance = SomePluginClass.new(muchUsedInstance)
somePluginInstance.do_something_with_instance
가장 큰 문제는 당신이 필요로 호출 할 때, 그것이이 요구되고있다 전에 무슨 일이 있었는지에 대한 단서가되지 않는다는 것입니다. 그래서 다른 모든 필수 파일을 만족시키기 위해 시작 파일 내에서 전역 변수를 만드는 것이 좋지 않지만, 포함 된 파일로 일부 데이터를 전달할 수있는 유일한 방법 인 것처럼 보입니다. 또한 싱글 톤 클래스를 만들 수도 있습니다 이것의 일부를 폭로하기 위해, 그러나 그것은 또한 조금 더 심해 보입니다.
저는 여전히 루비에 익숙하지 않고 정적으로 형식이 지정된 안경을보고 있습니다. C#에서는 종속성 주입을 선택하고 그런 식으로 모든 것을 연결하는 데 괜찮은 패턴이 없을 것입니다.
네, 글로벌이 아니라는 것을 알고 있습니다. 내가 가지고있는 시나리오를 보여 주려고했는데 어떻게 해결할 수 있습니까? 다른 사람들이 생각해내는 것을보기 위해 질문을 공개적으로 남겨 둘 것입니다. 이론적으로 어디서나 인스턴스를 하드 코딩하고 싶지 않았기 때문에 좀 더 확장 가능하고 테스트하기 쉽도록하고 싶었습니다. – Grofit