LoginSignup
1
0

More than 5 years have passed since last update.

個人情報をマスクするドメインオブジェクト

Last updated at Posted at 2019-04-02

とくに面白みはないんだけど「DBに登録されている個人情報をサービス退会時にマスクする」という要件があったときに DDD でどんなドメインオブジェクトを定義すればいいのか考えたのでメモ。
ちなみに「マスクする」というのは名前とか住所を「****」みたいな文字列に変更してしまうということです。

# 個人情報クラス
# どの項目をどうマスクすれば良いか知ってる
class PrivateInfo
  # マスクする対象のユーザを受け取る
  def initialize(user)
    @user = user
  end
  # マスクする
  def mask
    @user.first_name = '****'
    @user.last_name = '****'
    @user.address = 都道府県だけ残してマスクする
    @user.email = 先頭3文字残してマスクする
    @user.company.name = 関連モデルの項目もマスクする
  end
end

# 例えば Rails のユーザモデル
class User < ApplicationRecord
  # 個人情報モデルを返す
  def private_info
    PrivateInfo.new(self)
  end
end

こんな感じで「個人情報」を表現するクラスを PrivateInfo として定義して、このオブジェクトを User から取得できるようにしておく。
退会時にデータをマスクしたいときは PrivateInfo.mask を呼び出す。

# ユーザに直接関係ないアカウント管理のドメインロジックを持ってるオブジェクト
class UserAccount
  def initialize(user)
    @user = user
  end
  # 退会するときの処理
  def withdrawal
    @user.private_info.mask
    @user.delete
    # その他必要な退会処理
  end
end

# 退会コントローラのアクション
def withdraw
  user_account = UserAccount.new(current_user)
  user_account.withdrawal
  redirect_to :thankyou
end
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0