जावा वेब अनुप्रयोगों के लिए आपके द्वारा उपयोग की जाने वाली वास्तुकला का वर्णन करें? [बन्द है]


146

चलो जावा आधारित वेब एप्लिकेशन आर्किटेक्चर साझा करते हैं!

वेब एप्लिकेशन के लिए बहुत सारे अलग-अलग आर्किटेक्चर हैं जिन्हें जावा का उपयोग करके लागू किया जाना है। इस सवाल के जवाब उनके पेशेवरों और विपक्षों के साथ विभिन्न वेब एप्लिकेशन डिज़ाइनों के पुस्तकालय के रूप में काम कर सकते हैं। जबकि मुझे एहसास है कि उत्तर व्यक्तिपरक होंगे, आइए हम उतने ही उद्देश्य के साथ प्रयास करें जितना हम कर सकते हैं और हमारे द्वारा सूचीबद्ध पेशेवरों और विपक्षों को प्रेरित कर सकते हैं।

अपने आर्किटेक्चर का वर्णन करने के लिए आपके द्वारा पसंद किए गए विवरण स्तर का उपयोग करें। किसी भी मूल्य के आपके उत्तर के लिए आपको कम से कम वास्तुकला में उपयोग की जाने वाली प्रमुख तकनीकों और विचारों का वर्णन करना होगा। और अंतिम लेकिन कम से कम, हमें आपकी वास्तुकला का उपयोग कब करना चाहिए?

मैं शुरू करूँगा...


वास्तुकला का अवलोकन

हम जावा से ईई, जावा पर्सिस्टेंस एपीआई, सर्वलेट और जावा सर्वर पेज जैसे खुले मानकों के आधार पर 3-स्तरीय वास्तुकला का उपयोग करते हैं।

  • हठ
  • व्यापार
  • प्रस्तुतीकरण

परतों के बीच संभावित संचार प्रवाह द्वारा दर्शाया जाता है:

Persistence <-> Business <-> Presentation

उदाहरण के लिए, इसका मतलब है कि प्रेजेंटेशन लेयर कभी भी कॉल नहीं करता है या दृढ़ता से काम करता है, यह हमेशा व्यापार परत के माध्यम से करता है। यह आर्किटेक्चर एक उच्च उपलब्धता वेब एप्लिकेशन की मांगों को पूरा करने के लिए है।

हठ

क्रिएट, रीड, अपडेट और डिलीट ( CRUD ) दृढ़ता ऑपरेशन करता है। हमारे मामले में हम ( जावा पर्सिस्टेंस एपीआई ) जेपीए का उपयोग कर रहे हैं और हम वर्तमान में अपने दृढ़ता प्रदाता के रूप में हाइबरनेट का उपयोग करते हैं और इसके एंटिटी मैनजर का उपयोग करते हैं ।

इस परत को कई वर्गों में विभाजित किया गया है, जहां प्रत्येक वर्ग एक निश्चित प्रकार की संस्थाओं (यानी एक शॉपिंग कार्ट से संबंधित इकाइयाँ, एक एकल वर्ग द्वारा नियंत्रित की जा सकती हैं) और एक और केवल एक प्रबंधक द्वारा उपयोग किया जाता है ।

इसके अलावा इस परत में जेपीए इकाइयाँ भी जमा होती हैं Account, जैसे कि चीजें , ShoppingCartआदि।

व्यापार

सभी तर्क जो वेब एप्लिकेशन कार्यक्षमता से बंधा है, इस परत में स्थित है। यह कार्यक्षमता उस ग्राहक के लिए धन हस्तांतरण शुरू कर सकती है, जो अपने क्रेडिट कार्ड का उपयोग करके किसी उत्पाद के लिए भुगतान करना चाहता है। यह सिर्फ एक नया उपयोगकर्ता बना सकता है, एक उपयोगकर्ता को हटा सकता है या वेब आधारित गेम में लड़ाई के परिणाम की गणना कर सकता है।

इस परत को कई वर्गों में विभाजित किया गया है और इनमें से प्रत्येक वर्ग को स्टेटलेस सत्र बीन (SLSB) @Statelessबनने के लिए एनोटेट किया गया है । प्रत्येक SLSB को प्रबंधक कहा जाता है और उदाहरण के लिए एक प्रबंधक एक वर्ग हो सकता है जैसा कि वर्णित है ।AccountManager

