2017-04-01 1 views
2

Slick codegen génère un Tables.scala pratique avec toutes les classes pour les lignes et les tables. Nous aimons cette approche parce que nous pouvons utiliser la conception relationnelle et exploiter la pleine puissance du dialecte SQL que nous choisissons.Classes de domaine et conversion de classes de cas générées avec Shapeless

Cependant, nous écrivons beaucoup de code de plaque de chaudière pour convertir notre API REST Modèle/API de domaine modèle à la ligne XYZ lisse pour les raisons suivantes:

  1. Il y a des paramètres supplémentaires dans la classe de cas Slick que dans la classe de cas de domaine (ces paramètres supplémentaires sont extraits, par exemple, du chemin de la ressource REST) ​​
  2. Nous ne souhaitons pas exposer les types dépendant du chemin à d'autres couches/microservices. Ils ont seulement besoin de connaître le modèle REST API
  3. Nous convertissons généralement des cours de date et l'heure de java.sql à java.time équivalent

Pouvons-nous donc la conversion automatiser nous n'avons pas d'écrire chaque fois que deux explicitement fonctions de conversion, du modèle de domaine aux classes de cas slick et viceversa. En particulier:

  1. Comment écrire une fonction générique qui fournit une conversion implicite entre deux classes de cas équivalentes avec la même représentation HLIST?

  2. Comment écrire une conversion implicite générique entre deux classes de cas avec une autre représentation HList, à condition d'un ensemble de conversions implicites dans la portée des différents membres (java.sql.Timestamp -> java.time.ZonedDateTime)

  3. Comment écrire une fonction pour convertir entre deux classes de cas où la sortie a un Repr = HList1 :: HList2 et le premier a un Repr = HList2 (par exemple comment ajouter/ajouter à HList2 les paramètres extraits à partir de la demande?)

Répondre