मैं सोच रहा हूं कि मुझे वास्तव में सेवा परत की आवश्यकता है या नहीं।जावा स्विंग एप्लिकेशन में सेवा परत
मैं डेस्कटॉप स्विंग एप्लिकेशन के लिए वसंत + हाइबरनेट का उपयोग कर रहा हूं और इस समय मेरे पास गुई/स्विंग परत-> सेवा परत-> दाओ परत है। मैं वसंत का उपयोग केवल @ ट्रांसेक्शन समर्थन के लिए और आईओसी-इंजेक्शन
सर्वोत्तम अभ्यास कहता है कि मुझे अपने दास का उपयोग करने के लिए एक सेवा लिखनी है, और सेवा में सभी लेनदेन प्रबंधन रखना है।
लेकिन मैं साकार कर रहा हूँ कि बहुत बहुत बार, सेवा परत केवल दाव तरीकों को दोहराने, उदाहरण के लिए इतना:
// a DAO example
@Repository
public class CustomerHibernateDAO extends BaseHibernateDAO implements CustomerDAO {
public List<Customer> findAllCustomerILikeName(String name){
return getSession()
.createCriteria(Customer.class)
.add(Restriction.ilike("name", name))
.list();
}
}
// Customer service to use this dao...
@Service
@Transactional
public class CustomerService {
@Autowired
CustomerDAO customerDAO;
// Why i can't call DAO instead the service?
public List<Customer> getAllCustomersByName(String name){
return customerDAO.findAllCustomerILikeName(name);
}
}
यह सेवा परत की एक खदान tipical उपयोग है ... हाइबरनेट db-नास्तिक है, वसंत टेक्नोलॉजी-अज्ञेयवादी हैं: तो, मुझे वास्तव में इसकी आवश्यकता है?
सभी डीएओ का प्रबंधन करने के लिए एक अद्वितीय सेवा वर्ग के बारे में क्या ?? मुझे लगता है कि यह एक अच्छा समझौता हो सकता है, या, एक बुरा अभ्यास है?
मैं जानता हूँ कि डीएओ पर @Transactional डाल एक बुरा तरीका है, लेकिन इस समय मैं केवल उस पर @Transactional डाल के लिए सेवाएं लिखने के लिए ...
संपादित
अधिक के बारे में infos है मेरी एप्लिकेशन।
मेरा आवेदन एक प्रबंधन सॉफ्टवेयर है और उपयोगकर्ता पंजीकरण, उत्पाद, आदेश और अन्य चीजों को प्रबंधित करता है। प्रैक्टिस में इसमें बहुत सी पढ़ी गई इकाई-> संपादित करें-> इकाई को सहेजें या बनाएं-> संपादित करें-> ऑपरेशन सहेजें, और, हाइबरनेट के लिए धन्यवाद, इन परिचालनों को अधिकांश समय में एक दाओ द्वारा प्रबंधित किया जाता है, क्योंकि @manyto के साथ हाइबरनेट ... संग्रह और cascade.save_update एक ही लगातार संचालन में दो या दो से अधिक इकाइयों को बचाने के लिए अनुमति देता है।
तो, उदाहरण के लिए, मेरे आइटम में JFrame मैं जहां सम्मिलित कर सकते हैं, संपादित करें या किसी आइटम को बनाने (बेचने के लिए एक उत्पाद) देखते हैं:
public ItemFrame(){
// the constructor
itemService=springAppContext.getBeans(ItemService.class);
}
public boolean validateForm(){
// test if the gui is correctly filled by user
}
public boolean save(){
// create an Item entity taking value from swing gui(JTextField etc)
Item item=new Item();
item.setName(nameTextField.getText());
item.setEtc...
// ItemService ' save method is a wrap around itemDao.save(item)...
itemService.save(item);
}
private void saveItemActionPerformed(ActionEvent evt){
// When i press SAVE button
if(validateForm()){
save();
}
}
यह मैं क्या अधिकांश मामलों में है, तो मुझे लगता है कि मैं एनीमिक-डोमेन-एंटीपाटरर्न में गिर गया ...
धन्यवाद।
मेरे हिसाब के लिए इस्तेमाल आप कर रहे हैं किया जा रहा है की अनुमति देता है पर विचार correctly.Services entity.It Wil प्रति होना चाहिए मैं मानक पैटर्न बनाए रखता हूं + यदि डीबी में बदलाव आता है तो आप डीएओ परत, + 1 बीटीडब्ल्यू –
का निर्माण कर रहे हैं यदि डीबी में बदलाव आता है और मैंने सेवाओं का उपयोग नहीं किया है, तो समस्या क्या है? मैं सिर्फ अपने डीएओ का पुनर्निर्माण करूंगा और सब ठीक है ... या नहीं? – blow
मुझे यहां थोड़ा सा विषय मिल रहा है, लेकिन आइटमफ्रेम कन्स्ट्रक्टर में कंटेनर से बीन प्राप्त करने का क्या कारण है? मैं कंटेनर द्वारा बीन इंजेक्शन प्राप्त करने के इस दृष्टिकोण के किसी भी लाभ को नहीं देख सकता। – prasopes