जब AccountManagerCRUD ऑपरेशन करने की आवश्यकता होती है तो यह एक उदाहरण के लिए उपयुक्त कॉल AccountManagerPersistenceकरता है, जो दृढ़ता परत में एक वर्ग है। AccountManagerहो सकता है दो तरीकों का एक मोटा स्केच :

...
public void makeExpiredAccountsInactive() {
    AccountManagerPersistence amp = new AccountManagerPersistence(...)
    // Calls persistence layer
    List<Account> expiredAccounts = amp.getAllExpiredAccounts();
    for(Account account : expiredAccounts) {
        this.makeAccountInactive(account)
    }
}
public void makeAccountInactive(Account account) {
    AccountManagerPersistence amp = new AccountManagerPersistence(...)
    account.deactivate();
    amp.storeUpdatedAccount(account); // Calls persistence layer
}

हम कंटेनर प्रबंधक लेनदेन का उपयोग करते हैं, इसलिए हमें अपने स्वयं के लेन-देन का सीमांकन नहीं करना है। मूल रूप से हुड के नीचे क्या होता है हम एसएलएसबी विधि में प्रवेश करते समय एक लेनदेन शुरू करते हैं और विधि से बाहर निकलने से तुरंत पहले इसे (या इसे रोलबैक) करते हैं। यह कॉन्फ़िगरेशन पर कन्वेंशन का एक उदाहरण है, लेकिन हमें किसी भी चीज़ की आवश्यकता नहीं है लेकिन डिफ़ॉल्ट, आवश्यक है, फिर भी।

