मुझे इसे एक उदाहरण के साथ समझाएं। आइए मान लें कि आप क्लासिकल एसक्यूएल दृष्टिकोण का उपयोग कर एक एप्लीकेशन को कार्यान्वित कर रहे हैं। आप रिकॉर्ड खोलते हैं, डेटा बदलते हैं और इसे प्रतिबद्ध करते हैं।
छद्म कोड:
trx = connection.CreateTransaction();
query = connection.CreateQuery("Select * from Employee where id = empid");
resultset = query.Run();
resultset.SetValue("Address_Street", "Bahnhofstrasse");
resultset.SetValue("Address_City", "Zürich");
trx.Commit();
NHibernate के साथ यह कुछ इस तरह दिखेगा:
emp = session.Get<Employee>(empid);
// persistence ignorant 'logic'
emp.Address.Street = "Bahnhofstrasse";
emp.Address.City = "Zürich";
session.Commit();
हठ अज्ञान का अर्थ है कि व्यापार तर्क ही दृढ़ता के बारे में पता नहीं है। या दूसरे शब्दों में, दृढ़ता तर्क से अलग होती है। यह इसे और अधिक पुन: प्रयोज्य बनाता है।
ले जाएँ 'तर्क' एक पुन: प्रयोज्य विधि करने के लिए:
void MoveToZuerichBahnhofstrasse(Employee emp)
{
// doesn't have anything to do with persistence
emp.Address.Street = "Bahnhofstrasse";
emp.Address.City = "Zürich";
}
कोशिश ऐसी पद्धति resultsets का उपयोग कर लिखने के लिए और आप जानते हैं कि हठ अज्ञान है।
Employee emp = new Employee();
MovingService.MoveToZuerichBahnhofstreasse(emp);
Assert.AreEqual("Bahnhofstrasse", emp.Address.Street);
Assert.AreEqual("Zürich", emp.Address.City);
DDD कुछ अलग है:
अपने आश्वस्त नहीं कर रहे हैं, क्योंकि वहाँ से संबंधित सामान की हठ किसी भी निर्भरता नहीं हैं देखते हैं कि कैसे सरल एक इकाई परीक्षण किया जाएगा। वहां आप अपना डोमेन मॉडल पहले (क्लास मॉडल) बनाते हैं और इसके अनुसार डेटाबेस डिज़ाइन बनाते हैं। एनएच के साथ यह बहुत आसान है, क्योंकि - दृढ़ता अज्ञानता के लिए धन्यवाद - आप एक (निश्चित) डेटाबेस मॉडल होने से पहले मॉडल और तर्क का परीक्षण और इकाई परीक्षण कर सकते हैं।
परीक्षण: हम इकाई का उदाहरण बनाकर, डेटाबेस के लिए भंडारण, इसे वापस हो रही है और इसकी तुलना द्वारा मैपिंग परीक्षण कर रहे हैं। यह बहुत सारे प्रतिबिंब के साथ स्वचालित रूप से किया जाता है। लेकिन आपको अब तक जाने की जरूरत नहीं है। किसी इकाई को स्टोर करने का प्रयास करते समय अधिकांश सामान्य त्रुटियां दिखाई देती हैं।
आप प्रश्नों के साथ ऐसा ही कर सकते हैं। जटिल प्रश्न एक परीक्षण के लायक हैं। यदि क्वेरी पूरी तरह से संकलित हो जाती है तो यह सबसे दिलचस्प है। इसके लिए आपको किसी भी डेटा की आवश्यकता नहीं है।
डेटाबेस एकीकरण परीक्षण के लिए, हम Sqlite का उपयोग कर रहे हैं। यह बहुत तेज़ है। एनएच स्कीमाएक्सपोर्ट (प्रत्येक परीक्षण से पहले) का उपयोग कर फ्लाई पर इन-मेमोरी डेटाबेस उत्पन्न करता है।
मैंने अपने उत्तर में परीक्षण के बारे में एक अनुभाग जोड़ा। –
मैं [आर्किटेक्चर: द लॉस्ट इयर्स] (http://www.confreaks.com/videos/759-rubymidwest2011-keynote-architecture-the-lost-years) सुनने के बाद रिपोजिटरी पैटर्न से प्यार में पड़ गया। प्रत्येक गंभीर ऐप को रिपोजिटरी पैटर्न को नियोजित करना चाहिए। – Mario