DL販売のサイトを実装する記録【その1】
モチベーション
- 設計周り勉強/練習したい
- 議論のたたき台になるリポジトリがあると良さそう
- SpringBootも一緒に素振りしたい
- 題材はdlsiteを参考に実装してみる
- いい感じに複雑そう
- 売上、販売手数料、消費税
- アクセスするユーザーが販売者になったり購入者になったりする
- 画像とかのコンテンツを扱うので見た目がいい感じになって楽しそう
- 検索とかあれこれするならその他ミドルウェア周りも一緒に出てきそう?
- いい感じに複雑そう
考えたこと
- とりあえずリポジトリを作るところから
- ドメインモデルはピュアなJavaで、フレームワーク混ざらないほうが良いと聞いた
- coreモジュールとしてgradleでモジュール分けちゃう
- SpringBootやらで画面作ったりDBアクセスしたりはwebモジュールにおいて、web -> coreみたいな依存関係になるようにした
- https://github.com/orekyuu/shop/blob/17e1b1e22c1d00f3d2ad7ba6a7a20269f5e832ba/build.gradle#L70
- ArchUnitいれるのは一旦後回しにしてる。けどあとにしたほうが面倒なのですぐ入れたほうが良かったな。
- ドメインモデルはピュアなJavaで、フレームワーク混ざらないほうが良いと聞いた
- 料金周り考えてみる
- 販売価格 = 卸価格 + 販売手数料になるらしい
- 価格設定について
- 卸価格はサークル(販売者)が決めた金額で、卸価格の税込み分が振り込まれる
- 販売手数料は値段によって変動するっぽいけど割合が謎。どこにも書いてないのでとりあえず一律3割にした。
- 販売価格のコンストラクタに卸価格を食わせると販売手数料が販売価格クラス側で計算されるみたいな感じにするか悩む
- 販売価格から卸価格と販売手数料が決定される…?そうなるとこの形だと扱いづらい
- ユーザーが触るであろう画面を考えてみる
- 販売価格から決めたいパターンは販売価格を切りの良い数字にしたいとかそういうモチベーションがありそう
- 卸価格から決めたいパターンは損益分岐点考えていい感じの値で売りたいとかそんな感じ?
- 同人文脈なら卸価格からのパターンのほうが嬉しそう。並んでる商品見てみた感じ切りの良い値段で売ってるわけではないし。
- 販売価格に卸価格を渡して販売手数料を計算してもらうことにした
販売価格 = 卸価格 + 販売手数料
->基本価格 = 卸価格 + 販売手数料
・・・?- チケット料金モデリングでcero_tさんの超学びのあるツイートを思い出して、クーポンとかで割引されることを考えると分けたほうが良いのでは?になった
- 販売価格 = 卸価格 + 販売手数料になるらしい
- ユーザー登録作ってみる
- モデリング周りちょっと満足感出てきて画面が欲しくなったのでまずユーザー登録作ってみよに浮気
- ところでdlsiteって他のサービスもやっていて、同じアカウントでサービス利用できるな…?
- webパッケージにアカウントの概念入れると新しいサービス生まれると辛いのでは?
- 最初からidentity周りはモジュール分けておくと良いって誰かが言っていた気がする
- 新しいサービスでアカウント使いまわしたい。うんうんよくある。identityモジュールつくっちゃお
- webパッケージにアカウントの概念入れると新しいサービス生まれると辛いのでは?
- 生パスワードとハッシュ化されたパスワードややこしいので別の型にしたい
- FOLIOがそれっぽいことやってたなー!
- Javaっぽく書くならこうかな?
- Encrypted.java
- 結構もやっとするけどないよりはマシかな。
- 画面周りを作るぞ
もやっと
- メール送るみたいなちょっと重い処理は@Async使って別スレッドで非同期処理?
- Async手軽だけどデプロイ時にジョブが飛んだりしそう
- ジョブキューの仕組みなにか入れたほうがいいのかな
- DomaのExternal Domain ClassでConverterの置き場に困った
- Encryptedみたいなbyte[]を渡せるコンストラクタをpublicにしたくない
- EncryptedはcoreモジュールにいるのでDomaを使ったクラス置けないし置きたくない
- publicにして公開するよりはpackage-privateのままwebモジュールに同名パッケージ作ってConverter置くことにした
- EncryptedConverter.java
今日はこんなかんじの画面ができたところで終わり。