2010-03-05 4 views
5

मेरे आवेदन में मेरे पास एक ऐसी स्थिति है जहां हमें रिकॉर्ड बनाया गया था और संशोधित किया गया था और उपयोगकर्ता ने उन कार्रवाइयों को कैसे किया था। तो मेरे पास कुछ ऑब्जेक्ट हो सकता है जैसे:अंतिम संशोधित सेटिंग और NHibernate का उपयोग करके संशोधित करने के लिए सबसे अच्छा अभ्यास क्या है?

public class Product 
{ 
    int Id; 
    int Name; 
    DateTime CreatedOn; 
    int CreatedByUserId; 
    DateTime LastModifiedOn; 
    int LastModifiedByUserId; 
} 

एनएचबर्ननेट में इन्हें संभालने के लिए सबसे अच्छा अभ्यास क्या है? here का वर्णन करने वाले कुछ इंटरसेप्टर का उपयोग करके?

उत्तर

1

मुझे नहीं लगता कि वहां एक "सर्वश्रेष्ठ" अभ्यास है, लेकिन घटना श्रोताओं का उपयोग इसके लिए अधिक आम है। http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx

पर एक अच्छा उदाहरण है एक बात आपको विचार करने की आवश्यकता होगी कि आपको उस उपयोगकर्ता को कहीं और स्टोर करने की आवश्यकता है। मैं वर्तमान में स्टार्टअप पर श्रोता पर एक स्थैतिक संपत्ति असाइन करके कर रहा हूं। यह सुंदर नहीं है, लेकिन यह काम पूरा हो जाता है।

+0

किसी भी तरह मुझे लगा कि यह जवाब होगा :) मुझे लगता है कि मैं वास्तव में "सर्वश्रेष्ठ" की तलाश नहीं कर रहा था, लेकिन "अनुशंसित" –

+0

हम कुछ ऐसा करते हैं लेकिन हमारे "ऑडिटर" में 'Func ' पास करते हैं। परीक्षण के लिए हमने अभी यह एक निश्चित मूल्य वापस कर दिया है और उत्पादन में हम एक ऐसे फ़ंक्शन को पास करते हैं जो 'HttpContext.Current.User' –

+0

@Diego Mijelshon Yuck को बुलाता है ... दुर्भाग्य से मुझे लगता है कि मुझे ऐसा करना होगा! – richard

0

मैं डिएगो से सहमत हूं कि मुझे नहीं लगता कि वहां एक सर्वोत्तम अभ्यास है। यह आपके आवेदन संदर्भ पर निर्भर करता है। डिएगो के लिंक में, और दृढ़ता (nHibernate) स्तर पर ईवेंट श्रोताओं का उपयोग करने के लिए, यह जानने की आवश्यकता है कि वर्तमान उपयोगकर्ता को कैसे देखना है। यह आपके आवेदन के आधार पर समझ में नहीं आता है। उदाहरण के लिए, यदि आप एएसपी.नेट एमवीसी ऐप लिख रहे हैं, तो क्या आप वास्तव में चाहते हैं कि आपकी दृढ़ता परत उपयोगकर्ता को जानने के लिए HttpContext पर निर्भर करे? हां, आप किसी प्रकार की रणनीति में गुजर सकते हैं, लेकिन ऐसा लगता है कि यह हमेशा सही काम करने वाला नहीं है।

मुझे लगता है कि यह आपकी सेवा परत वस्तु का निर्माण करने और निर्माता को स्वयं जोड़ने के लिए पूरी तरह से मान्य है। फिर पूरी ऑब्जेक्ट को पास करें, निर्माता पहले ही हाइड्रेटेड हो गया है, नीचे रहने के लिए nHibernate तक। निर्माता को किसी भी अन्य संपत्ति के रूप में डेटाबेस में सहेजा जाएगा।

+0

मेरा ऐप (एएसपी.नेट एमवीसी) भंडारों का उपयोग करके संरचित किया गया है और इस तरह उपयोगकर्ता जानकारी को पास करना दिलचस्प होगा। मैं निश्चित रूप से नहीं चाहता कि रिपो के पास HttpContext का सीधा संदर्भ हो, इसलिए मुझे उस जानकारी को प्रतिष्ठानों को सुंदरता से पास करने का एक तरीका ढूंढने की आवश्यकता होगी। –

+0

आप इसे रणनीति बना सकते हैं; किसी प्रकार का ICurrentUserProvider बनाएं और इसे नियंत्रक/सेवा परत से नीचे पास करें। ICurrentUserProvier के पास एक ऐसे प्रतिनिधि को इंगित करने वाला प्रतिनिधि होगा जो वर्तमान उपयोगकर्ता को हल करने के लिए HttpContext का उपयोग करता है। उस ने कहा, यह अभी भी डीआईपी का उल्लंघन है और यदि संभव हो तो इससे बचा जाना चाहिए। – manu08

+0

मैं आईओसी का उपयोग उस उपयोगकर्ता को इंजेक्ट करने के लिए करता हूं जहां इसकी आवश्यकता होती है, ऑटोफैक में ऐसा कुछ: builder.Register (c => HttpContext.Current.User) .HttpRequestScoped(); – UpTheCreek

संबंधित मुद्दे

 संबंधित मुद्दे