यहाँ बताया गया है कि सूर्य से जावा EE 5 ट्यूटोरियल एंटरप्राइज JavaBeans (EJB's) के लिए आवश्यक लेनदेन विशेषता बताता है :

यदि ग्राहक लेन-देन के भीतर चल रहा है और एंटरप्राइज़ बीन की विधि को लागू करता है, तो विधि क्लाइंट के लेनदेन के भीतर निष्पादित होती है। यदि ग्राहक लेन-देन से संबद्ध नहीं है, तो विधि को चलाने से पहले कंटेनर एक नया लेनदेन शुरू करता है।

आवश्यक विशेषता कंटेनर-प्रबंधित लेनदेन सीमांकन के साथ चलने वाले सभी एंटरप्राइज़ बीन विधियों के लिए निहित लेनदेन विशेषता है। जब तक आपको किसी अन्य लेन-देन विशेषता को ओवरराइड करने की आवश्यकता न हो, आप आमतौर पर आवश्यक विशेषता सेट नहीं करते हैं। क्योंकि लेन-देन की विशेषताएँ घोषणात्मक हैं, आप उन्हें बाद में आसानी से बदल सकते हैं।

प्रस्तुतीकरण

हमारी प्रस्तुति परत के प्रभारी है ... प्रस्तुति! यह उपयोगकर्ता इंटरफ़ेस के लिए ज़िम्मेदार है और उपयोगकर्ता को HTML पृष्ठ बनाने और GET और POST अनुरोधों के माध्यम से उपयोगकर्ता इनपुट प्राप्त करने के लिए जानकारी दिखाता है। वर्तमान में हम पुराने सर्वलेट + जावा सर्वर पेज ( JSP ) संयोजन का उपयोग कर रहे हैं ।

परत उपयोगकर्ता द्वारा अनुरोध किए गए कार्यों को निष्पादित करने और वेब पेज में दिखाने के लिए जानकारी प्राप्त करने के लिए व्यावसायिक परत के प्रबंधकों में विधियों को कॉल करती है । कभी कभी व्यापार परत से प्राप्त जानकारी के रूप में कम जटिल प्रकार के होते हैं Stringकी और integers, और अन्य समय पर जेपीए संस्थाओं

वास्तुकला के साथ पेशेवरों और विपक्ष

पेशेवरों

  • इस परत में दृढ़ता से करने के एक विशिष्ट तरीके से संबंधित सब कुछ होने का मतलब है कि हम व्यावसायिक परत में कुछ भी फिर से लिखने के बिना, जेपीए का उपयोग किसी और चीज़ में करने से स्वैप कर सकते हैं।
  • हमारे लिए अपनी प्रस्तुति परत को किसी और चीज़ में बदलना आसान है, और यह संभव है कि हम कुछ बेहतर पाएंगे।
  • EJB कंटेनर को लेन-देन की सीमाओं को प्रबंधित करने देना अच्छा है।
  • सर्वलेट के JPA का उपयोग करना आसान है (साथ शुरू करना) और तकनीकों का व्यापक रूप से उपयोग किया जाता है और बहुत सारे सर्वरों में लागू किया जाता है।
  • जावा ईई का उपयोग करना हमारे लिए लोड संतुलन के साथ एक उच्च उपलब्धता प्रणाली बनाने और इसे विफल करने के लिए आसान बनाने वाला है । दोनों जो हमें लगता है कि हमारे पास होना चाहिए।

विपक्ष

  • जेपीए के उपयोग से आप @NamedQueryजेपीए इकाई वर्ग पर एनोटेशन का उपयोग करके अक्सर पूछे जाने वाले प्रश्नों को स्टोर कर सकते हैं । यदि आपके पास दृढ़ता कक्षाओं में दृढ़ता से संबंधित जितना संभव हो, हमारी वास्तुकला में, यह उन स्थानों को फैलाएगा जहां आपको जेपीए संस्थाओं को शामिल करने के लिए प्रश्न मिल सकते हैं। दृढ़ता संचालन को बनाए रखना कठिन होगा और इस प्रकार बनाए रखना कठिन होगा।
  • हमारे पास हमारी दृढ़ता परत के हिस्से के रूप में जेपीए इकाइयाँ हैं। लेकिन Accountऔर ShoppingCart, नहीं वे वास्तव में व्यापार वस्तुओं रहे हैं? यह इस तरह से किया जाता है जैसे आपको इन वर्गों को छूना है और उन्हें उन संस्थाओं में बदलना है जिन्हें जेपीए जानता है कि कैसे संभालना है।
  • जेपीए इकाइयाँ, जो हमारी व्यावसायिक वस्तुएँ भी हैं, डेटा ट्रांसफर ऑब्जेक्ट्स ( डीटीओ ) की तरह बनाई जाती हैं , जिन्हें वैल्यू ऑब्जेक्ट्स (वीओ) भी कहा जाता है। यह एनीमिक डोमेन मॉडल के रूप में परिणाम देता है क्योंकि व्यापारिक वस्तुओं के पास एक्सेसर विधियों को छोड़कर खुद का कोई तर्क नहीं है। सभी तर्क हमारे प्रबंधकों द्वारा व्यापार परत में किए जाते हैं, जिसके परिणामस्वरूप एक अधिक प्रक्रियात्मक प्रोग्रामिंग शैली होती है। यह अच्छी वस्तु उन्मुख डिजाइन नहीं है, लेकिन शायद यह कोई समस्या नहीं है? (सभी ऑब्जेक्ट ओरिएंटेशन के बाद केवल प्रोग्रामिंग प्रतिमान नहीं है जिसने परिणाम दिया है।)
  • EJB और Java EE का उपयोग करना थोड़ी जटिलता का परिचय देता है। और हम विशुद्ध रूप से टॉमकैट का उपयोग नहीं कर सकते हैं (एक EJB माइक्रो-कंटेनर जोड़कर विशुद्ध रूप से टॉमकैट नहीं है )।
  • सर्वलेट के + जेपीए का उपयोग करने के साथ बहुत सारे मुद्दे हैं। इन मुद्दों के बारे में अधिक जानकारी के लिए Google का उपयोग करें।
  • जब व्यापार परत से बाहर निकलते समय लेन-देन बंद हो जाता है, तो हम जेपीए संस्थाओं से कोई भी जानकारी लोड नहीं कर सकते हैं, जिसे डेटाबेस से लोड होने के लिए कॉन्फ़िगर किया जाता है जब इसे fetch=FetchType.LAZYप्रस्तुति परत के अंदर से जरूरत (उपयोग ) होती है। यह एक अपवाद को ट्रिगर करेगा। इस प्रकार के क्षेत्रों से युक्त एक इकाई को वापस करने से पहले हमें संबंधित गेटर्स को कॉल करना सुनिश्चित करना होगा। एक और विकल्प जावा पर्सिस्टेंस क्वेरी लैंग्वेज ( JPQL ) का उपयोग करना और एक करना है FETCH JOIN। हालाँकि ये दोनों विकल्प थोड़े बोझिल हैं।

1
ऐसा लगता है कि आप अपने स्वयं के उत्तर के साथ बार को बहुत अधिक सेट करते हैं - यह दूसरों को हतोत्साहित कर सकता है :)
जोनिक

