आप उद्देश्य और XSDs के आवेदनों XSDs अपने प्रश्न में डेटासेट के लिए विशिष्ट बनाने के द्वारा प्रतिबंधित है।
XSD एक्सटेंसिबल Scehma Defination के लिए संक्षिप्त रूप है। एक्सएमएल फाइलों को मानकीकृत करने के लिए डब्ल्यू 3 सी द्वारा एक्सएसडी मानकों को परिभाषित किया गया है जिनका उपयोग आप अपने अनुप्रयोगों में कर सकते हैं।
एक उदाहरण के रूप में कहें, आप अपने आवेदन में एक्सएमएल फाइलों का भारी उपयोग कर रहे हैं, जो आप विभिन्न प्रकार के दूरस्थ स्रोतों के साथ आदान-प्रदान कर सकते हैं। ये स्रोत आपको विभिन्न प्रारूपों में एक्सएमएल फाइल भेज सकते हैं। आपके आवेदन में आपको एक्सएमएल फ़ाइल को उचित प्रारूप में प्राप्त करना सुनिश्चित करना होगा ताकि आप XML फ़ाइल पर अपने व्यावसायिक संचालन को आगे बढ़ा सकें। इसलिए आपको उन XML फ़ाइल पर मानकीकरण लागू करने की आवश्यकता है। आपको अपने अंत में स्वीकार्य मानकों के विरुद्ध एक्सएमएल फ़ाइल को सत्यापित करने की आवश्यकता होगी। आपको मानकों के साथ एक्सएमएल की स्कीमा की तुलना करने की आवश्यकता होगी। ये मानक एक्सएसडी फॉर्म में लिखे गए हैं। और आप XSD फ़ाइल में परिभाषित स्कीमा मानकों के विरुद्ध अपनी एक्सएमएल फ़ाइल की स्कीमा को मान्य करेंगे। यह एक्सएसडी फाइलों का वास्तविक उद्देश्य है।
अब आप अपने सवालों का जवाब दे ..
1.) क्या आपको लगता है XSD जानकारी मॉडल के भाग के रूप में होनी चाहिए?
जैसा कि मैं सिर्फ एसआईएस एक्सएसडी फ़ाइल स्कीमा को डेटा नहीं स्टोर करता हूं। किसी भी एप्लिकेशन में वही तरीका जब आप डेटासेट का उपयोग करते हैं जो वास्तव में रनटाइम पर मेमोरी में डेटा रखता है - उसके पास अपनी स्कीमा भी होगी, वह फॉर्म जिसमें डेटा डेटा होगा। ये अंतर्निहित डेटाटेबल्स और उनके संबंधों के आधार पर भिन्न होता है। तो एमएस लोगों ने TypedDataSets की अवधारणा पेश की। टाइपेडडेटासेट्स - जैसा कि नाम बताता है डेटासेट की योग्य स्कीमा है जिसे आप डेटा के साथ चलाने के लिए रन-टाइम पर उपयोग करने जा रहे हैं। तो TypedDataSets वास्तव में एक्सएसडी फ़ाइल के रूप में परिभाषित किए जाते हैं जो डेटाटेबल्स की स्कीमा और बीच के संबंधों को परिभाषित करता है। इसलिए जब आप विजुअल स्टूडियो में टाइपेडडेटा फ़ाइल बनाते हैं, तो यह मूल रूप से एक एक्सएसडी फ़ाइल बनाता है, जो डेटाबेस तालिका से टाइप की गई सभी तालिकाओं को टाइप किया गया है, का परीक्षण किया जाएगा और प्रत्येक तालिका का मेटाडेटा स्कीमा एक्सएसडी फ़ाइल में बनाया जाएगा। रनटाइम पर जब आप अपने डेटासेट में रिकॉर्ड चुनते हैं, तो आप पहले ही जानते हैं कि उनमें किस प्रकार का डेटा आ रहा है और यदि डेटा एक्सएसडी में परिभाषित रूप में नहीं है तो आपको रनटाइम अपवाद मिलेगा।
फिर भी XSDs क्योंकि दृश्य स्टूडियो XSD.exe tool का उपयोग करके XSD फ़ाइल से tpyed-डाटासेट codebase उत्पन्न कार्यावधि में महत्वपूर्ण भूमिका निभाई नहीं हैं।
2) क्या इसका मतलब यह है कि डेटा एक्सेस लेयर डेटासेट और अन्य जेनरेट की गई वस्तुएं देता है?
यदि आपकी डेटा परत टाइप किए गए डेटासेट का उपयोग कर रही है, तो यह डेटाटेबल्स या डेटारो [], या डेटारो को आपकी आवश्यकता के अनुसार वापस कर देगा।
3) क्या यह यूआई के लिए सभी सिस्टम परतों के माध्यम से जाता है?
आप इसके शीर्ष पर कस्टम व्यावसायिक ऑब्जेक्ट जेनरेट कर सकते हैं जो आपके आवेदन में यहां और वहां डेटासेट ऑब्जेक्ट्स फेंकने की बजाए एक अनुशंसित अभ्यास है।
4) यदि एक्सएसडी डेटा एक्सेस लेयर का हिस्सा है, तो क्या मुझे परिणाम मॉडल से वस्तुओं में परिवर्तित करना चाहिए? सबसे अच्छा कनवर्ट पद्धति क्या है?
प्रतिबिंब का उपयोग कर मैपिंग तंत्र लिखें। हम बिजनेस ऑब्जेक्ट इंस्टेंस और डेटाटेबल्स को बिजनेस ऑब्जेक्ट कलेक्शन में हमारे डेटारो को मैप करते हैं।
आप अपने प्रोजेक्ट को अधिक रखरखाव आर्किटेक्चर के साथ अपस्केल करने के लिए पुनः डिज़ाइनिंग शुरू कर सकते हैं। और निश्चित रूप से इसमें समय और प्रयास लगेगा लेकिन अंततः आपके पास अच्छे परिणाम होंगे।
मेरे पास मेरे प्रोजेक्ट में यही है।
1.) Application.Infrastructure सभी BusinessObjects के लिए
- बेस कक्षाएं, व्यापार विस्तार के तरीकों, सामान्य मान्यता ढांचे के रूप में संग्रह, डेटा का उपयोग कर सकते वर्गों और मेरी कस्टम विशेषताओं और उपयोगिताओं आपत्ति है। यह मेरे अंतिम .NET अनुप्रयोग के समग्र व्यवहार संगठन को निर्धारित करता है।
2.) Application.DataModel
- XSD Typed डाटाबेस के लिए डेटासेट।
- तालिका एडाप्टर लेनदेन और अन्य सुविधाओं को शामिल करने के लिए विस्तारित किए गए हैं जिनकी मुझे आवश्यकता हो सकती है।
3.) Application.DataAccess
- डेटा एक्सेस कक्षाएं।
- वास्तविक स्थान जहां अंतर्निहित टाइप किए गए डेटासेट का उपयोग करके डेटाबेस क्रियाओं की पूछताछ की जाती है।
4.) Application.DomainObjects
- व्यापार वस्तुओं और व्यापार वस्तु संग्रह।
- Enums।
5.) आवेदन।BusinessLayer
- प्रस्तुतिकरण परत से प्रबंधक वर्गों को सुलभ प्रदान करता है।
- HttpHandlers।
- मेरा खुद का पेज बेस क्लास।
- अधिक चीज़ें यहाँ जाती हैं ..
6.) Application.WebClient या Application.WindowsClient
- मेरे प्रस्तुति परत
- Application.BusinessLayer और अनुप्रयोग से संदर्भ लेता है। बिज़नेस ऑब्जेक्ट्स।
Application.BusinessObjects आवेदन भर में उपयोग किया जाता है और वे सभी परतों के पार यात्रा जब भी neeeded [Application.DataModel और Application.Infrastructure को छोड़कर]
मेरे सभी प्रश्नों केवल Application.DataModel परिभाषित कर रहे हैं।
आवेदन। डेटाएप किसी भी डेटा-एक्सेस ऑपरेशन के हिस्से के रूप में व्यवसाय वस्तुओं को वापस लेता है या लेता है। व्यापार वस्तुओं को प्रतिबिंब विशेषताओं की मदद से बनाया जाता है। प्रत्येक व्यावसायिक ऑब्जेक्ट को डेटाबेस में तालिका को लक्षित करने के लिए एक विशेषता मैपिंग के साथ चिह्नित किया जाता है और व्यावसायिक ऑब्जेक्ट के भीतर गुणों को संबंधित डेटा-बेस तालिका में coloumn को लक्षित करने के लिए विशेषता मैपिंग के साथ चिह्नित किया जाता है।
मेरा सत्यापन ढांचा मुझे निर्दिष्ट फ़ील्ड प्रमाणीकरण की सहायता से प्रत्येक फ़ील्ड को मान्य करने देता है।
मेरा फ़्रेमवर्क मैपिंग और सत्यापन जैसे अधिकांश कठिन कार्यों को स्वचालित करने के लिए विशेष रूप से गुणों का उपयोग करता है। मैं ढांचे में नए पहलू के रूप में भी नई सुविधा कर सकते हैं।
एक नमूना व्यापार वस्तु मेरे आवेदन में इस तरह दिखेगी।
User.cs
[TableMapping("Users")]
public class User : EntityBase
{
#region Constructor(s)
public AppUser()
{
BookCollection = new BookCollection();
}
#endregion
#region Properties
#region Default Properties - Direct Field Mapping using DataFieldMappingAttribute
private System.Int32 _UserId;
private System.String _FirstName;
private System.String _LastName;
private System.String _UserName;
private System.Boolean _IsActive;
[DataFieldMapping("UserID")]
[DataObjectFieldAttribute(true, true, false)]
[NotNullOrEmpty(Message = "UserID From Users Table Is Required.")]
public override int Id
{
get
{
return _UserId;
}
set
{
_UserId = value;
}
}
[DataFieldMapping("UserName")]
[Searchable]
[NotNullOrEmpty(Message = "Username Is Required.")]
public string UserName
{
get
{
return _UserName;
}
set
{
_UserName = value;
}
}
[DataFieldMapping("FirstName")]
[Searchable]
public string FirstName
{
get
{
return _FirstName;
}
set
{
_FirstName = value;
}
}
[DataFieldMapping("LastName")]
[Searchable]
public string LastName
{
get
{
return _LastName;
}
set
{
_LastName = value;
}
}
[DataFieldMapping("IsActive")]
public bool IsActive
{
get
{
return _IsActive;
}
set
{
_IsActive = value;
}
}
#region One-To-Many Mappings
public BookCollection Books { get; set; }
#endregion
#region Derived Properties
public string FullName { get { return this.FirstName + " " + this.LastName; } }
#endregion
#endregion
public override bool Validate()
{
bool baseValid = base.Validate();
bool localValid = Books.Validate();
return baseValid && localValid;
}
}
BookCollection.cs
/// <summary>
/// The BookCollection class is designed to work with lists of instances of Book.
/// </summary>
public class BookCollection : EntityCollectionBase<Book>
{
/// <summary>
/// Initializes a new instance of the BookCollection class.
/// </summary>
public BookCollection()
{
}
/// <summary>
/// Initializes a new instance of the BookCollection class.
/// </summary>
public BookCollection (IList<Book> initialList)
: base(initialList)
{
}
}
प्रयास के लिए धन्यवाद :) – Ronny