Ruby on Rails 전문가가 Scaffolding을 사용하지 않는 이유는 무엇입니까?
나는 때때로 레일을 사용하는 것처럼 보이는 사람들로부터 그들이 배운 중요한 교훈 중 하나가 "비계를 사용하지 말라"는 것을 읽었습니다. 또한 irc에서는이 방향에서 일반적으로 힌트를 읽었습니다. 내 질문은 왜, 그것에 대해 나쁜 점은 무엇입니까? 그리고 nifty_scaffolding도 나쁜가요?
내 생각에는 컨트롤러 동작의 xml 버전이 기본적으로 생성되어 애플리케이션의 필드 이름을 누구에게나 노출시키고 공격에 더 취약하게 만들기 때문에 나쁘다고 생각합니다.
비계를하지 않는 이유는 무엇입니까?
저는 레일에 대한 경험이 있으며 최종 목표가 단순한 CRUD 작업과는 거리가 멀기 때문에 스캐 폴딩을 거의 사용하지 않습니다. 그러나 비계를 사용하지 않는다는 엄격한 규칙은 없습니다. 일부 코더는 실제로 비계 이기 때문에 눈살을 찌푸 립니다. 완제품이 아닙니다. 스캐 폴딩은 실제 제품을 만들 때 지원합니다. "scaffolding"에 대한 Google 이미지를 검색하면 아이디어를 얻을 수 있습니다.
염두에 두어야은 scaffold
단지 하나의 많은입니다 내장 레일 발전기 . Rails 생성기는 일반적인 코드를 출력하는 스크립트입니다. 생성기는 매우 유용한 시간 절약 도구이며 사용자 지정 요구 사항에 맞는 생성기 를 빠르게 작성할 수 있습니다.
대부분의 전문가들은 프로덕션 코드를 작성하는 것보다 테스트 기반 개발 방식을 선호하기 때문에 스캐 폴딩을 피한다고 생각합니다. 즉, 실패한 테스트를 먼저 작성한 다음 테스트를 통과하는 코드를 작성하려고합니다. 이것은 강력한 코드를 생성하는 좋은 방법이지만 매우 세분화 된 수준에서 가장 잘 작동합니다. 스캐 폴딩은 한 번에 너무 많은 작업을 수행하는 것처럼 보이므로 특정 기능에 대한 실패한 테스트를 작성한 다음 해당 특정 기능을 통과시키는 코드를 작성하는 엄격한 루프를 방해합니다. 비계 사용의 용이성 이상으로 그러한 습관에 들어가는 것이 더 중요 할 수 있습니다.
즉, 비계는 그 자체로 꽤 강력 할 수 있습니다.
레일의 사용을 이해하고 비계를 생성하고 그 한계를 인식하는 것이 중요합니다. 스캐 폴딩은 무언가를 빠르게 실행하고 가정을 테스트하는 데 도움이됩니다. 그러나 현실 세계에서는 너무 멀리 가지 않을 것입니다. 스캐 폴딩이있는 모델을 만들었다 고 가정 해 보겠습니다.
rails generate scaffold Article title:string body:text
큰! 이제 프로토 타입이 준비되었습니다. 그러나 이제 다른 필드 "저자"를 추가해야한다고 가정 해 보겠습니다.
rails generate migration add_to_article_author author:string
rake db:migrate
이제 테이블 기사에 새 열이 있지만 / app / views / articles의 파일은 동일한 이전 상태에 있습니다. 즉, 양식에 작성자 필드 등이 없습니다. 스캐 폴드를 다시 실행하면
rails generate scaffold Article title:string author:string body:text --skip-migration
이번에는 --skip-migrate를 추가했습니다. 이는 이전에 수행 되었기 때문에 동일한 테이블을 다시 마이그레이션하면 Rails가 실제로 불만을 표시합니다. 이제 scaffold는 처음 생성 한 파일을 덮어 쓰라는 메시지를 표시합니다. 덮어 쓰면 컨트롤러 /app/controllers/article_controller.rb 또는 /app/views/article/show.html.erb 또는 index.html.erb와 같은 뷰 파일에 대한 변경 사항도 삭제됩니다.
모든 가치있는 Rails 앱에는 커스텀 코드 (스캐 폴드에서 생성 된 상용구 코드가 아님)가 있으므로 Rails 프로그래머는 아이디어를 테스트 할 때만 스캐 폴드를 사용해야합니다. 스캐 폴드를 사용하여 클라이언트에게 놀 수있는 것을 제공하십시오. 그러나 실제 상용구 스캐 폴드 코드는 사용되지 않습니다.
스캐 폴딩은 실제로 프로덕션 용도로 사용되지 않습니다. 애플리케이션을 빠르게 부트 스트랩 한 다음 수정하거나 제거 할 수 있습니다.
Rails 3 스캐 폴딩은 실제로 꽤 괜찮은 편이지만 중첩 된 리소스를 처리하는 방법과 같은 것들이 여전히 부족하며 더 간단한 방법을 사용하지 않습니다 respond_with
( respond_to
, 필요하지 않거나 환영하지 않는 자세한 내용을 장려합니다).
기본 스캐 폴드 양식이 수정되지 않은 상태로 작동 할 가능성은 거의 없습니다. 아마도 .NET과 같은 데이터베이스의 열로 변환되는 모델간에 관계가있을 수 있습니다 user_id
. 관계가있는 모델의 스캐 폴드를 만들 때이 열은 URL에서 명확하게 유추되어야하거나보다 사용자 친화적 인 다른 인터페이스를 통해 선택되어야하는 양식의 텍스트 필드로 표시됩니다.
이와 같은 사소한 세부 사항이 많이있어 스캐 폴딩을 즉시 즉시 사용할 수있는 코드로 사용할 가능성이 거의 없습니다. 스캐 폴드를 생성 한 다음 틈을 메우고 필요하지 않은 영역을 정리하여 애플리케이션을 확실히 구축 할 수 있으며, 대부분의 Rails 개발자가 어느 정도이 작업을 수행한다고 생각합니다.
두 가지 이유로 스캐 폴딩을 사용하지 않습니다.
- Rails 스캐 폴딩은 모든 것을 html 테이블에 넣습니다.
- 내 관리 페이지에 rails_admin gem 을 사용하는 것을 선호 하므로 스캐 폴드 코드의 90 %가 필요하지 않습니다.
XML 문제는 사람들이 스캐 폴딩을 사용하지 말라고 조언하는 이유가 아닙니다. 내 페이지의 XML 버전은 앱이 생성해야하는 경로의 수를 두 배로 늘려서 오버 헤드가 약간 증가하므로 신경 쓰지 않습니다.
지금까지 사람들은 숙련 된 레일 프로그래머는 스캐 폴딩을 사용하지 않으며 그 이유는 주로 타당한 이유라고 말했습니다. 나는 초보자도 비계를 사용하지 않는다고 주장합니다.
스캐 폴딩으로 얼마 동안 행복하게 지내다가 published
Post 모델에 대한 부울 필드 를 포함하는 것을 잊었을 수 있습니다. 따라서 테이블에 속성을 추가하는 마이그레이션을 생성합니다. 밖). 그런 다음 스캐 폴드가 생성 한 양식에이를 추가하는 방법도 알아 내야합니다. 그런 다음 평생 동안 양식을 제출할 때 업데이트되지 않는 이유를 파악할 수 없으며 많은 투쟁과 시간을 낭비한 후 스캐 폴드가 다른 사람에게 한 것처럼 해당 속성에 대한 대량 할당을 허용하지 않았 음을 알게되었습니다. . Rails가 작동하는 방식에 대해 전혀 알지 못합니다.
Rails를 배우는 중이라면 M the V와 C를 직접 빌드했다면 MVC에 대해 훨씬 더 많이 이해하게 될 것입니다.
나는 스캐 폴딩이 새로운 레일 버전의 새로운 것을 확인하는 데 매우 좋다고 생각합니다 (예를 들어 이제 레일 4에서 매개 변수는 컨트롤러에서 물건을 허용합니다). 빠른 프로토 타이핑에 사용할 수 있습니다. 전체 스캐 폴드를 생성 할 필요가없는 경우가 많습니다.
참고 URL : https://stackoverflow.com/questions/6735468/why-do-ruby-on-rails-professionals-not-use-scaffolding
'Programing' 카테고리의 다른 글
AndroidJUnit4 및 ActivityTestRule을 단위 테스트 클래스로 가져올 수없는 이유는 무엇입니까? (0) | 2020.11.29 |
---|---|
트랩 표현 (0) | 2020.11.28 |
SHA-1 커밋 객체에 대한 정보를 얻습니까? (0) | 2020.11.28 |
PHP에서 특정 유형의 객체를 확인하는 방법 (0) | 2020.11.28 |
Rails Asset Pipeline 사전 컴파일 프로세스의 속도를 높이려면 어떻게해야합니까? (0) | 2020.11.28 |