5
इसके अलावा, शायद आपका ले एक सामान्य उत्तर में होना चाहिए, सवाल का हिस्सा नहीं होना चाहिए, ताकि इसे अन्य उत्तरों के साथ वोट दिया जा सके?
जोनिक

इस प्रश्न को मेटा पर संदर्भित किया गया है ।
D4V1D

जवाबों:


20

ठीक है मैं एक (कम) एक करूँगा:

  • सीमा: टेपेस्ट्री (पुरानी परियोजनाओं के लिए 3, नई परियोजनाओं के लिए 5)
  • व्यापार परत: वसंत
  • DAO का: इबैटिस
  • डेटाबेस: ओरेकल

हम स्पिंग लेन-देन सहायता का उपयोग करते हैं, और DAO कॉल के लिए प्रचार करते हुए, सेवा स्तर में प्रवेश करने पर लेनदेन शुरू करते हैं। सेवा परत में सबसे अधिक मॉडल ज्ञान है, और डीएओ अपेक्षाकृत सरल CRUD काम करते हैं।

प्रदर्शन कारणों से बैकएंड में कुछ अधिक जटिल क्वेरीज़ को अधिक जटिल प्रश्नों द्वारा नियंत्रित किया जाता है।

हमारे मामले में स्प्रिंग का उपयोग करने के लाभ यह है कि हमारे पास देश / भाषा पर निर्भर उदाहरण हो सकते हैं, जो स्प्रिंग प्रॉक्सी कक्षा के पीछे हैं। सत्र में उपयोगकर्ता के आधार पर, कॉल करते समय सही देश / भाषा कार्यान्वयन का उपयोग किया जाता है।

लेन-देन प्रबंधन लगभग पारदर्शी है, रनटाइम अपवादों पर रोलबैक। हम यथासंभव अनियोजित अपवादों का उपयोग करते हैं। हम चेक किए गए अपवादों का उपयोग करते थे, लेकिन वसंत की शुरुआत के साथ मुझे अनियंत्रित अपवादों के लाभ दिखाई देते हैं, केवल अपवादों को संभालना जब आप कर सकते हैं। यह बहुत सारे बॉयलरप्लेट "कैच / रीथ्रो" या "थ्रो" सामान से बचा जाता है।

क्षमा करें, यह आपके पोस्ट से छोटा है, आशा है कि आपको यह दिलचस्प लगेगा ...


अच्छा उत्तर! यह धागा कुछ ट्रैफ़िक को आकर्षित करने के लिए लगता है, एक दयालु अन्य लोग महसूस नहीं करते हैं कि उन्हें अपने आर्किटेक्चर का वर्णन करने का समय मिला है, या भाग नहीं लेने के अन्य कारण हैं।

19

आदर्श जावा आधारित वेब विकास टेक्नोलॉजीज आज।

वेब परत:

HTML + सीएसएस + अजाक्स + JQuery

RESTFul वेब नियंत्रक / कार्रवाई / अनुरोध प्रसंस्करण परत:

फ्रेमवर्क खेलें

व्यापार तर्क / सेवा परत:

जहां तक ​​हो सके प्योर जावा कोड का इस्तेमाल करें। यहां वेब सेवाओं का फ्यूजन किया जा सकता है।

XML / JSon डेटा परिवर्तन परत:

XMLTool (Google कोड पर खोजें), JSoup, Google GSon, XStream, JOOX (Google कोड पर खोजें)

दृढ़ता परत:

CRUD: JPA या SienaProject या QueryDSL / Complex Queries: JOOQ, QueryDSL


9

यहाँ मेरे 5 सेंट है

प्रस्तुतीकरण

Android, Angular.JS WebClient, OAUTHv2

एपीआई

REST, जर्सी (JAX-RS), जैक्सन (JSON de- / क्रमांकन), DTO- ऑब्जेक्ट्स (विभिन्न लॉजिक मॉडल से अलग)

व्यापार का तर्क

डि और इवेंट हैंडलिंग के लिए स्प्रिंग। मॉडल वस्तुओं का DDD-ish दृष्टिकोण। कार्यकर्ता-मॉड्यूल में लंबे समय से चल रही नौकरियों को एसक्यूएस के साथ लोड किया जाता है।

