Open4

prismaでfull nameをどう実装するか?

kitabatakekitabatake

firstName , familyName というカラムがある場合に、 fullName を取得するメソッドは何処に実装するか?
今まで扱ってきたORMだと、モデルやエンティティがクラスとして存在するので、そこに実装すれば良い。
prismaの場合は、DBから取得したデータは plain old JavaScript objects として扱われるので、 fullName のようなコードを何処に書けばいいか迷う。

plain old JavaScript objects周り

kitabatakekitabatake

メモ

kitabatakekitabatake

https://speakerdeck.com/yasaichi/architecture-decision-for-the-next-10-years-at-pixta?slide=50
同じような課題感がきちんとした言葉で表現されている。

https://jsconf.jp/2021/talk/technology-selection-for-the-next-n-years-based-on-graphql-and-prisma
prismaのtryに対する誠実なtalk.
回答としては、

  • クラスじゃなくて関数群を使う
  • ポリモーフィズムが必要なところだけクラスを使う

https://github.com/prisma/prisma/issues/7161

https://www.prisma.io/docs/concepts/components/prisma-client/computed-fields
まさにスクラップ名通りだけど、やりたいことにたいして複雑すぎるように感じる。


一旦の整理としては、、

  • 自分の頭が従来のORM感覚に縛られれているから困惑していると思ったけど、そういうわけでもなさそう
  • デフォルトでドメインモデルを記述場所が提供されていないから、設計、実装に自由度がある
    • 個人的には面白さを感じる部分だけど、チームで上手くやっていくのは結構大変
      • 上手くやらないとすぐに秩序がなくなる気がする
      • 現時点で自分が技術選定するとなると、typeormを使う気がする
  • 実装方法としては
    • まずは、POJOを受け取るシンプルな関数群
    • ある程度複雑になってきた場合、適当なドメインモデルをクラスとして実装