.net - Different versions of the same entity type (any ORM) for different roles/authorization levels -


उदाहरण के लिए, पर विचार करें:

  सार्वजनिक इंटरफ़ेस इस्ताफ {पूर्णनाम नाम {get; सेट; } ईमेल पता / ईमेल पता सेट; } सोशल इंश्योरेंसआईडी एसएसएन {प्राप्त करें; सेट; } सकारात्मक आयु {जाओ; सेट; } पता home_address {get; सेट; }}  

कुछ उपयोगकर्ताओं के लिए, व्यूमोल्ड को केवल नाम और email_address की आवश्यकता होगी। दूसरों के पास एक व्यू-मॉडल हो सकता है जिसमें उन गुणों से अधिक ssn , age और home_address शामिल होता है। मान लीजिए कि एक सांख्यिकीविद् भी है, जिसका दृष्टिकोण उम्र और home_address । अब, मैं इसे IStaffBasic में विभाजित कर सकता हूं , IStaffDetails , और IStaffStats को उपयुक्त दृश्य के लिए दिए गए व्यू मॉडेल में एपीआई को सीमित करने के लिए इंटरफ़ेस वंशानुक्रम के साथ।

हालांकि, जब यह इकाई है तार में डेटा सेवा से प्राप्त किया गया है, इसमें अभी भी अतिरिक्त विवरण शामिल होगा, जो घटित नहीं होना चाहिए।

तो, यह बेहतर होगा कि
(ए) प्रत्येक के लिए पूरी तरह से भिन्न इकाई प्रकार बनाएं इन संस्करणों में, प्रत्येक प्रकार के लिए अतिरिक्त अतिरिक्त डुप्लिकेट क्वेरी ऑपरेशंस के साथ सर्विस लेयर एपीआई को कुछ हद तक प्रदूषित किया जाता है, या (बी) हमेशा एक कर्मचारी इकाई वापस आती है, लेकिन (1) उन्हें सेवा से वापस सेवा में प्राधिकरण चेक पर आधारित बहिष्कृत गुणों के साथ सेट किए गए गुणों पर सेट और (2) ऊपर वर्णित व्यू मॉडेल्स के भीतर सीमित इंटरफेस का उपयोग करें, या (सी) बहुत सुरुचिपूर्ण पैटर्न या एस का उपयोग करें मैंने जो विचार नहीं किया है, लेकिन जिस बारे में आप मुझे बताने जा रहे हैं

विकल्प A को व्यू-मॉडल स्तर पर क्लीनर लगता है, लेकिन सेवा एपीआई गंदा होने वाला है। ऑप्शन बी सर्वर पर हैंडलिंग इकाई की जटिलता को जोड़ते हुए लगता है, लेकिन खुले बंद किए गए सिद्धांत के बेहतर अनुपालन।

विचार?

प्रोजेक्शन एक रास्ता है - विकल्प ए और बी को संयोजित करें।

आपका ORM केवल एक इकाई प्रकार के साथ इंटरैक्ट करना चाहिए, < कोड> कर्मचारी , इसलिए आपको केवल एक मैपिंग, प्रश्नों, और आगे के एक सेट को बनाए रखने (और विस्तार) करना है।

हालांकि, आप प्रत्येक सुरक्षा के लिए उपयुक्त विभिन्न वर्ग भी बना सकते हैं परिदृश्य ( IStaffBasic , IStaffDetails , आदि), उन में कर्मचारी उदाहरण प्रोजेक्ट करें, और तार पर अनुमानित वस्तुओं को वापस लौटाएं:

कुछ ORM फ़्रेमवर्क सुविधा के रूप में प्रक्षेपण का समर्थन करते हैं, लेकिन यदि आवश्यकता हो, तो आप इसे अपने सर्विस लेयर में मैन्युअल रूप से कर सकते हैं।


Comments

Popular posts from this blog

c++ - QtQuick: QQmlApplicationEngine failed to load component qrc:/main.qml:23 Invalid attached object assignment -

sql - dynamically varied number of conditions in the 'where' statement using LINQ -

iphone - Smoothing a rounded stroke in Core Graphics -