डीएओ

एंटिटी स्टोर करने के लिए स्प्रिंग JDBC-टेम्पलेट्स के साथ रिपॉजिटरी मॉडल। लीडरबोर्ड के लिए रेडिस (JEDIS), ऑर्डर की गई सूचियों का उपयोग करते हुए। टोकन स्टोर के लिए Memcache।

डेटाबेस

MySQL, Memcached, Redis


यह कुछ वैसा ही है जैसा हम अपनी परियोजनाओं में अपनाते हैं! इसके अलावा व्यापार वर्कफ़्लो के लिए जेबीपीएम। मुझे आश्चर्य क्यों नहीं वसंत?
ininprsr

मुझे हमारे वर्तमान आर्क के साथ एक अपडेट करना चाहिए: वर्तमान में हम डेटा-एक्सेस परत के लिए स्प्रिंग डि और जेडडीबीसी-टेम्प्लेट का उपयोग करते हैं।
24

6

हमने अपनी परियोजना में जो अनुसरण किया है वह है:

फ्रंट एंड टेक्नोलॉजी

  • AngularJS
  • एचटीएमएल 5
  • css3
  • जावास्क्रिप्ट
  • बूटस्ट्रैप ३

एपीआई

  1. आराम
  2. जर्सी (JAX-RS)
  3. निश्चित होना
  4. वसंत स्पॉट
  5. जैक्सन
  6. वसंत सुरक्षा

व्यापार का तर्क

  • स्प्रेडिंग डेटा

  • डेटा MongoDB SPRING

डेटाबेस

  • MongoDB

सर्वर (कैशिंग के लिए)

  • redis

4

हम अभी भी सामान्य स्ट्रट्स-स्प्रिंग-हाइबरनेट स्टैक का उपयोग कर रहे हैं।

भविष्य के ऐप्स के लिए, हम फ्लेक्स फ्रंट एंड के साथ स्प्रिंग वेब फ्लो + स्प्रिंग एमवीसी + हाइबरनेट या स्प्रिंग + हाइबरनेट + वेब सेवाओं में देख रहे हैं।

हमारी वास्तुकला की एक अलग विशेषता है मॉडर्नाइजेशन। हमारे पास कई मॉड्यूल हैं, कुछ डेटाबेस में 3 से अधिकतम 30 तालिकाओं के साथ शुरू होते हैं। अधिकांश मॉड्यूल में व्यवसाय और वेब परियोजना शामिल है। व्यापार परियोजना व्यवसाय और दृढ़ता तर्क रखती है जबकि वेब प्रस्तुति तर्क रखती है।
तार्किक स्तर पर, तीन परतें हैं: व्यापार, दृढ़ता और प्रस्तुति।
निर्भरताएँ:
प्रस्तुति व्यापार और दृढ़ता पर निर्भर करती है।
दृढ़ता व्यापार पर निर्भर करती है।
व्यवसाय अन्य परतों पर निर्भर नहीं करता है।

अधिकांश व्यावसायिक परियोजनाओं में तीन प्रकार के इंटरफेस होते हैं (नोट: जीयूआई नहीं, यह एक प्रोग्राम जावा इंटरफ़ेस परत है)।

  1. इंटरफ़ेस जो प्रस्तुति क्लाइंट के रूप में उपयोग कर रहा है
  2. इंटरफ़ेस जो अन्य मॉड्यूल का उपयोग कर रहे हैं जब वे मॉड्यूल के ग्राहक हैं।
  3. इंटरफ़ेस जो मॉड्यूल के प्रशासनिक उद्देश्यों के लिए उपयोग किया जा सकता है।

अक्सर, 1 का विस्तार होता है 2. इस तरह, मॉड्यूल के एक कार्यान्वयन को दूसरे के साथ बदलना आसान है। यह हमें विभिन्न ग्राहकों को अपनाने और अधिक आसानी से एकीकृत करने में मदद करता है। कुछ ग्राहक केवल कुछ मॉड्यूल खरीदेंगे और हमें उनके पास पहले से मौजूद कार्यक्षमता को एकीकृत करने की आवश्यकता है। चूँकि इंटरफ़ेस और कार्यान्वयन परत अलग हो जाते हैं, अतः निर्भर मॉड्यूल को प्रभावित किए बिना उस विशिष्ट ग्राहक के लिए एड-हॉक मॉड्यूल कार्यान्वयन को रोल आउट करना आसान है। और स्प्रिंग फ्रेमवर्क विभिन्न कार्यान्वयन को इंजेक्ट करना आसान बनाता है।

