古い手続き型コードを OOP に変換しています。
レコードを破棄済みとしてマークし、完了した時間を記録する手続き型コードがあるとします。
UPDATE
toys
SET
is_trashed = 1,
trashed_date_timestamp = NOW()
WHERE
id = ??
OOP に関するさまざまな本から、オブジェクト指向のパラダイムで次のことを収集します。
- 特定のアイテムをオブジェクトとして「検索」し、
- そのプロパティを変更してから、
- ORMマッパーで一般的な「更新」メソッドを使用して、そのプロパティをデータベースに保存します
これは、SQL クエリを実行して特定のプロパティの変更のためにデータベース内の特定の値で特定のレコードを更新するコードで使用されている手続き型/データベース中心の方法とは対照的です。
それで、このコードをオブジェクト指向パラダイムに変換したいとしましょう。
- ID でオブジェクトを見つけ、
- プロパティを変更します。
- isTrashed プロパティを TRUE に設定しました
- TrashedDateTimestamp プロパティを ??? に設定します。
は!?
TrashedDateTimestamp プロパティをNOWに設定しようとすると、多くの問題が発生します。
- 今は何ですか?サーバー上の NOW ではなく、データベース時間の NOW() であることを確認したいと思います。
- おもちゃオブジェクトのクライアントは、trushedDateTimestamp プロパティの取得と設定をどのように処理するのでしょうか?
「この猫の皮をむく」方法はたくさん考えられますが、この問題を解決するパターンがあるかどうか知りたいです。
または、この機能は OO パラダイムでは不可能であることが証明されているので、代わりに「イベント オブザーバー」のようなものを使用する必要があります。
要するに、 NOWをオブジェクト プロパティに適切な精度で格納するにはどうすればよいでしょうか。