문제

나는 한동안 웹 애플리케이션을 개발해 왔으며 MySQL에 대해 매우 편안합니다. 실제로 많은 사람들이 거의 매일 어떤 형태의 SQL을 사용하는 것처럼. 나는 구문을 좋아하고 A는 쿼리를 작성하거나 테이블을 최적화하는 문제가 없습니다. 나는 이것을 MySQL을 즐겼다 API.

저를 괴롭히는 것은 Ruby on Rails가 ActiveRecord를 사용하고 모든 것을 마이그레이션하여 기능을 사용하여 데이터베이스를 쿼리하는 것입니다. 나는 당신이 "SQL을 다시는 볼 필요가 없다"고 생각합니다. 어쩌면 이것은 키스가 아니지만 (단순한 바보로 유지) ActiveRecord 인터페이스가 정말로 가장 좋습니까? 그렇다면 왜?

SQL 진술을 건강하게 작성하지 않고도 개발이 있습니까? 레일 기능으로 아직 정의되지 않은 것을 찾아야한다면 어떨까요? 나는 그들이 사용자 정의 쿼리를 할 수있는 함수가 있다는 것을 알고 있습니다. 나는 사람들이 MySQL을 통해 ActiveRecord를 사용하는 것이 장점이 무엇이라고 생각하는지 알고 싶다고 생각합니다. 누군가 나처럼 느끼면 레일 커뮤니티가 수학 커뮤니티에 계산기가 무엇인지, 어떤 사람들은 오래 걸리는 방법을 잊을 수 있다고 생각합니다. 분할.

도움이 되었습니까?

해결책

ActiveRecord의 레이어 뒤에 SQL을 숨기는 것은 사람들이 생성 된 SQL을 확인하는 것을 잊을 수 있음을 의미합니다. 나는 이것에 대해 물린다 : 인덱스 누락, 비효율적 인 쿼리 등.

ActiveRecord가 허용하는 것은 쉬운 일을 쉽게 만드는 것입니다.

Post.find(1)

vs

SELECT * FROM posts WHERE posts.id = 1

개발자 인 귀하는 입력 할 수 없으므로 오류에 대한 기회가 줄어 듭니다.

검증은 ActiveRecord가 쉽게 만드는 또 다른 것입니다. 어쨌든 그렇게해야하므로 쉽게 할 수있는 방법이 없습니까? 반복적이고 지루한 부품으로 추상화 되었습니까?

class Post < ActiveRecord::Base
  validates_presence_of :title
  validates_length_of :title, :maximum => 80
end

vs

if params[:post][:title].blank? then
  # complain
elsif params[:post][:title].length > 80 then
  # complain again
end

다시, 지정하기 쉽고 검증이 쉽습니다. 더 많은 검증을 원하십니까? ActiveRecord 모델에 추가 할 단일 라인. 여러 조건을 가진 복잡한 코드는 항상 디버깅하고 테스트하기가 더 어렵습니다. 왜 쉽게 만들 수 없습니까?

SQL 대신 ActiveRecord에 대해 정말로 좋아하는 것은 콜백입니다. 콜백은 SQL 트리거 (MySQL 5.0 이상에서만 사용할 수 있음)로 에뮬레이션 할 수있는 반면 ActiveRecord는 그 이후로 콜백을 받았습니다 (0.13에서 시작).

요약:

  • ActiveRecord는 쉬운 일을 쉽게 만듭니다.
  • ActiveRecord는 지루하고 반복적 인 부분을 제거합니다.
  • ActiveRecord는 귀하를 방해하지 않습니다 나만의 SQL을 작성합니다 (보통 성능 이유로), 그리고 마지막으로;
  • ActivereCord는 대부분의 휴대용으로 대부분의 데이터베이스 엔진이며 SQL 자체는 (때로는)가 아닙니다.

나는 당신의 경우 당신이 MySQL에 대해 구체적으로 이야기하고 있지만 여전히 알고 있습니다. 옵션을 갖는 것이 좋습니다.

다른 팁

여기서 아이디어는 DB 로직을 활성 레코드 내에 넣으면 응용 프로그램 전체에 퍼지지 않고 한 곳에서 SQL 코드를 처리한다는 것입니다. 이를 통해 응용 프로그램의 다양한 계층이 단일 책임 원칙 (객체가 변경해야 할 이유가 하나만 있어야 함)을 더 쉽게 수행 할 수 있습니다.

여기에 있습니다 활성 레코드 패턴에 관한 기사.

SQL을 피하면 데이터베이스 체계를 변경하기로 결정할 때 도움이됩니다. 추상화는 검증과 같은 모든 종류의 것들에도 필요합니다. 나는 당신이 SQL을 쓰지 않는다는 것을 의미하지는 않습니다. 필요하다고 느끼면 언제든지 그렇게 할 수 있습니다. 그러나 사용자가 필요한 곳에 5 줄 쿼리를 작성할 필요는 없습니다. 불필요한 코드를 피하는 것은 철도 철학입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top