यह कुछ हद तक अमूर्त प्रश्न होगा।तालिका, उसके लेआउट और उसके रिकॉर्ड मॉडलिंग करते समय मैं कोड डुप्लिकेशन से कैसे बचूं, जिनमें से सभी समान संरचना को साझा करते हैं?
मैं डेटा एक्सेस लेयर फ्रेमवर्क पर काम कर रहा हूं जिसे किसी तालिका, इसके सार स्कीमा/लेआउट और कंक्रीट टेबल रिकॉर्ड्स के बीच अंतर करने की आवश्यकता है। मुझे डर है कि इस भेद के कारण, बहुत अधिक कोड डुप्लिकेशन होगा। मुझे इससे बचने के तरीकों पर कुछ इनपुट की आवश्यकता हो सकती है।
+-----------+
| Foo |
+-----------+
| +Id: Guid |
+-----------+
ध्यान दें कि यह चित्र इनमें से किसी भी वर्णन कर सकता है: एक मेज स्कीमा, एक ठोस तालिका, या एक ठोस तालिका रिकॉर्ड, प्रकार Guid
के साथ एक क्षेत्र Id
रही है।
- स्कीमा में जो कुछ भी जाना जाता है वह फ़ील्ड का नाम और प्रकार है।
- कंक्रीट (खुली) तालिका में, फ़ील्ड का "कॉलम इंडेक्स" अतिरिक्त रूप से जाना जाता है।
- रिकॉर्ड के साथ, इन सभी चीजों को जाना जाता है, साथ ही फ़ील्ड का ठोस मूल्य होता है।
इसे कोड में अनुवादित करने के लिए, मुझे बहुत सारे प्रकार (तीन जोड़े में) मिलेंगे। उदाहरण संक्षेप में रखने के लिए मैं इंटरफेस का उपयोग करूंगा; मैं क्या दिखाना चाहते हैं प्रकार की समानता है:
// these interfaces only need to be implemented once:
interface ISchemaField<T> { string Name { get; } }
interface ITableField<T> { string Name { get; }
int Index { get; } }
interface IRecordField<T> { string Name { get; }
int Index { get; }
T Value { get; set; } }
// these three interfaces are an example for one entity; there would be
// three additional types for each additional entity.
interface IFooSchema
{
ISchemaField<Guid> Id { get; }
IFooTable Open(IDbConnection dbConnection, string tableName);
}
interface IFooTable
{
ITableField<Guid> Id { get; }
ICollection<IFooRecord> ExecuteSomeQuery();
}
interface IFooRecord
{
IRecordField<Guid> Id { get; }
}
अब मैं एक ठोस डाटा मॉडल में हर इकाई के लिए तीन बहुत समान कार्यान्वयन लिखने के लिए होने से बचने के लिए चाहते हैं। कोड डुप्लिकेशन को कम करने के कुछ संभावित तरीके क्या हैं?
मैं कोड & अधिक पठनीय के कम लाइनों के साथ कोड पीढ़ी (जैसे टी -4) है, जो एक ठीक समाधान होगा के बारे में सोचा है, लेकिन मैं एक "मैन्युअल" कोडित समाधान पसंद करेंगे (यदि वहाँ एक है) कोड।
मैंने एक वर्ग प्रति इकाई बनाने के बारे में सोचा है जो स्कीमा, टेबल और रिकॉर्ड इंटरफ़ेस को एक ही समय में लागू करता है ... लेकिन यह गन्दा लगता है और चिंता के पृथक्करण का उल्लंघन करता है।
आप इकाई की रूपरेखा का उपयोग कर रहे हैं? – TheBoyan
@ बोजन, नहीं। मैं एक एपीआई (ईएसआरआई आर्कऑब्जेक्ट्स) के शीर्ष पर एक कस्टम डीएएल ढांचा तैयार कर रहा हूं जो इकाई फ्रेमवर्क, न ही एनएचबीरनेट द्वारा समर्थित नहीं है, न ही कोई अन्य OR/M मुझे पता है। – stakx
आपकी स्कीमा पर बस एक संक्षिप्त रूप से मुझे आश्चर्य होता है कि तीन स्कीमा इंटरफेस के बीच कोई विरासत क्यों नहीं है? आप उन्हें विरासत के बजाय बस मेटाडेटा डुप्लिकेट करना प्रतीत होता है। –