ビジネスオブジェクト

WEBアプリケーション(特にPHP)のアーキテクチャの「ドメインモデル」が異なる観点からどれほど有益であるかを理解し、議論したいと思います。 どんな欠点、あなたがそこに見る利点、そしてそれに反対することができるもの。



ビジネスオブジェクト( Business Object )。これは、特定の「ドメイン」からの特定のエンティティ、つまりアプリケーションが開発される業界を表すOOP内のオブジェクトです。 たとえば、会計プログラムの場合、オブジェクトは次のようになります。



通常、ビジネスオブジェクトはデータと複雑なロジックをカプセル化するため、クラスインターフェイスはほとんど現実を反映しています。 このプログラミング手法は「ドメインモデル」とも呼ばれます。これとは対照的に、ORMパラダイムおよびデータベース中心のアーキテクチャと、ビジネスモデルではなく、任意のテクノロジに基づいたアーキテクチャ開発のアプローチ全体があります。



ドメインモデルを使用し、データベース中心のアーキテクチャと同様のアプローチを使用しないのはなぜですか?



コードははるかに明確です



特に「最高レベル」で。 メソッドレベルでは違いはありません。通常、ビジネスオブジェクトの別のメソッドは、たとえば支払いを行う、またはオークション入札を設定するなど、かなり複雑なロジックですが、この場合でも特定の問題(基本構造、支払いインターフェース)以外のことを覚えておく必要はありませんシステム)。



(コントローラー内の)アプリケーションでは、すべてが明確に見え、ほとんど人間に読み取られます。



$支払い=支払い:: makeNew($請負業者、$金額);

$請求書= $請負業者-> lastInvoice();

$請求書-> markSettled($支払い);



誰がこれを必要としますか? 2〜3か月後に変更する必要があるか、バグが発見されたと想像してください。 結局のところ、ユーザーは「支払いを担当する方法にバグがあります。 これはおそらくデータベースが原因です。」 いいえ、彼は「支払いは私と一緒には行きません」と言うでしょう。 そして、あなたはどこで問題を探すべきかを知っています(少なくともどこから始めればいいのか-コントローラーから)。 そして、彼(ユーザー)が「私のアカウントの金額は間違って切り上げられます」と言ったら、どこに行くべきかをもう一度知っています。コントローラーに行く必要はありません。



これは、新しい人がプロジェクトに来たときに特に有益です。



コードの再利用



もちろん、微妙な違いがあります。再利用は、同じ「ドメイン」から新しいアプリケーションが開発されている場合にのみ可能です。 たとえば、適切に設計された請求書クラスは、新しいアプリケーションで大幅に変更する必要はほとんどありません。 もちろん、他のアプローチにも同じことが言えます。 ただし、プロファイル、フォームなどの「実用的な」クラスが正常に開発され、「ドメインモデル」(この場合、「ドメイン」は「WEB、サーバーサイドアプリケーション」)で開発された場合、それらの再利用また、ほぼ100%になり、メインのビジネスドメインに依存しません。



競合なし



コードは、プログラミング言語の観点からも、プログラマとしての人間の観点からも、驚くほど「競合しない」ものです。 すべてのコンポーネントがBussness Modelに基づいている場合。 たとえば、オークションとストアを「クロス」する必要がある場合、Paymentクラスはそれらに共通のままであり、Productクラスはおそらくオークションの「ロット」になります。 クラスプレフィックスは、特定のクラス(FastshopProductなど)を作成する必要がある場合にのみ必要です。一方、関連クラスは、Productから継承して対話する場合、そのようなクラスのオブジェクトをパラメーターとして受け入れます。



ここでの問題は、サードパーティのコードを使用する必要がある場合に発生します。 そして、ほとんどの場合、すべてが「スムーズ」になるように、サポータークラスを変更する必要があります。



コードは自己文書化されています



実際、クラス、メソッド、変数に「user_data」ではなく「humanly」という名前が付けられている場合、コード内のコメントに頼る必要はほとんどありません。 一般に、不必要なコメントでコードをオーバーロードしないようにします。 メソッドがProfileクラスのオブジェクトを返す場合、「メソッドがプロファイルを返す」と書く必要はありません。



本当に必要な場合は、コードに基づいてドキュメントを生成できます。 繰り返しますが、初心者でもさまざまなBaseObject、BaseDbRow、user_data、および「目の前でフラッシュする」ことはないため、より早く理解することができます。 プロジェクトの内容(プロジェクトの「ドメイン」)を知っていると、プログラマーは抽象化を簡単に掘り下げることができます。



もちろん、彼らが言うように、この樽とスプーンの中にあります。 各オブジェクトがデータを含むすべてをカプセル化する場合(これがこのモデルの主要な特徴です)、たとえば、たとえば検索結果を表示するときに、各オブジェクトは、状況に応じてページ上でデータベースから自身を読み取ります。より多くのリクエスト。 個人的には、これには悲劇はありません。もちろん、これには何かする必要があります。 単純なキャッシュにより、すべてを一桁高速化できます。



All Articles