2009-07-15 6 views
6

मैं ऐसे एप्लिकेशन पर काम कर रहा हूं जिसमें हम जितना संभव हो सके चिंता का पृथक्करण रखने के लिए कड़ी मेहनत कर रहे हैं। हम पाते हैं कि सुरक्षा की क्रॉस-कटिंग चिंता कई जटिलताओं को बनाती है।एओपी और UI तत्वों के लिए सुरक्षा लागू करना

हालांकि, ऐसा लगता है कि इन्हें विशेषताओं और पहलू-ओरिएंटेड प्रोग्रामिंग का उपयोग करके कम किया जा सकता है।

मैं इसे डोमेन लेयर कोड के पहलुओं को लागू करने तक समझता हूं, लेकिन यदि आप इसे UI तत्वों पर लागू करना चाहते हैं तो क्या होगा? उदाहरण के लिए, यदि मैं किसी बटन को प्रदर्शित नहीं करना चाहता हूं तो उपयोगकर्ता को उस कार्यक्षमता को निष्पादित करने की अनुमति नहीं है?

हमारे MVC आवेदन में, इस समय हमारे पास लिखने के लिए (छद्म कोड इस प्रकार) होगा:

<% if (user.CanSeeSomeData) { <%=Html.TextBox("MyTextBox") } %> 

लेकिन हम गुण एक ला AOP यदि संभव हो तो साथ प्रदर्शन को नियंत्रित करना चाहते हैं।

कोई विचार?

इसके अलावा, यदि तीसरे पक्ष हैं, तो ओपन-सोर्स टूल्स उपयोगी होंगे, उन सुझावों का स्वागत है।

उत्तर

1

मैं कहूंगा कि एक दृश्य में अधिक प्रोग्रामिंग (या कुछ भी नहीं) होना चाहिए। एओपी (या ला एओपी) का उपयोग ऐसे स्थान पर जहां पी प्रतिबंधित है, अच्छा नहीं लग रहा है।

चलिए इसे एक अलग तरीके से डिजाइन करते हैं। आम तौर पर विचारों में बुनियादी सामग्री करने के लिए कुछ नियंत्रण कीवर्ड होते हैं: शर्तें और लूप। अधिक बुद्धि और मैं कहूंगा कि आप वहां नियंत्रक भूमिका मिश्रण कर रहे हैं।

तो if (user.CanSeeSomeData) यदि आप वास्तव में एक साधारण झंडा है तो आप वहां डाल दें। इस तरह विचार होना चाहिए।

जब आप मॉडलव्यू ऑब्जेक्ट (कंटेनर जहां आप दृश्य के लिए जानकारी डालते थे) बना रहे थे। उदाहरण के लिए आप उस संपत्ति में एक अच्छी विशेषता के साथ उस जानकारी को प्रारंभ/सेट करने के लिए AOP का उपयोग कर सकते थे।

आप "भारतीय विदेश सेवा"

[UserCanSeeData] 
<%=Html.TextBox("MyTextBox") %> 

यह वाक्यात्मक चीनी, नहीं असली AOP तरह लग रहा है के बजाय विशेषताओं के लिए कह सकते हैं। यह कहने का कोई भी प्रयास है कि UserCanSeeData में एक से अधिक होना चाहिए (जैसे उपयोगकर्ता निजीकृत जांचने के लिए डेटाबेस एक्सेस), नियंत्रक कोड को दृश्य में स्थानांतरित करने का प्रयास है।

+0

प्रतिक्रिया, भरोसेमंद के लिए धन्यवाद। तो, क्या आप कह रहे हैं कि विशेषता दृष्टिकोण ठीक है, लेकिन नियंत्रक/व्यूमोडेल में किया जाना चाहिए, या आप यह कह रहे हैं कि अगर कथन यह करने का तरीका है * ["यह तरीका विचार होना चाहिए"] * – jlembke

+0

इसके अलावा, आप इसे ViewModel में कैसे पूरा करेंगे? मैं एक संपत्ति पर एक विशेषता डाल सकता हूं लेकिन यह फॉर्म आइटम को दिखाने/छिपाने/अक्षम करने में अनुवाद नहीं करता है। क्या आप कह रहे हैं कि मुझे * नियंत्रण को छिपाने की कोशिश नहीं करनी चाहिए, लेकिन व्यूमोडेल/कंट्रोलर में केवल एक्सेस उल्लंघन को संभालना चाहिए? – jlembke