テンプレートを使用したインターネット配信プラットフォームの設計アプローチ

こんにちは、Khabravchans!

私たちのチームが従事しているアゴラプロジェクトについてお話したいと思います。

Agoraは、インターネット上で商品の流通を整理するためのプラットフォームです。 このプラットフォームは、販売代理店のERPと統合され、注文の受け取り、残高の表示、決済行為の受け取りなどを自動化します。 ユーザーはプラットフォームのWebインターフェースで作業し、彼のすべてのアクションはディストリビューターのERPに反映されます。



会社のブログの記事「B2Bシステムの「ドラフト」の書き方」で、プラットフォームの作成中に遭遇した問題のいくつかを説明しました。 最初は、タスクは難しくないと思われました。サイト側のテンプレートエンジンとしてsmartyが選択されました。オブジェクトモデルについては考えませんでした。 それぞれ独自の目的で単一のビジネスモジュールを作成しました。 例:カタログ、予約、注文、検索、財務など。

その結果、最初のT.Z. コードはスケーラブルではなくなり、いくつかの機能またはブロック全体をいくつかの場所で使用する必要がありました。 機能が対応し、すべてを新たにやり直すという疑問が生じました。



システムを再度設計するときに、いくつかの問題が発生しました。

1.特定の状況に応じて異なるオブジェクトセットを生成する方法

これらのオブジェクトのセットは、システムの他のコンポーネントに対して多かれ少なかれ「透明」でなければなりません。 たとえば、1Cからオブジェクト「顧客注文」が与えられた場合、対応するオブジェクトをAgoraで生成するか、そのステータスを更新する必要があります。



2.クラス間の境界を決定する方法。特に、作成中のシステムとともにクラスが開発されるとき。

たとえば、注文と請求書は非常によく似たオブジェクトです。 どちらにも商品番号、数量、価格、およびVATが含まれています。 しかし、各オブジェクトには独自のプロパティとメソッドがあり、さらに多くの企業はこれら2つのオブジェクトに独自の「チップ」を持っています。 標準的な注文に加えて、そのうちの1つには「注文のリクエスト」、もう1つには「ダミーの請求書」などがあります。



3.オブジェクトのビジネスロジックを抽象化し、データベースオペレーションから分離する方法

たとえば、あるディストリビューターでは、注文にはデータベースに追加フィールドがありますが、他にはありません。 データベースに直接クエリを書き込む場合、毎回クエリを調整する必要がありますが、これは便利ではありません。



発生する質問により、テンプレートの設計について考えるようになります。 定義と用語については掘り下げません。 それらはインターネットで見つけることができます。

おそらく、テンプレートは情報を伝える強力な方法であり、逆もまた同様であり、これは単に「アカデミック」開発者が悪意を持って使用する「シャボン玉」であると思われます。 私たちの場合、テンプレートの設計は非常に役立ちます。



結果として得られたもの(以下は、プラットフォームオブジェクトが構築されるテンプレートを実装する主要なクラスのリストです):







一般的に、主なアイデアは次のとおりです。





以下の図は、テンプレートに基づいて構築されたProductオブジェクトの表示の構成を示しています。





その結果、サードパーティの開発者にオブジェクトを操作するためのAPIを提供します。 開発者は、実行するSQLクエリとテーブルを知る必要はありません。 彼がモジュールを構築する基本的なAPI関数は、彼にとってより重要です。



商品を扱う例は次のとおりです。

$ id = array(....); // id配列

$ productMapper =新しいproductMapper(); //マッパーを作成します

$ productCollection = new productCollection(); //コレクションを作成します

for($ i = 0; $ i <count($ id); $ i ++){

$ product = $ productMapper-> find($ id [$ i]); // IDで製品を検索します

$ productCollection-> add($ product); //コレクションに追加します

}

$ product = $ productMapper-> find(1); //製品番号1を検索

echo $ product-> toJson(); // JSONで表示

echo $ productCollection-> toXML(); // XMLコレクションをアップロードします



次の記事では、Agoraの技術的な実装について詳しく説明します。

続行するには...



All Articles