2

私は PHP には比較的慣れていませんが、SOA アーキテクチャーと多層アプリケーションを備えた複雑なエンタープライズ環境で経験を積んだ Java プログラマーです。そこでは、通常、中間層にビジネス ロジックを含むビジネス アプリケーションを実装します。

私は代替通貨システムをプログラミングしています。これは、個人やコミュニティによって簡単に展開およびカスタマイズできる必要があります。オープンソースになります。そのため、php/mysql が私にとって最良の選択と思われます。

ユーザーにはアカウントがあり、残高を取得します。また、システムは、提供されるサービスの合計と利用可能な資産の合計に応じて価格を計算します。

これは、購入時に一連の計算が行われることを意味します。残高と合計が更新されます。これらは導出された数値であり、通常はデータベースに入れられません。

それにもかかわらず、私はトリガーとストアド プロシージャを db に入れることに頼り、php コードでこれらの更新が行われないようにしました。

人々はどう思いますか?それは良いアプローチですか?私の経験から、これは最善の解決策ではないことがわかり、中間層を実装するよう促されました。しかし、私はそれを行う方法さえ知りません。一方、ストア プロシージャに関してこれまでに得たものは、私には最も適切に思えます。

私の質問が明確になったことを願っています。すべてのコメントに感謝します。「完璧な」解決策はないかもしれません。

4

4 に答える 4

1

最近の傾向にあるように、DB から離れることは一般的に良いことです。バージョン管理が容易になり、1 つの言語だけで作業できるようになります。それ以上に、ストアド プロシージャは難しいと感じています。一方、そのようなものが好きで、MySql の SP に慣れている場合は、SP は悪くありませんが、デバッグが難しく、処理が難しいと常に感じています。

トリガーの問題については、アプリに必要かどうかわかりません。計算をトリガーするイベントはユーザーによって呼び出されるため、ユーザーがその間に「待機中」のページまたは別のページにリダイレクトされた場合でも、これらのことが PHP で発生する可能性があります。明らかに、真のトリガーは DB レベルでしか実行できませんが、X 秒ごとに PHP スクリプトを実行するデーモン スレッドを使用することもできます...これは絶対に避けて、ユーザー側からイベントをトリガーするようにしてください。

以上のことから、PHP のデータ アクセス レイヤーに私のお気に入りのソリューションであるDoctrineをプラグインしたいと思いました。完璧ではありませんが、PHP で十分です。必要なことのほとんどを実行し、データベース プロシージャなどの代わりにオブジェクトを操作し続けます。

あなたのタイトルに関して、複数の層は PHP で完全に実行可能ですが、それらを実行し、それらを尊重する必要があります。PHP コードは他の PHP コードを呼び出すことができ、(5.2+) うまくオブジェクト指向になっています。周りで目にする多くの PHP コードは完全にがらくたであり、ティアや適切な OO モデリングはもちろん、メソッドも使用していないという事実を無視してください。独自の (または既存の) MVC ソリューションを使用するなど、やりたい場合はすべて可能です。

于 2009-09-06T13:10:23.867 に答える
1

多くの機能をデータ抽象化レイヤーではなく DB レベルにプッシュする際の問題の 1 つは、DBMS の機能セットに閉じ込められることです。オープンソース ソフトウェアは、多くの場合、さまざまな DB で使用できるように記述されています (必ずしもそうとは限りません)。将来的には、postgres やその他の DBMS への移植を容易にしたいと思うかもしれません。多くの MySQL 固有の機能を使用すると、それが難しくなります。

于 2009-09-07T14:41:08.633 に答える
0

みんなありがとう。

そのようなトランザクションの整合性を制御する方が簡単かもしれないと思ったので、db トリガーを使用していました。お気づきかもしれませんが、私は開発者であり、データベースの知識を習得しようとしています。

さて、異なるサーバーにデプロイすることで、php コードを論理的にだけでなく物理的にも複数の層に分散させるソリューションがあることがわかりました。

ただし、開発のこの段階では、トリガー/SP ソリューションに固執すると思います。複数のレイヤーに配布するには、アプリを一貫して再設計する必要があります。

また、オープンソースを考えると、代替マネーシステムが好きな人は、必要に応じてレイアウトを変更するだけで簡単になるかもしれませんが、PHPコードに触れても計算が間違っていることを心配する必要はありません.

一方で、もちろん、db のデバッグが非常に難しくなる可能性があることに同意します。

DB init スクリプトは、php ファイルと同様にソース管理にあります:)

再度、感謝します

于 2009-09-06T19:44:28.423 に答える
0

トリガー、ストアド プロシージャ、および DB サーバーが提供するその他の機能を使用することはまったく問題ありません。それは機能し、うまく機能します。単に単純なデータストアに追いやるのではなく、DB の可能性を最大限に活用しています。

ただし、ここにいるあなた (および私) に同意するすべての開発者に対して、正反対の考えを持ち、それを行って良い経験をしたことがある開発者が少なくとも同数いると確信しています。

于 2009-09-06T13:07:30.127 に答える