Rails Model, View, Controller 및 Helper : 어디로 가는가?
Ruby on Rails Development (또는 일반적으로 MVC)에서 로직을 어디에 배치해야하는지에 대한 빠른 규칙을 따라야합니다.
긍정 답변 해주세요 - 함께 음주 여기를 넣어 ,보다는 음주 것을 거기에 넣지 .
MVC
컨트롤러 : 사용자가 원하는 것을 해결하고, 무엇을 줄 것인지, 로그인했는지, 특정 데이터를 볼 수 있는지 등을 결정하는 것과 관련된 코드를 여기에 넣으십시오. 결국 컨트롤러는 요청을 봅니다. 표시 할 데이터 (모델)와 렌더링 할 뷰를 계산합니다. 코드가 컨트롤러에 들어가야하는지 확실하지 않다면 아마 그렇지 않을 것입니다. 컨트롤러를 마른 상태로 유지하십시오 .
보기 :보기에는 데이터 (모델)를 표시하기위한 최소 코드 만 포함되어야하며, 많은 처리 또는 계산을 수행해서는 안되며, 모델에서 계산하거나 요약 한 데이터를 표시하거나 컨트롤러에서 생성 한 데이터를 표시해야합니다. 뷰가 실제로 모델 또는 컨트롤러로 수행 할 수없는 처리를 수행 해야하는 경우 코드를 도우미에 넣으십시오. 뷰에 많은 루비 코드가있어 페이지 마크 업을 읽기가 어렵습니다.
모델 : 모델은 데이터와 관련된 모든 코드 (사이트를 구성하는 엔티티 (예 : 사용자, 게시물, 계정, 친구 등)) 가있는 곳이어야합니다 . 코드가 엔티티와 관련된 데이터를 저장, 업데이트 또는 요약해야하는 경우 여기에 입력하십시오. 뷰와 컨트롤러에서 재사용 할 수 있습니다.
pauliephonic의 답변에 추가하려면 :
도우미 :보기를보다 쉽게 만들 수있는 기능입니다. 예를 들어, 가격을 표시하기 위해 항상 위젯 목록을 반복하는 경우 실제 표시의 일부와 함께 도우미에 배치하십시오. 또는보기를 어지럽히고 싶지 않은 RJS 조각이 있으면 도우미에 넣으십시오.
MVC 패턴은 실제로 UI에만 관련이 있습니다. 컨트롤러는 뷰를 제어하지만 로직은 제어하지 않으므로 복잡한 비즈니스 로직을 컨트롤러에 넣지 마십시오. Controller는 적절한보기를 선택하고 도메인 모델 (모델) 또는 비즈니스 계층에보다 복잡한 항목을 위임하는 데 관심을 가져야합니다.
Domain Driven Design에는 서비스 개념이 있으며, 이는 여러 종류의 객체를 오케스트레이션해야하는 로직이며, 일반적으로 Model 클래스에 속하지 않는 로직을 의미합니다.
나는 일반적으로 서비스 계층을 내 응용 프로그램의 API로 생각합니다. 내 서비스 계층은 일반적으로 내가 만드는 응용 프로그램의 요구 사항에 매우 가깝게 매핑되므로 서비스 계층은 내 앱의 하위 수준에서 발견되는 더 복잡한 상호 작용을 단순화하는 역할을합니다. 즉, 서비스 계층을 우회하는 동일한 목표를 달성 할 수 있습니다 하지만 작동하려면 더 많은 레버를 잡아야합니다.
나는 여기서 Rails에 대해 이야기하지 않고 특정 문제를 해결하는 일반적인 건축 스타일에 대해 이야기하고 있습니다.
여기에 완벽한 설명이 있습니다. 결론과 기억하기 쉬운 간단한 문장입니다.
SMART 모델, THIN 컨트롤러 및 DUMB 뷰가 필요합니다.
http://c2.com/cgi/wiki?ModelViewController
Rails 방식은 스키니 컨트롤러와 팻 모델을 사용하는 것 입니다.
인증 / 액세스 제어와 관련된 것을 컨트롤러에 넣습니다.
모델은 모든 데이터에 관한 것입니다. 검증, 관계, CRUD, 비즈니스 로직
조회수는 데이터를 표시하는 것입니다. 표시 및 입력 만.
컨트롤러는 모델에서 뷰로 이동하는 데이터와 뷰에서 모델로 이동하는 데이터를 제어하는 것입니다. 컨트롤러는 모델 없이도 존재할 수 있습니다.
나는 컨트롤러를 경비원 / 수신자라고 생각합니다. 고객 (요청)을 고객에게 요청하는 적절한 카운터로 안내합니다 (보기). 그런 다음 출납원 (보기)은 관리자 (모델)로부터 답변을 얻습니다. 그런 다음 요청은 경비원 / 수신자 (컨트롤러)로 돌아가서 다른 텔러 (보기)에게 갈 때까지 기다립니다. 다른 텔러 (보기)는 관리자 (모델)가 다른 텔러 (보기) 질문에 대한 답변을 알려줍니다. .
마찬가지로 텔러 (보기)에게 무언가를 말하고 싶다면 두 번째 텔러가 관리자가 귀하의 정보를 수락했는지 여부를 알려주는 것을 제외하고는 거의 동일한 일이 발생합니다. 관리자에게 해당 정보를 알려줄 권한이 없기 때문에 경비원 / 수신자 (컨트롤러)가 하이킹을하도록 지시했을 수도 있습니다.
비유적이고 비현실적인 세계에서 은유를 확장하기 위해, 텔러 (조회)는 예쁘지 만 머리가 비어 있고 종종 당신이 말하는 것을 믿습니다. 가지 말고 관리자는 정말 추악하고 의미가 있지만 모든 것을 알고 무엇이 진실인지 아닌지를 말할 수 있습니다.
적절하게 분리하는 데 도움이되는 한 가지는 "컨트롤러에서 로컬 변수를 전달하여"반 패턴을 피하는 것입니다. 이 대신에 :
# app/controllers/foos_controller.rb:
class FoosController < ApplicationController
def show
@foo = Foo.find(...)
end
end
#app/views/foos/show.html.erb:
...
<%= @foo.bar %>
...
도우미 메소드로 사용 가능한 게터로 이동하십시오.
# app/controllers/foos_controller.rb:
class FoosController < ApplicationController
helper_method :foo
def show
end
protected
def foo
@foo ||= Foo.find(...)
end
end
#app/views/foos/show.html.erb:
...
<%= foo.bar %>
...
이렇게하면 "@foo"에 넣은 내용과 사용 방법을보다 쉽게 수정할 수 있습니다. 컨트롤러와 뷰를 더 복잡하게 만들지 않고 분리합니다.
글쎄, 그것은 논리가 처리해야 할 것에 달려 있습니다.
종종 더 많은 것을 모델로 밀어 넣어 컨트롤러를 작게 유지하는 것이 좋습니다. 이를 통해 모델이 나타내는 데이터에 액세스해야하는 모든 위치에서이 논리를 쉽게 사용할 수 있습니다. 뷰에는 로직이 거의 없어야합니다. 따라서 실제로는 일반적으로 반복하지 않도록 노력해야합니다.
Also, a quick bit of google reveals a few more concrete examples of what goes where.
Model: validation requirements, data relationships, create methods, update methods, destroy methods, find methods (note that you should have not only the generic versions of these methods, but if there is something you are doing a lot, like finding people with red hair by last name, then you should extract that logic so that all you have to do is call the find_redH_by_name("smith") or something like that)
View: This should be all about formatting of data, not the processing of data.
Controller: This is where data processing goes. From the internet: "The controller’s purpose is to respond to the action requested by the user, take any parameters the user has set, process the data, interact with the model, and then pass the requested data, in final form, off to the view."
Hope that helps.
In simple terms, generally, Models will have all the codes related to table(s), their simple or complex relationships (think them as sql queries involving multiple tables), manipulation of the data/variables to arrive at a result using the business logic.
Controllers will have code/pointers towards the relevant models for the job requested.
Views will accept the user input/interaction and display the resultant response.
Any major deviation from these will put unwanted strain on that part and the overall application performance may get impacted.
Testing, Testing ... Put as much logic as possible in the model and then you will be able to test it properly. Unit tests test the data and the way it is formed by testing the model, and functional tests test the way it is routed or controlled by testing the controllers, so it follows that you can't test the integrity of the data unless it is in the model.
j
참고URL : https://stackoverflow.com/questions/60658/rails-model-view-controller-and-helper-what-goes-where
'Programing' 카테고리의 다른 글
Go에서 JSON Marshal을 사용한 소문자 JSON 키 이름 (0) | 2020.06.08 |
---|---|
GitHub에서 요점을 어떻게 관리합니까? (0) | 2020.06.08 |
패딩을 무시하는 절대 위치 지정 (0) | 2020.06.08 |
제공자가 Oracle 클라이언트 버전과 호환되지 않습니다 (0) | 2020.06.08 |
Vim 매크로 저장 (0) | 2020.06.08 |