दूसरा तरीका
मेरी कंपनी में, हम गैर-सामान्य निचले स्तर की परियोजनाओं को प्राप्त करने के लिए "परियोजनाओं पर कूद" से बचते हैं। उदाहरण के लिए, हमारी प्रस्तुति / एपीआई परत केवल हमारे डोमेन परत को संदर्भित कर सकती है, और डोमेन परत केवल डेटा परत को संदर्भित कर सकती है।
हालाँकि, यह एक समस्या है, जब ऐसे एनम हैं जिन्हें प्रस्तुतिकरण और डोमेन लेयर्स दोनों द्वारा संदर्भित किए जाने की आवश्यकता है।
यहां समाधान है जिसे हमने (अब तक) लागू किया है। यह एक बहुत अच्छा समाधान है और हमारे लिए अच्छा काम करता है। अन्य उत्तर चारों ओर से घेर रहे थे।
मूल आधार यह है कि एनमों को विरासत में नहीं दिया जा सकता है - लेकिन कक्षाएं कर सकते हैं। इसलिए...
// In the lower level project (or DLL)...
public abstract class BaseEnums
{
public enum ImportanceType
{
None = 0,
Success = 1,
Warning = 2,
Information = 3,
Exclamation = 4
}
[Flags]
public enum StatusType : Int32
{
None = 0,
Pending = 1,
Approved = 2,
Canceled = 4,
Accepted = (8 | Approved),
Rejected = 16,
Shipped = (32 | Accepted),
Reconciled = (64 | Shipped)
}
public enum Conveyance
{
None = 0,
Feet = 1,
Automobile = 2,
Bicycle = 3,
Motorcycle = 4,
TukTuk = 5,
Horse = 6,
Yak = 7,
Segue = 8
}
फिर, एक और उच्च स्तरीय परियोजना में एनमों को "विरासत" देने के लिए ...
// Class in another project
public sealed class SubEnums: BaseEnums
{
private SubEnums()
{}
}
इसके तीन असली फायदे हैं ...
- एनम की परिभाषाएँ स्वचालित रूप से दोनों परियोजनाओं में समान हैं - परिभाषा के अनुसार।
- एनम परिभाषाओं में कोई भी बदलाव दूसरी कक्षा में कोई भी संशोधन किए बिना स्वचालित रूप से दूसरे में प्रतिध्वनित होता है।
- एनम एक ही कोड पर आधारित हैं - इसलिए मूल्यों की तुलना आसानी से की जा सकती है (कुछ कैविटीज़ के साथ)।
पहली परियोजना में एनमों का संदर्भ देने के लिए , आप कक्षा के उपसर्ग का उपयोग कर सकते हैं: बेसइन्यूम्स.टेटस टाइप.पेंडिंग या "स्टैटिक बेसइन्यूम्स का उपयोग करके;" अपने usings के लिए बयान।
में दूसरी परियोजना जब फिर भी विरासत में मिला वर्ग के साथ काम कर, मैं नहीं मिल सका "स्थिर का उपयोग कर ..." काम करने के लिए दृष्टिकोण है, तो "विरासत में मिला enums" के सभी संदर्भ वर्ग के साथ उपसर्ग किया जाएगा, जैसे SubEnums.StatusType.Pending । अगर कोई दूसरी परियोजना में उपयोग किए जाने वाले "स्थिर" दृष्टिकोण का उपयोग करने की अनुमति देने के तरीके के साथ आता है , तो मुझे बताएं।
मुझे यकीन है कि इसे और भी बेहतर बनाने के लिए इसे ट्वीक किया जा सकता है - लेकिन यह वास्तव में काम करता है और मैंने काम करने वाली परियोजनाओं में इस दृष्टिकोण का उपयोग किया है।
अगर आपको यह मददगार लगे तो कृपया इसे अप-वोट करें।