skillup

技術ブログ

アーキテクト設計全般 プログラミング全般

Observeパターンについて

投稿日:2023年2月23日 更新日:

Observeパターン

主にログや履歴系のテーブルで多いかと思うのですが、あるモデルが更新されると別のモデルもセットで更新される、のようなケースがあるかと思います。

たとえばstockテーブルとstocks_historyテーブルのような関係ですね。

この場合、通常はstockテーブルのあとにstocks_historyテーブルを更新するなどのパターンが一般的です。

このようなときに使われるデザインパターンとしてオブザーバーパターンというものがあるそうです。

辞書的な説明だと、観察される側(=Subject)と観察する側(=Observer)に分かれ、される側のイベントがする側に検知され・・・というような説明になるかと思います。

(上記の例だとstock=Subjectとstock_histories=Observeがそれになるかと思います。)

ただこのページにはもっと非常にわかりやすく書かれており、

あいつに動きがあったらすぐに伝えろ。こちらもすぐ動く

と書かれておりました。わかりやすい・・・。

他参考リンクなど

https://qiita.com/shoheiyokoyama/items/d4b844ed29f84a80795b

Laravelで開発をしておりますので、Laravelのobserveパターンも見てみましたが、標準でこう言った機能が搭載されているのはありがたいですね。

他の対策

こう言ったデザインパターンは既存の実装でこのようなケースがよく使われており、その問題点を解決すべく生まれる・・というのが一般的ではないでしょうか。

まあフレームワークなんかもフレームワークがない場合にどのように対応していたか、を考えるとより理解度が深まると思います。

自分はObserveパターンをしらなかったため、この方法以外の場合、以下の2点のような手法が挙げられると思います。

プログラムで頑張って制御

一番一般的な対策手法ですね。stockのinsertのすぐ後にstock_historyのinsertを入れるとかですね。

メリット
  • 特別な知識がいらず、誰でもわかること
  • 柔軟性があること
デメリット
  • 漏れやダブりを常に検討しなくてはいけないこと
  • 保守期間などが長くなったり、プロジェクトメンバーの人数が大きくなればなるほど管理コストが上がる

Databaseのtirggerを使う(DB更新系のみ)

ObserveパターンはDBだけとは限りませんが、大概においてDB更新系の処理で関わってくる可能性が高いため、挙げさせていただきました。

自分もtriggerに関してあまり使ったことはないですが、片方のテーブル更新の検知を受けてもう片方が自動的にテーブル更新を受けるという仕組みです。

メリット
  • テーブル間の同士のつながりになり、漏れがなくなる
デメリット
  • テーブル自体の検知になるため、柔軟性に乏しく、イレギュラー条件分岐などをいれられない
  • プログラムと別管理になるので、管理コストが上がる

-アーキテクト設計全般, プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

データ構造の基礎知識 中編 ハッシュ

前回の続きです。 前回は配列、連結リストについて学習したので今回はハッシュについて学習します。 Contents1 ハッシュとは?1.1 メリット1.2 デメリット ハッシュとは? key-value …

no image

オブジェクト指向設計 ダックタイピング

オブジェクト指向シリーズ。ダックタイピング・・読む前は名前は聞いたことあるような気がする・・程度で細かいことは何一つわからない状態でした。今回具体的なコード例があった分イメージを何とかつかむことはでき …

no image

キャッシュの使い所とメリデメに関して(主に一覧系の処理に関して)

現在のプロジェクトがかなりの規模のECサイトになるため、正確性とパフォーマンスのトレードオフなどが先日議題にあがりました。 完全なトレードオフではないのかもしれませんが、比較的あちらをたてればこちらが …

no image

DIが役に立つ場面はやはりテスト

システム開発において、密結合とか疎結合なんて言葉が使われたりします。 密結合・・システム間の構成要素の関連性が高く、結びつきが密なこと 疎結合・・システム間の構成要素の関連性が弱く、結びつきが疎なこと …

no image

テストコードを読みやすくする

リーダブルコードも最終章に近づいてきましたね。 今回はテストコードについて。 以前のプロジェクトではテストコードを書いていたのですが、今携わっているプロジェクトでは書いてないです・・・ テストを書く目 …

アーカイブ