2010-08-02 19 views
6

मैंने वास्तव में जेबॉस सीम एप्लिकेशन ढांचे को पसंद किया है। चूंकि जेएसएफ/ईजेबी/जेपीए के बीच इंजेक्शन/आउटजेक्शन और कड़े एकीकरण की धारणा जावा अनुप्रयोग ढांचे के बीच अपेक्षाकृत दुर्लभ है, इसलिए मैं इस ढांचे का उपयोग करने के लिए डिजाइन पैटर्न और सर्वोत्तम प्रथाओं के लिए कुछ अच्छे संसाधनों की तलाश में था। मैंने इस विषय पर उदाहरणों और कई पुस्तकों को डाला है। हालांकि, मुझे वास्तविक दुनिया के डिजाइन पैटर्न में अधिक दिलचस्पी है जो परंपरागत जे 2 ईई डिजाइन पैटर्न की तुलना में है। उदाहरण के लिए, पारंपरिक डीएओ बनाम EntityHome/EntityQuery। व्यापार तर्क कहां किया जाना चाहिए? एक्शन क्लास में? या समर्पित सेवा कक्षाओं में? मैं वास्तव में अनुभवी सीम डेवलपर्स दे सकते हैं किसी अंतर्दृष्टि की सराहना करता हूं। धन्यवाद!जेबॉस सीम डिजाइन पैटर्न?

उत्तर

8

आपके द्वारा उपयोग किए जा सकने वाले कई उपयोगी पैटर्न हैं।

पारंपरिक दृष्टिकोण

view >> controller >> service >> domain 

कौन सा

/** 
    * view 
    */ 
<h:commandButton value="Deposit" action="#{accountController.removeAccount(account)}"/> 

/** 
    * controller 
    */ 
@Name("accountController") 
public class AccountController implements Serializable { 

    /** 
     * Usually a plain POJO or EJB 
     */ 
    private @In AccountService accountService; 

    public void removeAccount(Account account) { 
     accountService.removeAccount(account); 
    } 

} 

/** 
    * service 
    */ 
@Name("accountService") 
public class AccountServiceImpl implements AccountService { 

    private @In EntityManager entityManager; 

    public void removeAccount(Account account) { 
     entityManager.remove(account); 
    } 

} 

में अनुवाद किया जा सकता है आप कुछ कार्रवाई जो JSF घटकों में हेरफेर करने के लिए सर्वर साइड पर की जरूरत है, तो के रूप में ऊपर दिखाए गए एक नियंत्रक का उपयोग एक अच्छा विचार हो सकता है

आप

का भी उपयोग कर सकते हैं
view >> service >> domain 

यह मूल रूप से एक ही दृष्टिकोण ऊपर, लेकिन नियंत्रक

बिना या द्वारा का उपयोग कर का उपयोग कर EntityHome/EntityQuery

view >> domain 

रजिस्टर अपने EntityHome रूप /वेब इस प्रकार से निर्मित मध्यस्थ पैटर्न से पता चला है -INF/घटक.xml

<framework:entity-home name="accountHome" entity-class="br.com.ar.seam.Account"/> 

अब आप कारखाने तत्व का उपयोग किसी और

<factory name="account" value="#{accountHome.instance}"/> 

/** 
    * view 
    * 
    * Notice account will be evaluated as accountHome.instance 
    */ 
<h:commandButton value="Deposit" action="#{account.remove}"/> 

कुछ भी नहीं द्वारा एक उपनाम बना सकते हैं। जब या तो EntityHome (जेपीए) या HibernateEntityHome (हाइबरनेट) का उपयोग ध्यान रखें कि आप आमतौर पर कुछ तरीकों को ओवरराइड करने के प्रदर्शन में सुधार करने के रूप में

@Name("accountHome") 
public class AccountHome extends EntityHome<Account> { 

    /** 
     * Override any method you want right here 
     */ 

} 

व्यापार तर्क के बारे में इस प्रकार की जरूरत है ??? आप इसे अपनी सेवा परत के अंदर रख सकते हैं या आप डोमेन-संचालित-डिजाइन दृष्टिकोण का उपयोग कर सकते हैं। here देखें जो आप चाहते हैं कि बेहतर

परीक्षण: सीम बंडल परीक्षण घटकों का उपयोग करें। सीम उदाहरणों पर एक नज़र डालें निर्देशिका एक सिंहावलोकन प्राप्त करने के लिए आप तैनाती के बिना परीक्षण कैसे कर सकते हैं

यदि संभव हो, तो अपनी परियोजना उत्पन्न करने के लिए सीम-जेन का उपयोग करें। सीम इन एक्शन बुक, अध्याय 2, सीम-जेन क्षमताओं को स्टार्टअप करने के लिए एक अच्छी अंतर्दृष्टि प्रदान कर सकता है। ध्यान से पढ़ें।किसी भी सीवन पीढ़ी उत्पन्न परियोजना खोला जा सकता है और NetBeans और ग्रहण में परीक्षण किया गया

JSF घटकों: here

पर एक नजर डालें वहाँ अधिक है: अब और @ बाहर jection प्रयोग न करें। इसके बजाय @ फैक्टरी का प्रयोग करें। @ फैक्ट्री विधि के पक्ष में @ आउट-जेक्शन को बहिष्कृत किया जाएगा।

आई थिंक प्रश्नों बेहतर एक बाहरी फ़ाइल में संग्रहीत किया जाता है क्योंकि

  • यह पठनीय है
  • यह पोषणीय है

रूप

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <query name="GIFT_CARDS_WITH_BUYER"> 
     <![CDATA[ 
      from 
       GiftCard c 
      left join fetch 
       c.buyer 
      where 
       c.recipientNotificationRequested = 1 
     ]]> 
    </query> 
    <query name="GIFT_CARDS_WITHOUT_NO_RELATIONSHIP"> 
     <![CDATA[ 
      from 
       GiftCard 
     ]]> 
    </query> 
</hibernate-mapping> 

अच्छा एक प्रकार है, डॉन ' टी

,210

एक और संसाधन यहाँ जाता है (पीडीएफ प्रारूप)

JBoss Seam: Agile RIA Development Framework

+0

वाह! अब यह एक विस्तृत उत्तर है। आपकी अंतर्दृष्टि के लिए बहुत बहुत धन्यवाद! – Shadowman

+0

दाएं, आर्थर यहां सीम लड़का है :) – BalusC

+0

अच्छा जवाब। लेकिन मैं सीम एप्लीकेशन फ्रेमवर्क से दूर रहूंगा। (EntityHome, EntityQuery आदि) –

संबंधित मुद्दे