1. ความเป็นมา
ในเว็บไซต์ปัจจุบันมีช่องทางการเข้าถึงเพิ่มมากขึ้นเรื่อยๆ และเทคโนโลยีก็ก้าวหน้ามากขึ้นเรื่อยๆ เช่น WAP, SMS, EMAIL, เว็บแบบดั้งเดิม, Socket เป็นต้น หากรวมฐานข้อมูลและ LDAP ไว้ด้วย เข้าถึงได้หาก ดังนั้นพื้นที่ที่ต้องขยายในการออกแบบจะต้องดีมากเพื่อให้แน่ใจว่าเมื่อเพิ่มช่องใหม่ไม่จำเป็นต้องแก้ไขโค้ดหรือเปลี่ยนโค้ดอีกต่อไป แต่เป็นไปได้ไหม ฉันไม่คิดว่าจะเป็นไปได้ แต่มีวิธีใดที่จะแก้ไขความสมบูรณ์แบบของกรอบการเข้าถึงแบบหลายช่องทางได้ดี
ขึ้น
[รูปที่ 1]
ดังที่แสดงในรูปที่ 1 เมื่อใช้การเข้าถึงที่มีอยู่ทั้งหมดแล้ว นักออกแบบจะตื่นตาตื่นใจ ถ้าเป็นการรวบรวมผู้คน โปรแกรมเหล่านี้สามารถเขียนด้วยวิธีใดก็ได้ และมันจะสามารถใช้งานได้อย่างแน่นอน แต่การรักษาไว้จะเจ็บปวดกว่า ย้อนกลับไปที่คำถามว่า เราจะดำเนินการให้สมบูรณ์แบบยิ่งขึ้นได้อย่างไร
[รูปที่ 2]
รูปที่ 2 ดูเหมือนปลาหมึกยักษ์ที่มีแปดกรงเล็บ ขาปลาหมึกยักษ์เชื่อมต่อกับช่องสัญญาณการเข้าถึงทั้งหมดตามลำดับ สื่อสารกับทุกช่องทางและตระหนักถึงประโยชน์ของการกำหนดเส้นทางข้อมูลและการปรับปรุงความสามารถในการขยายขนาดและความยืดหยุ่นของสถาปัตยกรรมระบบจะมีมากมาย มันถูกเรียกว่า XMLRouter เพราะหากไม่ได้ใช้ XML ซึ่งเป็นภาษามาตรฐานและเป็นสื่อกลางในการส่งข้อมูล ปริมาณงานของเราเตอร์ก็จะเพิ่มขึ้นแบบทวีคูณเช่นกัน การกำหนดข้อกำหนด XML จะนำมาซึ่งประโยชน์มากมายในอนาคต
3. แนวคิดและรูปแบบ
แนวคิดดั้งเดิมของ XMLRouter มาจากเมนบอร์ดของคอมพิวเตอร์และ <
>ในรูปแบบ Builder สล็อต PCI ของเมนบอร์ดคอมพิวเตอร์จะกำหนดข้อกำหนด PCI ตราบใดที่การ์ดที่คุณผลิตเป็นไปตามมาตรฐาน PCI การ์ดนั้นจะสามารถทำงานได้เมื่อคุณเสียบเข้าไปในเมนบอร์ด ในส่วนของวิธีการทำงานภายในนั้น
ได้รับการบรรจุ . รูปแบบตัวสร้างเสนอให้แยกโครงสร้างที่ซับซ้อนและนำไป
ใช้ทีละขั้นตอน
ช่องทางนี้เรียกว่าบริการตราบใดที่โปรแกรมสอดคล้องกับข้อกำหนดการบริการก็สามารถเข้าถึงเราเตอร์และข้อมูลเส้นทางได้
โหมดโรงงานและโหมดคอมโพสิต
XMLRouter จะถูกสร้างขึ้นโดยใช้โหมดโรงงานในการออกแบบจริงของเราเตอร์ RouterFactory มันจะถูกวางไว้ในคิวเมื่อมีการใช้งาน ข้อมูลการส่ง ข้อมูลการรับ และข้อมูลส่งคืนทั้งหมดจะถูกเรียกจากเราเตอร์ที่เกี่ยวข้องจากคิว และใช้โหมดคอมโพสิต
4.
ไฟล์
การกำหนดค่า XMLสำหรับเราเตอร์ การใช้งานจะแบ่งออกเป็น 2 ส่วน ส่วนแรกคือการกำหนดค่าของเราเตอร์ เช่น
นี่คือคำพูด: <?xml เวอร์ชัน = "1.0" ?> <บริการ> <!-- บริการฐานข้อมูล --> <ชื่อบริการ = "ฐานข้อมูล" ประเภท = "ฐานข้อมูล" class = "com.web.service.DBService"> <ตัวเชื่อมต่อ ไดรเวอร์ = "com.microsoft.jdbc.sqlserver.SQLServerDriver" url = "jdbc:microsoft:sqlserver://192.168.0.179:1433" ผู้ใช้ = "ทดสอบ" passwd = "ทดสอบ" /> </บริการ> <!-- บริการทางเว็บ--> <ชื่อบริการ = "เว็บ" ประเภท = "เว็บ" class = "com.web.service.WebService"> <ตัวเชื่อมต่อ /> </บริการ> - </services> |
นี่คือไฟล์การกำหนดค่าของเราเตอร์ โหนดบริการแสดงถึงช่องสัญญาณที่ต้องการเข้าถึง ฐานข้อมูลจะมีคุณลักษณะต่างๆ เช่น url, user, passwd, driver และอื่นๆ หากเป็น socket ก็จะมีแอตทริบิวต์ต่างๆ เช่น port และ maxthread ซึ่งค่าแอตทริบิวต์สามารถกำหนดค่าได้ตามคำจำกัดความของคุณเอง
ไฟล์XML
อีกประเภทหนึ่งคือไฟล์ข้อมูลธุรกรรม XML ซึ่งใช้ในการถ่ายโอนข้อมูลในทุกบริการ มีไฟล์ XML ที่เกี่ยวข้อง เช่น webtrans.xml มีรูปแบบดังต่อไปนี้:
นี่คือคำพูด: <?xml เวอร์ชัน = "1.0" ?> <ธุรกรรม> <trans name="addDoc" service="database" method="insert"> <ชื่อคุณสมบัติ="createtime" type="ประทับเวลา"/> <ชื่อคุณสมบัติ="creatorid" type="long"/> <ชื่อคุณสมบัติ="doctypeid" type="int"/> <ชื่อคุณสมบัติ="docstatusid" type="int"/> </ทรานส์> </transaction> |
รูปแบบ dbtrans.xml ที่สอดคล้องกันมีดังนี้
นี่คือคำพูด: <trans name="addDoc" table="TDOC_DOCS" method="insert"> <primarykey ชื่อ = "docid" /> <ตั้งค่า> <ชื่อคุณสมบัติ="createtime" type="ประทับเวลา"/> <ชื่อคุณสมบัติ="creatorid" type="long"/> <ชื่อคุณสมบัติ="doctypeid" type="int"/> <ชื่อคุณสมบัติ="docstatusid" type="int"/> </ตั้งค่า> </ทรานส์> |
ส่วนที่เหลือของ XML สามารถปรับแต่งได้ตามกฎดังกล่าว
5. การใช้งานทางเทคนิค
ของ RouterFactory
นี่คือคำพูด: แพ็คเกจ com.web.router; นำเข้า com.web.platform.Exception.RouterException; import java.util.java/util/Hashtable.java.html" target="_blank">Hashtable; |
ต่อไปนี้เป็นส่วนอ้างอิง: - * คลาสที่สร้างและล้างโดยเราเตอร์ - RouterFactory ระดับสาธารณะ - - * หน้าต้นไม้จัดเก็บโดย Router - java/util/Hashtable.java.html แบบคงที่ส่วนตัวส่วนตัว = "_blank">Hashtable QueuePairFront = null; - * Tree back จัดเก็บโดย Router - java/util/Hashtable.java.html แบบคงที่ส่วนตัว " target="_blank">Hashtable QueuePairBack = null; - * Tree จัดเก็บโดย Router */ java/util/Hashtable.java.html แบบคงที่ส่วนตัว" target="_blank">Hashtable QueueRouter = null; - * ส่งคืน XMLRouter - อินสแตนซ์ XMLRouter แบบคงที่สาธารณะ = null; - *คำจำกัดความของเราเตอร์ */ RouterDefine สาธารณะคง routerdefine = null; - * หมายเลขประจำตัวเราเตอร์ */ ดัชนีเส้นทางยาวคงที่สาธารณะ = 0; - * @roseuid 3F169C21027C - RouterFactory สาธารณะ () - - - * เริ่มต้น Hashtable และ Vector - โมฆะคงที่สาธารณะ initFactory() พ่น java/lang/Exception.java.html" target="_blank">ข้อยกเว้น - QueuePairFront = new java/util/Hashtable.java.html" target="_blank">Hashtable(); QueuePairBack = ใหม่ java/util/Hashtable.java.html" target="_blank">Hashtable(); QueueRouter = new java/util/Hashtable.java.html" target="_blank">Hashtable(); initRouteDefine(); - - * เริ่มต้นการตั้งค่าเส้นทาง * - โมฆะคงที่ส่วนตัว initRouteDefine() พ่น java/lang/Exception.java.html" target="_blank">ข้อยกเว้น - ถ้า (เราเตอร์กำหนด == null) routerdefine = RouterDefine ใหม่ (); routerdefine.loadRouterDef(); - - * ส่งคืนอินสแตนซ์ * @return com.web.router.XMLRouter - XMLRouter แบบคงที่สาธารณะ getInstance (ดัชนีแบบยาว) พ่น RouterException - return (XMLRouter)QueueRouter.get(java/lang/Long.java.html" target="_blank">Long(ดัชนี) ใหม่); - - * สร้างอินสแตนซ์ของ XMLRouter * @return com.web.router.XMLRouter * @roseuid 3F1618A103BC - XMLRouter แบบคงที่สาธารณะ popInstance() พ่น RouterException - ดัชนีเส้นทาง++; อินสแตนซ์ = XMLRouter ใหม่ (routeIndex); setDefine( ตัวอย่าง ); QueueRouter.put(new java/lang/Long.java.html" target="_blank">Long(routeIndex), อินสแตนซ์); ส่งคืนอินสแตนซ์; - - * ล้าง Hashtable, Vector ฯลฯ * @roseuid 3F1618B203C1 - โมฆะคงที่ส่วนตัว freeResource() พ่น java/lang/Exception.java.html" target="_blank">ข้อยกเว้น - QueuePairFront.clear(); QueuePairBack.clear(); QueueRouter.clear(); QueuePairFront = QueuePairBack = QueueRouter = null; - - * ล้างอินสแตนซ์ * @param instanceID * @throwsException - โมฆะคงที่สาธารณะ RemoveInstance (อินสแตนซ์ XMLRouter) พ่น java/lang/Exception.java.html" target="_blank">ข้อยกเว้น - อินสแตนซ์.ชัดเจน(); QueueRouter.remove( java/lang/Long.java.html" target="_blank">Long(instance.getIndex() ) ) ; - - * วิธีการเป็นNull * @return บูลีน - บูลีนคงที่สาธารณะ isNull() - - กลับเท็จ; - - |
นี่คือคำพูด: แพ็คเกจ com.web.router; นำเข้า com.web.platform.Exception.RouterException; นำเข้า com.web.common.*; นำเข้า java.util.*; นำเข้า java.lang.reflect.java/lang/reflect/Method.java.html" target="_blank">วิธีการ; นำเข้า java.lang.reflect.java/lang/reflect/Constructor.java.html" target="_blank">ตัวสร้าง; - * @ผู้เขียน keli * @เวอร์ชัน 0.0.1 * กุญแจสู่แพลตฟอร์ม, คลาสการกำหนดเส้นทาง, เราเตอร์แต่ละตัวจะอ่านจาก RouterFactory * ต้นไม้ด้านหน้า, ด้านหลัง, ดัชนีเส้นทางที่เราเตอร์จัดเก็บไว้มีไว้เพื่อวัตถุประสงค์ในการกำหนดเส้นทาง * วัตถุที่ใช้สามารถเคลียร์ได้ในภายหลัง * เราเตอร์สามารถใช้ฟังก์ชันซิงโครนัสและอะซิงโครนัสได้ - XMLRouter ระดับสาธารณะ - - * หน้าต้นไม้จัดเก็บโดย Router - java/util/Hashtable.java.html แบบคงที่ส่วนตัว " target="_blank">Hashtable QueuePairFront = null; - * Tree back จัดเก็บโดย Router - java/util/Hashtable.java.html แบบคงที่ส่วนตัว " target="_blank">Hashtable QueuePairBack = null; - * หมายเลขดัชนีของเราเตอร์นี้ */ ดัชนีเส้นทางยาวส่วนตัว = 0; - * การตั้งค่าเราเตอร์ */ RouterDefine ส่วนตัวกำหนด = null; - * ใช้เพื่อกำหนดจุดเริ่มต้นของเส้นทาง */ ส่วนตัว java/lang/String.java.html" target="_blank">การกระทำของสตริง = ""; - *ตัวแปรนี้ใช้เพื่อใช้กับคลาสใหม่ในเมธอด Routeto เท่านั้น - ส่วนตัว java/lang/String.java.html" target="_blank">ชื่อคลาสสตริง = ""; - - XMLRouter สาธารณะ (ดัชนีแบบยาว) - ดัชนีเส้นทาง = ดัชนี; - - * การกำหนดเส้นทาง * @throws ข้อยกเว้น * @roseuid 3F1616BD0186 - การกำหนดเส้นทางเป็นโมฆะสาธารณะ (Env env) พ่น RouterException, java/lang/Exception.java.html" target="_blank">ข้อยกเว้น - /*ถ้าเป็นจุดเริ่มต้น*/ ถ้า ( action.equalsIgnoreCase ( RouterConstant.CFG_FUNC_ROUTETO ) ) - - - /*หากเป็นจุดกลับ*/ อย่างอื่นถ้า ( action.equalsIgnoreCase ( RouterConstant.CFG_FUNC_ROUTEBACK ) ) - - - /*มิฉะนั้นจะเกิดข้อผิดพลาด*/ อื่น โยน RouterException ใหม่ ("ตั้งค่าข้อผิดพลาดการกระทำของเราเตอร์"); - - * อ่านหมายเลข ID ของเราเตอร์นี้ * @return ยาว - getIndex ยาวสาธารณะ () - ดัชนีเส้นทางกลับ; - - * ล้างวัตถุทั้งหมด * @พ่น RouterException - โมฆะสาธารณะชัดเจน () พ่น RouterException - QueuePairFront.remove(ใหม่ java/lang/Long.java.html" target="_blank">ยาว(routeIndex)); QueuePairBack.remove(ใหม่ java/lang/Long.java.html" target="_blank">ยาว(routeIndex)); /*การรีไซเคิลระบบ*/ java/lang/System.java.html" target="_blank">System.runFinalization(); - - * ตั้งค่าการตั้งค่าของเราเตอร์นี้ * @param def * @พ่น RouterException - โมฆะสาธารณะ setDefine (RouterDefine def) พ่น RouterException - กำหนด = def; - - * ตั้งค่าของการกระทำ * @param actionName * @พ่น RouterException - โมฆะสาธารณะ setAction (java/lang/String.java.html" target="_blank">สตริง actionName) - การกระทำ = ชื่อการกระทำ; - } |
ระดับการบริการ
นี่คือคำพูด: แพ็คเกจ com.web.common; นำเข้า com.web.platform.Exception.RouterException; - * คลาสหลักของบริการ บทคัดย่อ - RouteService คลาสนามธรรมสาธารณะ - - - บริการเส้นทางสาธารณะ() - - - * วิธี RouteTo เป็นจุดเริ่มต้นของธุรกรรม * @param สิ่งแวดล้อม * @พ่น RouterException - โมฆะสาธารณะบทคัดย่อเส้นทาง (Env env) พ่น RouterException; - *routeBack จุดสิ้นสุดของธุรกรรม * @param สิ่งแวดล้อม * @พ่น RouterException - เส้นทางกลับโมฆะนามธรรมสาธารณะ (Env env) พ่น RouterException; - * วิธีการยอมรับเส้นทางคือจุดรับของธุรกรรมและฟังก์ชันการรับของเส้นทาง * Routeaccept เป็นฟังก์ชันการประมวลผลหลักของวัตถุธุรกรรมแบบพาสซีฟ * @param env * @พ่น RouterException - สาธารณะนามธรรมเส้นทางยอมรับ (Env env) พ่น RouterException; - * วิธีการกำหนดเส้นทางเป็นฟังก์ชันอินเทอร์เฟซภายนอกของบริการ * @throws RouterException - public abstract void routing() พ่น RouterException |
ต่อไป คุณต้องใช้คลาส Services ทั้งหมด ซึ่งจะไม่แนะนำที่นี่
6. อธิบายว่า
เราเตอร์นี้สามารถใช้ธุรกรรมแบบซิงโครนัสได้เท่านั้น และไม่รองรับธุรกรรมแบบอะซิงโครนัสในขณะนี้ อย่างไรก็ตาม เนื่องจากเราเตอร์ได้รับการออกแบบโดยใช้โมเดลคอมโพสิต จึงสามารถขยายการใช้งานธุรกรรมแบบอะซิงโครนัสได้ ดังนั้นการวิเคราะห์โดยละเอียดจะไม่ทำที่นี่