lib/안에 모듈을 사용하여 monkeypatching을 사용하는 것이 좋습니다.
Client
리소스가 필요하다고합시다. 당신은 기본 파일에 대한 "일반"(모든 dificulty 수준에 의해 공유) 기능을 넣어 시작 '매체'에 client.rb
및 client_controller.rb
에 대한
# /app/models/client.rb
class Client < ActiveRecord::Base
def foo
# default and/or "easy" implementation
end
end
# /app/controllers/client_controller.rb
class ClientController < ApplicationController
def bar
# default and/or "easy" implementation
end
end
Monkeypatches을 (또는, 거기에 "쉽게"구현을 넣을 수 있습니다) 어려움은 /lib/medium
모듈 내부에 배치 될 수 :
# /lib/medium/models/client_patch.rb
class Client
def foo
# medium implementation
end
end
# /lib/medium/controllers/client_controller_patch.rb
class ClientController
def bar
# medium implementation
end
end
당신은 어려움에 따라 모든 패치를 포함하는 파일이 필요합니다.
# /config/initializers/difficulty.rb
# require 'easy'
require 'medium'
# require 'difficult'
그런 다음 응용 프로그램의 세 가지 다른 경우, 쉽게 하나, 하나를 실행할 수 있습니다 :
# /lib/medium.rb
require 'medium/models/client_patch'
...
require 'medium/controllers/client_controller_patch'
그래서 당신은 초기화에서 필요할 수 있습니다 : 간단한 해결책이 같은 간단한 파일이 될 것입니다 매체에 그리고 1 개는 곤란하다. 코드는 어려움 .rb 이니셜 라이저를 제외하고는 공유 될 것입니다 (그리고 데이터베이스, 로그 파일 등에 다른 설정 파일이 필요하다고 가정합니다).
Seth, if/else 블록을 리팩터링하는 방법에 대한 질문 또는 전체 프로그램을 필요로하지 않도록 재 설계하는 방법에 대한 질문입니다. 모델, 컨트롤러 또는 뷰에 대해 특히 걱정하고 있습니까? 아니면 위의 모든 것입니까? 제공 한 정보를 기반으로 리팩토링을 제안하는 것은 어렵습니다. – Andrew