ホームページ >バックエンド開発 >XML/RSS チュートリアル >XMLを使用してマルチチャネルアクセスWebサイトの構造を実現する方法

XMLを使用してマルチチャネルアクセスWebサイトの構造を実現する方法

黄舟
黄舟オリジナル
2017-02-27 16:22:181846ブラウズ

1. 背景

今日の Web サイトでは、アクセス チャネルがますます増えており、WAP、SMS、EMAIL、従来の Web、Socket などのテクノロジーがますます進歩しています。データベースや LDAP さえあれば、アクセスの観点から言えば、新しいチャネルを追加するときにコードの修正やさらにはコードの変更が不要になるように、設計内で拡張する必要があるスペースは非常に優れたものでなければなりません。しかし、それは不可能だと思いますが、このマルチチャネルアクセスフレームワークの完璧さをより良く解決する方法はありますか?

XMLを使用してマルチチャネルアクセスWebサイトの構造を実現する方法 [図 1]

図の 1 つは、既存のアクセスがすべて使用されてしまったとき、シェアを獲得するためであれば、これらのプログラムはどのような方法でも作成でき、確実に実装できるが、それが困難であることを示しています。質問に戻りましょう。どうすればより完璧になれるでしょうか? 写真 2 は、8 本の爪を持つタコのように見えます。脚はすべての Access チャネルに接続されており、これらすべてのチャネルを接続する中心となるのは、このタコの頭である xmlRouter です。ここでの Router の役割は、すべてのチャネルと通信し、データ ルーティングを実現し、拡張性と柔軟性を追求することです。アーキテクチャのシステムには多くの利点があります。 XMLRouter と呼ばれる理由は、柔軟で標準化された言語である XML をデータ伝送媒体として使用しないと、ルーターの負荷が飛躍的に増加するためです。XML 仕様を定義すると、将来の拡張に多くのメリットがもたらされます。

3. アイデアとパターン

XMLRouter の元のアイデアは、コンピューターのマザーボードの Builder パターンから来ており、コンピューターのマザーボードの PCI スロットは、作成するカードに限り PCI 仕様を定義します。 PCI 標準に準拠しており、マザーボードに接続すると動作します。Builder パターンは、複雑な構造を分離し、段階的に実装することを提案しています。複雑なチャネル それらを分離して 1 つずつ実行します。 XMLを使用してマルチチャネルアクセスWebサイトの構造を実現する方法

サービスの考え方: ルーターと通信するには、プログラムがサービス仕様に準拠している限り、統一されたインターフェイスを定義する必要があります。

Factory モードと Composite モード

実際の設計では Router が生成され、RouterFactory に配置されます。キューからデータを送信し、データを受信し、データを返す。対応する Router がキューから取得され、複合モードが適用されます。

4. XML 設定ファイル

XML ファイルは、使用するために 2 つの部分に分かれています。最初のものは、次のようなルーターの構成です。

以下は引用部分です:

<?xml version="1.0" ?> 
<services> 
   <!-- database Service --> 
   <service name="database" type="database" class="com.web.service.DBService"> 
   <connector 
       driver="com.microsoft.jdbc.sqlserver.SQLServerDriver" 
       url="jdbc:microsoft:sqlserver://192.168.0.179:1433" user="test" 
       passwd="test" /> 
   </service> 
   <!-- Web Service--> 
   <service name="web" type="web" class="com.web.service.WebService" > 
     <connector /> 
   </service> 
…… 
</services>

これは、ルーターの構成ファイルです。サービス ノードには、コネクタのサブノードが含まれます。データベースの場合、サブノードの構成は、URL、ユーザー、パスワード、ドライバーなどの属性を含みます。ポート、maxthread などの属性が含まれます。属性値は独自の定義に従って構成できます。

別のタイプの XML ファイルは、すべてのサービスでデータが転送されるために使用されます。サービスには、対応する XML ファイルが含まれています。たとえば、webtrans.xml 形式は次のとおりです:


以下は参照フラグメントです:


<?xml version="1.0" ?> 
<transaction> 
   <trans name="addDoc" service="database" method="insert"> 
     <PRoperty name="createtime" type="timestamp"/> 
     <property name="creatorid" type="long"/> 
     <property name="doctypeid" type="int"/> 
     <property name="docstatusid" type="int"/>       
   </trans>     
</transaction>

対応する dbtrans.xml 形式は次のとおりです。引用:

スニペット:

<trans name="addDoc" table="TDOC_DOCS" method="insert"> 
     <primarykey name="docid" />     
     <set> 
       <property name="createtime" type="timestamp"/> 
       <property name="creatorid" type="long"/> 
       <property name="doctypeid" type="int"/> 
       <property name="docstatusid" type="int"/>       
     </set> 
   </trans>





以下は引用の断片です:


package com.web.router; 
import com.web.platform.Exception.RouterException; 
import java.util.java/util/Hashtable.java.html" target="_blank">Hashtable;




サービスクラス


以下は引用部分です:

/** 
 * Router产生和清除的类 
 */ 
public class RouterFactory  
{ 
  /** 
   * Router存储的树front 
   */ 
  private static java/util/Hashtable.java.html" target="_blank">Hashtable QueuePairFront = null; 
  /** 
   * Router存储的树back 
   */ 
  private static java/util/Hashtable.java.html" target="_blank">Hashtable QueuePairBack = null;  
/** 
   * Router存储的树 
   */ 
  private static java/util/Hashtable.java.html" target="_blank">Hashtable QueueRouter = null;  
  /** 
   * 返回的XMLRouter 
   */ 
  public static XMLRouter instance = null; 
  /** 
   * Router的定义 
   */ 
  public static RouterDefine routerdefine = null; 
  /** 
   * Router的ID号 
   */ 
  public static long routeIndex = 0; 
  /** 
   * @roseuid 3F169C21027C 
   */ 
  public RouterFactory()  
  { 
  } 
  /** 
   * 初始化Hashtable和Vector 
   */ 
  public static void initFactory() throws java/lang/Exception.java.html" target="_blank">Exception 
  { 
      QueuePairFront = new java/util/Hashtable.java.html" target="_blank">Hashtable();  
      QueuePairBack = new java/util/Hashtable.java.html" target="_blank">Hashtable();  
      QueueRouter    = new java/util/Hashtable.java.html" target="_blank">Hashtable(); 
      initRouteDefine(); 
  }  
/** 
   * 初始化Route的设置 
   *  
   */ 
  private static void initRouteDefine() throws java/lang/Exception.java.html" target="_blank">Exception 
  { 
      if( routerdefine == null ) 
        routerdefine = new RouterDefine(); 
      routerdefine.loadRouterDef(); 
  } 
  /** 
   * 返回实例 
   * @return com.web.router.XMLRouter 
   */ 
  public static XMLRouter getInstance(long index) throws RouterException 
  { 
     return (XMLRouter)QueueRouter.get(new java/lang/Long.java.html" target="_blank">Long(index)); 
  }  
  /** 
   * 产生一个XMLRouter的实例 
   * @return com.web.router.XMLRouter 
   * @roseuid 3F1618A103BC 
   */ 
  public static XMLRouter popInstance() throws RouterException 
  { 
      routeIndex ++; 
      instance = new XMLRouter(routeIndex); 
      setDefine( instance ); 
      QueueRouter.put(new java/lang/Long.java.html" target="_blank">Long(routeIndex), instance);      
     return instance; 
  } 
  /** 
   * 清空Hashtable,Vector等 
   * @roseuid 3F1618B203C1 
   */ 
  private static void freeResource() throws java/lang/Exception.java.html" target="_blank">Exception 
  { 
      QueuePairFront.clear(); 
      QueuePairBack.clear(); 
      QueueRouter.clear(); 
      QueuePairFront = QueuePairBack = QueueRouter = null; 
} 
  /** 
   * 清除实例 
   * @param instanceID 
   * @throws Exception 
   */ 
  public static void removeInstance(XMLRouter instance) throws java/lang/Exception.java.html" target="_blank">Exception  
  { 
      instance.clear(); 
     QueueRouter.remove( new java/lang/Long.java.html" target="_blank">Long(instance.getIndex() ) ) ; 
  } 
/** 
 * Method isNull. 
 * @return boolean 
 */ 
  public static boolean isNull() 
  { 
     ……  
      return false; 
  } 
}


次に、ここでは紹介しませんが、すべての Services クラスを実装する必要があります

6. 説明

これまでのところ、この Router は同期トランザクションのみを実装できます。現時点では非同期トランザクションをサポートしていませんが、Router は Composite モデルを使用して設計されているため、ここでは詳細な分析は行いません


上記は XML を使用する方法です。マルチチャネル アクセス Web サイトの構造を実装します。関連コンテンツの詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。