2013-08-04 4 views
4

저는 재미있는 Play 프레임 워크 및 스칼라를 평가 해 왔습니다. 자바에서 왔을 때, 스칼라로의 이주는 정신적 인 체조를 조금 해 봤지만 지금은 팬입니다.SLICK 및 22 열 제한이있는 Playframework

이미 JPA를 사용하여 매핑 된 대규모 데이터베이스가 있고이 코드를 최대 절전 모드로 계속 사용하려고했지만이 방법은 스칼라에 대한 최선의 권장 방법이 아닙니다. 그래서 SLICK를 사용하여 테이블을 매핑하기 시작했으나 지나치게 멀리하기 전에 케이스 클래스와 함수 매개 변수 (22 개 이하)에 대한 Scala의 제한 사항에 문제가 있음을 깨달았습니다.

저는 이것이 현대의 ORM이 이러한 제한을 가지고 있음을 완전히 당혹스럽게 생각합니다. 스칼라가이 제한을 가지고 있어도 문제가되지 않는다. 22 개의 매개 변수를 함수에 전달하기를 원한다. 그래서 제 질문은 : 왜이 ​​한계가있는 라이브러리를 디자인할까요? 확실히 정규 수업에 매핑되도록 설계 되었어야합니까? 나는 일을 완수하기 위해 성찰을 사용했는지 상관 없다.

이 경우에는 암시 적 변환을 사용하여 사례 클래스를 분리하고 재결합해야하는 해결 방법을 보았습니다. 그러나 이것은 단지 해킹 일뿐입니다.

Play를 계속 사용하려면 자바로 전환하고 JPA를 사용해야합니다.

답변

4

이상하게 번호가 매겨진 제한은 스칼라 프로그래밍 언어가 튜플의 최대 크기를 22로 제한하고 튜플이 테이블 행을 나타내는 좋은 방법이기 때문에 가능성이 높습니다. 자세한 내용은 Why are scala functions limited to 22 parameters?을 참조하십시오. 스칼라 2.11에서 (그리고 Slick에서)이 제한을 없애는 몇 가지 이야기가 있었고, an open issue to track it이 있었지만, 최근 2.11 릴리즈에서는이 문제가 발생하지 않았습니다.

나는 매끄러운 개발자가 아니며, 튜플 대신 List와 같은 제한이없는 ORM을 만들 수 있다고 확신한다. 왜 그것이 그렇게 밝혀 졌는지에 대한 가설이 있습니다.

  • Typesafe는 ORM을 처음부터 빌드하기를 원하지 않으므로 가장 안정적이며 널리 채택 된 스칼라 용 ORM 패키지 중 하나 인 ScalaQuery의 Slick에 적합합니다.
  • ScalaQuery 작성자는 튜플을 디자인의 핵심 부분으로 사용하는 것이 적합하다는 것을 알았습니다.
  • 22 개 이상의 열이있는 ScalaQuery 제작자 펠트 테이블은 다소 드뭅니다.
  • 그는 22 개 이상의 기둥을 당기는 테이블의 돌출이 훨씬 더 희박하다고 느꼈습니다.
  • Typesafe는 Tuples (및 Functions)에서 22 제한을 제거하기 위해 노력하고 있으며 Scala에서는이 작업을 수행해야합니다.이 작업이 완료되면 Slick은 더 이상 22 열 테이블에 문제가 없습니다. 스칼라에서는 문제가 수정되어야하므로 새로운 ORM을 만들고 커뮤니티와 협력하여이를 채택하는 것이 더 합리적입니다.
+0

나는이 사실을 완전히 깨달았지만 나의 질문은 왜이 제한으로 ORM을 디자인 했는가? 예 : 그들은 최대 절전 모드와 같은 반사를 사용할 수있었습니다. 나는 그들이 스칼라를 바꿀 필요가 없다고 생각한다. –

+0

아, 나는 그 질문에 대해 완전히 명확하지 않았습니다. 슬릭 (Slick)에서이 제한이 나타나는 이유에 대한 나의 추측을 통해 제 응답을 업데이트했습니다. – lreeder