2017-02-26 2 views
3

REMDBMS 테이블 persons에 이름 열 (String)과 나이 열 (Int)이 있다고 가정 해 보겠습니다. 서버 측에서 ID가 필요하지 않다면 이것은 case class Person(name: String, age: String)에 완벽하게 맞을 수 있습니다. 문제는 DB (백엔드)에서 사람을 구할 때와 같이 ID가있는 경우가 있지만 때로는 양식 (프론트 엔드)에서 사람을 만들 때와 같이 ID가없는 경우가 있습니다.클라이언트와 서버간에 공유되는 코드에서 DB 엔터티를 나타내는 관용적 방법

세 가장 간단한 방법은 내가 참조 :

  • 가 다른 클래스 변환을 FrontendPersonBackendPerson을 만듭니다. 매우 상용구, 직접 연결 없음
  • 래퍼 추가 DbItem(id: Long, person: Person)
  • id: Option[Long]을 추가하십시오. 매우 보일러 화되어있어 대부분의 경우 id을 사용할 수 있으므로 Option#get이 전파됩니다.

doobie 방법으로 더 잘 (아마 더 일반적인, 모양이없는) 또는 통합되어 있는지 궁금합니다.

+1

scala에서 정확한 문제를 설명하는 동영상이 있습니다. https://www.youtube.com/watch?v=7xSfLPD6tiQ – triggerNZ

답변

0

기본 매개 변수를 사용하여 트릭이있다 다음 id 열이 경우 클래스의 끝에있다, 그리고 디폴트 값이

case class Person(name: String, age: Int, id: Long = 0L) 

때문에, 당신은 효과적으로 무시할 수 있습니다. 예 : id이 아닌 인스턴스를 만들 수 있습니다. 당신이 스스로를 관리 할 필요가 없습니다 있도록

  • id가 데이터베이스에 자동 증가 (Autoinc) 열 수 있습니다 : 경우

    이는 정말 의미가 있습니다.

  • Person의 인스턴스는 데이터베이스에서 가져 오므로 사용하려는 사람은 id 필드가 채워집니다.

대부분의 우려 사항을 해결합니다. 하지만 ... +1 to @ triggerNZ는 이것을 공격하기 위해 원칙적으로 tpolcat 프리젠 테이션에 연결합니다.

관련 문제