2012-02-29 1 views
5

あなたはそれが良い考えだと思いますか?__destruct()のデータベースを更新していますか?

db内のデータを取得/更新するために他のコンポーネントが使用するアプリケーションコンポーネントがあるとします。基本的にget()、set()、update()メソッドを持つクラスです。

そのコンポーネントが呼び出されたときにそのプロパティでのみデータを更新(または設定)し、__destructでデータベースを更新することをお勧めしますか?または、それは各セット/更新呼び出しでdbを直接更新する必要がありますか?

答えて

5

オブジェクト破壊に関するデータベースを更新すると、ソフトウェアのようにちょっとした臭いがありますside effect。つまり、予期しない、やや明白な場所で行われるアクションです。 __destruct()が呼び出されたときに、たとえ明示的に呼び出しても、データベースアクションが起きていることをコードから確認することは明らかではありません。一貫性のないデータを含むバグを見つけようとすると、将来のコードメンテナー(自分自身を含む)は混乱することがありますが、コードを見ているときにデータのやりとりに似たデータベース呼び出しやメソッド呼び出しは見られません。

私はそれに反対します。

2

デストラクタ(スクリプト終了の時刻 で呼び出されます)から例外をスローしようとすると、致命的なエラーが発生します。

例外が発生した場合はどうなりますか?いずれにせよ、これは良い考えではないと思います。あなたはワークフローを制御することはできません。デバッグ地獄を導くのは簡単です。

関連する問題