maeda-m / frontend-challenges

MIT License
0 stars 0 forks source link

エンティティをちゃんと考える #5

Closed maeda-m closed 3 years ago

maeda-m commented 3 years ago
maeda-m commented 3 years ago

url-shortening-api のエンティティを抽出する。

kawasima さんのイミュータブルデータモデル(Scrapbox入門編世代編)を参考にする(理解したとは言っていない)

※ 更新なし縛り(削除はありよりのあり)

要求文書

  1. 匿名の利用者が、短縮前URL送信すると誰か短縮後URL発行する。
  2. 匿名の利用者が、短縮後URLに接続すると誰かが短縮前URLに転送する。
  3. 匿名の利用者自身が、過去に送信した短縮前URLと発行された短縮後URLを要求すると誰かが応答する。

※ 太文字はエンティティとその属性の候補(5W1H)と考えている ※ 誰かは実装(詳細)になりそうなので曖昧にしている

語彙

短縮名称は置いておく。

エンティティの
日本語名
エンティティの
英語名
5W1Hの
分類
エンティティの
分類
匿名利用者 Anonymous user Who リソース
短縮前URL Original URL What/Where リソース
短縮後URL Short URL What/How リソース
送信 Post Why イベント
発行 Publish Why イベント
要求 Get Why イベント
応答 Response Why イベント

扱い

複数の日時属性・ステータス遷移管理(子・詳細イベント)や世代管理(予実、動的参照関係、バージョンタグ)はなさそうなので置いておく。

エンティティ 識別範囲 単一性 同一性
匿名利用者 類似なし - セッションIDが同じ時
短縮前URL 短縮後URLは含めない - 全て別と考える
短縮後URL 短縮前URLとは異なる - 全て別と考える
送信 匿名利用者が送信したものを指す - 全て別と考える
発行 送信に対するものを指す - 全て別と考える
要求 匿名利用者が要求したものを指す - 全て別と考える
応答 要求に対するものを指す - 全て別と考える

隠されたエンティティを抽出する

ER図を描きながら、リソース間のリレーションシップの依存関係を考えたり、非依存のリレーションシップの間に隠れる交差エンティティを考える。

概念

classDiagram

    R匿名利用者 "1" --> "0..1" E送信
    E送信 "1" --> "1" R短縮前URL
    E送信 "1" --> "1" E発行

    E発行 "1" --> "1" R短縮後URL
    E発行 "1" --> "1" R匿名利用者

    R匿名利用者 "1" --> "N" E要求
    E要求 "1" --> "1" E応答
    E応答 "1" --> "1" R匿名利用者
    E応答 "1" --> "N" R短縮前URL
    E応答 "1" --> "N" R短縮後URL

    class E送信 {
      ID 短縮前URL
    }
    class E発行 {
      ID 短縮後URL
    }
    class E要求 {
      ID 匿名利用者
    }
    class E応答 {
      ID 短縮前URL
      ID 短縮後URL
    }

論理

classDiagram

    R匿名利用者 "1" --> "0..1" E送信
    E送信 "1" --> "1" Rリンク集
    Rリンク集 "N" --> "1" R匿名利用者

    R匿名利用者 "1" --> "N" E要求
    E要求 "1" --> "N" Rリンク集

    class Rリンク集 {
      ID 匿名利用者
      短縮前URL
      短縮後URL
    }
    class E送信 {
      ID リンク集
    }
    class E要求 {
      ID 匿名利用者
    }
maeda-m commented 3 years ago

論理データモデルとしては上記の内容で十分そうだ。 物理は次のポイントを抑えるべきだが、匿名利用者と発行されたURLを定期的に削除する制約を持たせれば問題は発生しなさそう(発行されたURLの永続性は無視している)。

maeda-m commented 3 years ago

考えたので Close する