हमारी व्यावसायिक परत POJO पर आधारित है। एक प्रवृत्ति मैं देख रहा हूं कि ये पीओजेओ डीटीओ के समान हैं। हम एनीमिक डोमेन मॉडल से पीड़ित हैं । मुझे पूरा यकीन नहीं है कि ऐसा क्यों हो रहा है, लेकिन यह हमारे कई मॉड्यूलों की समस्या डोमेन की सादगी के कारण हो सकता है, ज्यादातर काम सीआरयूडी है या डेवलपर्स के कारण तर्क को कहीं और जगह देना पसंद करते हैं।


3

यहाँ एक और वेब वास्तुकला है जिस पर मैंने काम किया है:

एक बड़ी आवश्यकता यह थी कि एप्लिकेशन को मोबाइल / अन्य उपकरणों का समर्थन करना चाहिए। प्रौद्योगिकी विकल्पों में परिवर्तन के लिए आवेदन भी एक्स्टेंसिबल या लचीला होना चाहिए।

प्रस्तुति स्तरीय:

  • JSP / JQuery (क्लाइंट-साइड MVC)
  • देशी Android
  • देशी आईफोन
  • मोबाइल वेब (HTML5 / CSS3 / उत्तरदायी डिज़ाइन)

  • स्प्रिंग रेस्ट कंट्रोलर (JAX-RS में बदल सकते हैं)

व्यवसाय सेवा श्रेणी:

स्प्रिंग @ सेवा (स्टेटलेस ईजेबी में बदल सकता है)

डेटा एक्सेस टियर:

स्प्रिंग @ रिपोसिटरी (स्टेटलेस ईजेबी में बदल सकता है)

संसाधन स्तर:

हाइबरनेट (JPA) इकाइयाँ (किसी भी ORM में बदल सकती हैं)

आप किताब जो इस वास्तुकला इस प्रकार के बारे में अधिक जानकारी पा सकते हैं यहाँ


2

IMHO, हम में से ज्यादातर एक आम भाजक है। बैक-एंड में कम से कम, हमारे पास कुछ प्रकार के आईओसी / डीआई कंटेनर और एक दृढ़ता ढांचा है। व्यक्तिगत रूप से मैं इसके लिए Guice और Mybatis का उपयोग करता हूं। अंतर यह है कि हम दृश्य / UI / प्रस्तुति परत को कैसे लागू करते हैं। यहां 2 प्रमुख विकल्प हैं (अधिक हो सकते हैं) .. एक्शन आधारित (नियंत्रकों के लिए मैप किए गए URL) और घटक आधारित। वर्तमान में घटक आधारित प्रस्तुति परत (विकेट का उपयोग करके) का उपयोग कर रहा हूं। यह पूरी तरह से एक डेस्कटॉप वातावरण की नकल करता है जहां मैं घटकों और घटनाओं का उपयोग URL और नियंत्रकों के विपरीत करता हूं। वर्तमान में एक कारण की तलाश में हूं कि मुझे इस URL-नियंत्रक प्रकार के आर्किटेक्चर में क्यों जाना चाहिए (इस तरह मैंने इस पृष्ठ पर समाप्त किया है)। क्यों RESTful और स्टेटलेस आर्किटेक्चर के बारे में प्रचार।

इस प्रश्न का संक्षेप में उत्तर देने के लिए: मैं गाइस आईओसी कंटेनर के शीर्ष पर एक घटक उन्मुख ढांचे का उपयोग करके स्टेटफुल वेब एप्लिकेशन लिखता हूं और मायबेटिस का उपयोग करके रिलेशनल डेटाबेस में डेटा डालता हूं।


1

