2013-01-21 1 views
4

ASP.NET MVC 응용 프로그램과 Java 웹 응용 프로그램에는 별도의 패키지/dll에 비즈니스 논리를 유지하고 데이터베이스 및 전달 메커니즘 (웹 응용 프로그램, 웹 서비스, 기본 모바일 또는 데스크톱 등)을 처리하는 일반적인 방법이 있습니다.)을 details that are plugged in으로 지정합니다. Rails 애플리케이션이 분할되지 않고 비즈니스 로직이 보석으로 옮겨지는 이유는 무엇입니까?

내가 말할 수있는 구조의이 유형의 장점 중 일부

은 다음과 같습니다

  • 그것은 비즈니스의 수용과 단위 테스트를 실행하는 것이 가능
  • 다른 전달 메커니즘 또는 지속성 레이어와 비즈니스 로직의 재사용 웹 프레임 워크를로드하거나 데이터베이스에 연결할 필요없이 로직. 테스트가 무엇인지의 관점에서 응용 프로그램의 매우 빠른
  • 생각하지는

를 전달하지만, 이러한 행위는 레일 사회에서 일반적이지 방법; 비즈니스 로직이 보석에 보관되어 있고 기본 ORM이 모두 지속성 로직과 비즈니스 로직을 묶어 놓은 Rails 애플리케이션은 없습니다. 불필요하다고 언급 한 방식으로 구조화 응용 프로그램을 만드는 Ruby에 대해 뭔가 있습니까?

답변

3

"필수"를 정의하십시오. 그것은 이 필요합니다.. NET 또는 Java에서이 작업을 수행하려면 입니다.

레일 앱은 종종 하나의 앱에서 웹 앱과 관련 서비스 만 공개합니다.

테스트는 비슷합니다. 이 필요합니다.이 필요합니다. 코드를 별도로 테스트하기 위해 애플리케이션 기능을 해체하고 레일스에서 ​​테스트하는 것은 다릅니다. 단위 테스트, 스펙 등 코드의 모든 레벨에서 실행될 수있는 다양한 메커니즘과 조롱하는 다양한 메커니즘이 있습니다. 기능의 임의의 부분.실제로 실제로 스위치 지속성 층 (I 개발의 삼십년 그렇게 정확히 한 번 한 적이 있지만, 분명히, 일화의) 상당히 특이한 비록

지속성 층은 일반적으로 AR 층에 의해 처리됩니다. 또한 루비의 일부 스위치는 덕 타이핑 때문에 코드 수준에서 투명합니다 (예 : ActiveRecord 대신 ActiveResource로 이동하여 거의 투명하게 로컬 DB에서 서비스로 하나의 응용 프로그램을 전환했습니다. 그 이후의 모든 것을 최적화하고 데이터 모델을 매우 단순하게 만들었습니다.)

이 모든 것들은 Ruby 언어가 필요없이 기능을 쉽게 만들 수 있기 때문에 IMO Rails 커뮤니티는 종종 "엔터프라이즈"상점에서 관행을 간과 해 왔습니다. over-architect에. 그러나 앱의 특정 크기에 도달하면 이러한 제한 사항이 명확 해집니다.

Ruby 및 Rails 개발의 최근 동향에는 수년간 엔터프라이즈에서 수행 한 작업이 포함됩니다 (예 : Java보다 Ruby에서 구현하기가 훨씬 쉽습니다). 그러나 라이브러리 자체로 기능을 나누는 것은 그리 유용하지 않습니다. 으로 분류해야합니다. 이지만, 그렇게해야하는 환경에서 발생합니다.

+0

반드시 각 레이어를 다른 보석에 넣지 않고도 내 코드의 다른 레이어를 테스트 할 수있는 부분은 제 질문에 대한 답변이었습니다. 비즈니스 로직과 웹 프레임 워크 코드를 명확하게 구분해야한다면 항상 좋은 폴더 구조를 사용할 수 있습니다. 이렇게하면 MacRuby 앱이나 다른 앱을 만들어야 할 필요가 없으므로 내 비즈니스 로직 코드를 보석으로 가져 오는 것이 더 쉬울 것입니다. 이것은 당신이 만든 또 하나의 멋진 점으로 나를 인도합니다. 필요한 경우에만 코드를 보석으로 분해합니다. – enamrik

+0

이제 생각해 봅시다.NET 런타임 및 JVM 및 관련 IDE가 작동하므로 dll/패키지가 너무 간단하여 폴더와 같은 조직 도구로 사용할 수 있습니다. 아마도 이러한 플랫폼에서 코드 조직을위한 폴더 대신 프로젝트를 사용하는 것이 더 일반적입니다. – enamrik

0

레일은 모두 구성에 대한 관례입니다. 그리고 그것의 의견/모범 사례가 제시되었습니다.

BLL을 보석으로 분해하는 데 큰 이점은 없습니다. 내 웹 앱과 독립적이며 재사용 할 수있는 코드가 없다면 말이다. 예를 들어 회사 포럼 용 BBCode 파서를 최근에 만들었으므로 모든 레일 앱에 연결할 수있는 GEM으로 패키징했습니다. github에는 레일을 기능적으로 확장시키는 수천 개의 GEM이 있습니다.

레일 앱용 GEM을 만드는 모든 아이디어는 코드 재사용이어야합니다. 더 많은 코드 분리를 시도하기 위해 코드를 분리하는 경우 레일 협약에 의존하지 않고 다른 레일 개발자가 프로젝트에 착수하면 학습 곡선이 생깁니다.

레일에서 웹 프레임 워크를로드하지 않는 테스트 시스템을 원하는 수만큼 사용할 수 있습니다. 전체적으로 거대한 주제에서 테스트하기 위해 RSpec과 그 밖의 것들을 살펴 보았습니다. 그리고 테스트를 가속화하는 몇 가지 방법이 있습니다 (예 : Guard 및 Spork 사용)

모두가 실제로 응용 프로그램에 따라 다릅니다. Rails의 아이디어는 애플리케이션을 신속하게 완료하는 것입니다. 내 경험에 비추어 볼 때 Java 개발은 상당히 느립니다. ASP와 동일합니다. 그러나 그것들은 단지 "나쁜 경험"일지도 모른다. 많은 사람들이 맹세합니다.

0

대체로 노력과 구성에 관한 것입니다.

노력 : -

새로운 보석을 설정는 약간의 시간이 소요됩니다 (등 테스트, 조롱, 문서 및 모든 프로젝트 종속성의 자신의 특정 세트가)의 개별 포인트를 분해하자 구성 : 대부분의 Rails 앱은 ActiveRecord를 사용하기 때문에; 모델 레이어를 분할하는 것이 조금 더 어렵습니다 (plentyofgems). 그러나 Rails::Engine은 그 주변의 고통을 경감시키는 데 많은 도움이됩니다.

비용 : 대부분의 레일 프로젝트의, 당신은 별도의 보석/REPO 속으로 코드를 분할하여 얻을 것이 거의있다 : (

  • 대부분의 프로젝트가 서로간에 코드를 공유하지 않는 때 그들은 설정 보석)

  • 코드를 테스트하는 방법에는 차이가 없으며 적절한 설정이 필요합니다. 보석이나 주 프로젝트에서.

  • 주요 이점은 인터페이스/층 사이 명시 적 계약을 강제하는 것입니다 - (아무 문제/당신의 컨트롤러 등을 타격 승을 당신은 모델을 테스트 할 수 있습니다) - 그리고 루비 커뮤니티의 단지 적은 유행

관련 문제