2011-09-01 4 views
2

레일스 애플리케이션의 백엔드에서 코딩 된 물류 시스템에서 비즈니스 로직을 추출하고 싶습니다. 점점 더 복잡해지고 있습니다. 좋은 OOP를 통해 더 해줍니다. ifs를 많이 코딩하는 것보다 더 좋은 옵션이 있다는 것을 확신합니다.Rails 앱에서 비즈니스 로직을 추출 할 때 어떤 옵션이 있습니까?

나는 그런 목적으로 어떤 옵션을 갖고 있는지 알고 싶습니다. 약간의 연구가 Treetop 또는 Rools 파서 라이브러리로 안내했습니다. 내가하고 싶은 것들에 대한 이러한 좋은 옵션이 있습니까? 여기에 놓친 패턴/개념이 있습니까? 대신 직접 코딩하는 방법을 배울 수 있습니까?

귀하의 의견과 제안을 듣고 싶습니다.

덕분에 많은

PS : 아, 그리고 정말 비즈니스 로직 대신 그냥 하드 코딩을위한 새로운 언어를 사용하는 승리? Treetop의 예제에서 볼 수 있듯이 Ruby 위에 DSL과 같습니다.

+2

"새로운"언어가 아닙니다. 이것은 루비 사용의 핵심 개념입니다. 문제를 해결하기 위해 의미와 구문 설탕을 관리 할 수있는 DSL을 만들 수 있습니다. –

+0

좋습니다. 좋은 지적입니다. 그러나 DSL과 마찬가지로 여러분 (그리고 미래의 유지 관리자)도 그것을 배워야합니다. 너무 많은 "개념적"오버 헤드가 추가되는지 궁금합니다. – alvatar

+1

그건 사실입니다. 하지만 대부분의 루비 dsl의 목표는 rspec 용으로 사용한 것과 같이 이해하기 쉽도록하는 것입니다. 이 경우 일반 영어로 지침을 작성하는 것과 거의 같습니다. 그것이 비밀 스럽다면 어떤 경우에 사용하는 것이 왜 유익할까요? –

답변

2

저는 비즈니스 로직을 보석으로 추출하려고합니다. 그것의 대부분은 여기저기서 약간의 비틀기와 함께 단지 복사/붙여 넣기 일 것이다.

이 접근법의 가장 큰 장점은 보석이 비즈니스 논리에만 집중한다는 것입니다. 따라서 표현 등을 다루지 않을 것입니다. tdd로 모든 것을 테스트하는 한 괜찮을 것입니다.

최상의 경우는 당신의 보석을 필요로 다음과 같은 가장 중요한 메서드를 호출하는 것입니다 : 또한 당신은 쉽게 다른 레일 응용 프로그램의 로직을 사용할 수, 코드가 깨끗하고 모듈 형 유지

require 'mygem' 
class SomeClass < ActiveRecord::Base 
    def important_method arg1, arg2 
    MyGem.compute_results arg1, arg2 
    end 
end 

이 방법을 .

이것은 논리가 일부 하드 코어 계산/루비 코드라고 가정합니다. 비즈니스 로직이 일부 SQL 문인 경우 앱에 그대로 두십시오.

+0

이 경우 SQL과 계산이 혼합되어 있습니다. 나는 보석으로 추출하는 것이 최선의 선택이 아니라고 생각합니다. 나는 정말 당신의 대답에 감사드립니다! 감사합니다 – alvatar

+0

계산 만 추출하거나 보석을 만드는 대신 플러그인을 만들 수 있습니다. 플러그인은 보석처럼 모듈화되어 있지 않지만, 보통 약간의 노력으로 다른 애플리케이션으로 포팅 할 수 있습니다. – ayckoster

+0

하지만 왜 논리를 내 보내려 하시겠습니까? 최소한 그것이 프로그램의 가장 특수한 부분 중 하나라는 것을 알기 때문에 정확한 논리를 다시 사용하지 않을 것입니다. 다시 사용할 수있는 것은 규칙을 정의하는 언어입니다. 따라서 이걸로 보석을 만드는 것이 합리적입니다. 다른 곳에서 다시 사용하지 않을 것이라는 것을 알고있는 경우 왜 그러한 규칙을 내보내려고합니까? – alvatar

관련 문제