थोड़ा अलग है, और मैं यहां अधिक मॉड्यूलर जावा वास्तुकला का दावा करूंगा। हमारे पास है:

  1. स्प्रिंग डब्ल्यूएस / रेस्ट / जेएसपी फ्रंट एंड
  2. व्यवसाय सेवा तर्क के लिए स्प्रिंग MVC, प्रस्तुति परत तर्क के साथ-साथ वसंत लेनदेन भी शामिल है
  3. घटक सेवा संचार इंटरफ़ेस, व्यावसायिक सेवाओं द्वारा EJB के माध्यम से देखा गया। EJBs ने अपनी लेनदेन सीमाएँ निर्धारित की हैं जो स्प्रिंग लेनदेन में शामिल होने में सक्षम हैं।
  4. घटक सेवा कार्यान्वयन, फिर से वसंत घटक
  5. एकीकरण परत, डेटाबेस एकीकरण के लिए MyBatis, वेब सेवा एकीकरण के लिए स्प्रिंग WS, अन्य सेवाओं के लिए अन्य एकीकरण टेक्नोलोजी
  6. मेनफ्रेम, डेटाबेस, अन्य सर्वरों पर अन्य सेवाएं ...

उपरोक्त के अलावा, हमारे पास साझा पुस्तकालय मॉड्यूल हैं जो सभी srevices के लिए सामान्य कार्यक्षमता प्रदाता हैं।

विभिन्न परतों का उपयोग हमें पूर्ण डिकूप्लिंग और हमारे द्वारा आवश्यक मापांक की अनुमति देता है। हम जावा ईई की शक्ति के साथ-साथ वसंत का भी पूरी तरह से उपयोग करने में सक्षम हैं। कुछ भी हमें जेएसएफ का उपयोग करने से रोकता है, उदाहरण के लिए, यदि आवश्यक हो तो सामने के छोर के लिए।

ओपी द्वारा वास्तुकला के उदाहरण की तुलना में, मुझे लगता है कि इसे तीन के बजाय चार मुख्य परतों के रूप में वर्णित किया जा सकता है, यद्यपि एक मोड़ के साथ।


0

मैंने उन परियोजनाओं पर काम किया है जो उस कठोर प्रबंधक पैटर्न का उपयोग करती हैं। ऐतिहासिक रूप से, मैं कठोर पदानुक्रम का एक बड़ा प्रस्तावक था जहां सब कुछ एक साफ बॉक्स में फिट होता है। जैसा कि मैंने अपने करियर में प्रगति की है, मुझे लगता है कि इसे बहुत सारे मामलों में मजबूर किया जाना चाहिए। मेरा मानना ​​है कि एप्लिकेशन डिज़ाइन के प्रति अधिक चुस्त मानसिकता अपनाने से बेहतर उत्पाद बनता है। इसका मतलब है कि मैं कक्षाओं का एक सेट बना रहा हूं जो हाथ में समस्या को हल करता है। यह कहने के बजाय "क्या आपने इसके लिए एक प्रबंधक बनाया और वह?"

वर्तमान परियोजना जिस पर मैं काम कर रहा हूं वह स्प्रिंग एमवीसी और रेस्टैसी जेएसएन / अजाक्स कॉल के संयोजन के साथ एक वेब ऐप है। हमारे नियंत्रकों में एम्बेडेड सर्वर की ओर एक समझदार मुखौटा आधारित डेटा टियर है जो सीधे डेटाबेस एक्सेस, कुछ ईजेबी एक्सेस और कुछ एसओएपी आधारित वेब सेवा कॉल के लिए जेपीए / हाइबरनेट के साथ है। यह सब एक साथ बांधना कुछ कस्टम जावा नियंत्रक कोड है जो निर्धारित करता है कि JSON के रूप में क्या अनुक्रमित किया जाए और ग्राहक को वापस लौटाया जाए।

हम यूनिक्स डिज़ाइन दर्शन के "वर्सेज़ इज बेटर" विचार को अपनाने के बजाय कुछ एकीकृत पैटर्न बनाने के प्रयास में लगभग कोई समय नहीं बिताते हैं। होने के नाते कि लाइनों के बाहर रंग और कुछ समझदार बनाने के लिए बेहतर है, जल्दी से यह कुछ है कि सख्त डिजाइन जनादेश का एक गुच्छा का पालन करने के लिए है।


0

वेब एप्लिकेशन आर्किटेक्चर में घटकों में शामिल हैं:

1: ब्राउज़र: क्लाइंट इंटरैक्शन

        HTML
        JavaScript
        Stylesheet

2: इंटरनेट

3: वेबसर्वर

        CSS
        Image
        Pages(Java render )

4: एप्लिकेशन सर्वर

        App Webapp (Java interaction)
        Others WebApps

5: डेटाबेस सर्वर

        Oracle, SQL, MySQL

6: डेटा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.