2010-03-25 21 views
9

सवाल मैंने पूछा गया था मैं निम्नलिखित कॉलममेरी साक्षात्कार प्रश्न पर विचार की जरूरत है - .net, सी #

pid - unique identifier 
orderid - varchar(20) 
documentid - int 
documentpath - varchar(250) 
currentLocation - varchar(250) 
newlocation - varchar(250) 
status - varchar(15) 

मैं से फ़ाइलों को स्थानांतरित करने एसी # अनुप्रयोग लिखने के लिए है के साथ एक डेटाबेस तालिका है में से एक नए स्थान पर अद्यतन स्थान और अद्यतन स्थिति कॉलम या तो 'सफलता' या 'विफलता' के रूप में।

यह मेरा जवाब था

  1. LINQ का उपयोग कर

  2. एक कमांड वस्तु जो foreach का उपयोग करके फ़ाइलें चलती

  3. प्रदर्शन किया जाएगा बनाएं सभी रिकॉर्ड की एक सूची बनाएं, एक प्रतिनिधि आह्वान फ़ाइलों को स्थानांतरित करने के लिए -

  4. उपयोग किसी भी अपवाद कब्जा करने के लिए EndInvoke और अद्यतन डाटाबेस accordin Gly

मुझे बताया गया था कि आदेश पैटर्न और प्रतिनिधि यहां बिल के अनुरूप नहीं थे - मुझे लगता है कि और अधिक अनुकूल GOF पैटर्न लागू करने के लिए aksed किया गया था।

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

+9

मैं स्पष्ट रूप से नहीं देखता कि गोफ पैटर्न कैसे लागू होते हैं। यह एक छोटे से 20-लाइन प्रोग्राम की तरह लगता है जिसमें कुछ एसआरओटाइन्स के साथ लिंक से SQL या EF जैसे ORM का उपयोग किया जाता है, और कच्चे ADO.NET में 50 से अधिक पंक्तियां नहीं होती हैं। – Aaronaught

+2

मैं इस पर हारून के साथ हूं, एक महत्वपूर्ण गोफ पैटर्न की मांग करने के लिए काफी सरल लगता है। यदि आपको थोड़ी अधिक जानकारी दी जाती है, जैसे डेटाबेस में आप जिन रिकॉर्ड्स की अपेक्षा कर सकते हैं, तो आप कुछ अच्छे निर्णयों के साथ आ सकते हैं। कमांड + डिलीट विचार एक बहुत सराहनीय साक्षात्कार-शैली समाधान था, यह सवाल अगर मैं खुद ऐसा कह सकता हूं ... – LorenVS

+0

मैंने प्रतिनिधियों का उपयोग किया, क्योंकि मुझे नहीं पता था कि कितने रिकॉर्ड थे और प्रतिनिधियों के साथ मैं आग से जा सकता था और भूल सकता था दिनचर्या – uno

उत्तर

3

मैं इन सबसे छुटकारा ऊपर Aaronaught की टिप्पणी से सहमत हैं। इस तरह की एक समस्या के लिए, कभी-कभी आप इसे ओवरथिंक कर सकते हैं और वास्तव में ऐसा करने की आवश्यकता से कुछ और करने की कोशिश कर सकते हैं।

जिसके अनुसार, एक GOF पैटर्न जो मन में आया था "इटरेटर।" आपके पहले वक्तव्य में, आपने कहा था कि आप सभी रिकॉर्ड्स को एक सूची में पढ़ेंगे। एक चीज जो इसके साथ समस्याग्रस्त हो सकती है यदि आपके पास लाखों रिकॉर्ड हैं। आप शायद पूरी सूची को स्मृति में पढ़ने के बजाय, उन्हें अधिक सफल फैशन में संसाधित करना चाहते हैं। इटरेटर पैटर्न आप अंतर्निहित (डेटाबेस) भंडारण/पुनर्प्राप्ति तंत्र पता करने के लिए बिना सूची पर पुनरावृति करने की क्षमता प्रदान करेगा। इटरेटर के अंतर्निहित कार्यान्वयन एक समय में एक, दस, या एक सौ रिकॉर्ड को पुनः प्राप्त है, और अनुरोध पर व्यापार तर्क करने के लिए उन्हें बाहर दान कर सकता है। यह कुछ परीक्षण लाभ भी प्रदान करेगा, क्योंकि आप एक अलग प्रकार के अंतर्निहित भंडारण (जैसे इन-मेमोरी सूची) का उपयोग करके अपने अन्य "व्यवसाय" तर्क का परीक्षण कर सकते हैं, ताकि आपके यूनिट परीक्षण डेटाबेस से स्वतंत्र हों।

+0

एंडी: क्या आप मुझे किसी भी नमूने के लिए मार्गदर्शन कर सकते हैं जो आपको लगता है कि योग्य है जो आपके सुझाव के अनुसार इटरेटर पैटर्न के उपयोग की व्याख्या करेगा? – uno

+0

मुझे एक नमूना के बारे में पता नहीं है जिसे मैं आपको भी इंगित कर सकता हूं, लेकिन शायद आप इसे आजमाने के लिए कुछ लिख सकते हैं। विकिपीडिया पर "इटरेटर" आलेख पर नज़र डालें, इसके कुछ सामान्य उदाहरण हैं कि एक इटरेटर सामान्य रूप से कैसे कार्यान्वित किया जाता है, और आप इसे अंतर्निहित डेटाबेस लुकअप के लिए वहां से बढ़ा सकते हैं। –

2

पैटर्न की गहरी समझ कुछ ऐसा है जो आपको निश्चित रूप से डेवलपर के रूप में रखना चाहिए - आपको "उपयोग" करने के लिए कौन सा पैटर्न निर्धारित करने के लिए Google पर जाने की आवश्यकता नहीं है क्योंकि आपके पास उस पैटर्न को वास्तव में समझने के लिए पर्याप्त समय नहीं होगा जब आप इसके बारे में पढ़ना शुरू करते हैं और जब आप इसे लागू करते हैं।

पैटर्न अधिकतर बल को समझने और विविधता को समाहित करने के बारे में हैं। यही है, बल कुछ प्रकार के बदलाव पैदा करते हैं और हमने उन प्रकार के विविधता को समाहित करने के तरीकों को अच्छी तरह से समझ लिया है। एक "पैटर्न" यह समझने का एक निकाय है कि किस बल से किस तरह की विविधता होती है और कौन सी विधियों को इन्सापुलेशन सर्वोत्तम तरीके से संबोधित करता है।

मेरे पास एक दोस्त है जो पैटर्न पर एक कोर्स पढ़ रहा था और अचानक उसे मार दिया कि वह अपनी पाठ्यक्रम पुस्तक में हर पैटर्न "(" एन्कापुलटिंग तकनीक को कार्यान्वित करना ") का एक समस्या हल कर सकता है। इसने वास्तव में घर को चलाने में मदद करने का एक अच्छा काम किया है कि सही तकनीक ढूंढना और अधिक महत्वपूर्ण है कि तकनीक को कैसे लागू किया जाए।

कमान पैटर्न, उदाहरण के लिए, एक समझ है कि कभी कभी हम भिन्न करने की जब कुछ होता है चाहते हैं के साथ शुरू होता है। इन मामलों में, हम निर्णय लेने का फैसला करना चाहते हैं कि यह कब करना है इसके निर्णय से क्या करना है। इस उदाहरण में, मुझे कोई संकेत नहीं दिख रहा है कि जब आपका आदेश निष्पादित किया जाना चाहिए बिल्कुल भिन्न होता है।

असल में, मैं वास्तव में कुछ भी नहीं देखता जो भिन्न होता है इसलिए समस्या में कोई पैटर्न नहीं हो सकता है। यदि आपके साक्षात्कारकर्ता कह रहे थे कि वहां कुछ सीखना भी हो सकता है।

कोई भी ... मैं डिजाइन पैटर्न की सिफारिश करता हूं शैलोवे और ट्रॉट द्वारा समझाया गया। आपको गहराई से समझ मिलेगी कि वास्तव में कौन से पैटर्न हैं और वे आपकी नौकरी करने में आपकी सहायता कैसे करते हैं और अगली बार जब वे आपको बताएंगे कि आप गलत पैटर्न का उपयोग कर रहे हैं, तो आप उन्हें शिक्षित करने की स्थिति में हो सकते हैं। ऐसा लगता है कि मेरे लिए बहुत अच्छी तरह से ... लगभग 20% समय लगता है। :)

+0

अधिकतम: क्या आपका मित्र अपनी स्लाइड प्रकाशित करता है? मुझे यह मिला: http://stackoverflow.com/questions/782690/pattern-books-for-c-vb-net-developers Google के बारे में मेरा विचार फीचर इत्यादि के साथ और अधिक करना था, जैसे कि निर्धारित करने की कोशिश करना कुछ लैम्ब्डा अभिव्यक्ति जो किसी और ने पहले से ही अपने ब्लॉग – uno

+0

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

+0

... लेकिन मुझे हमेशा एक उपयुक्त मंच में चर्चा करने में खुशी हुई। याहू देखें! लीनप्रोग्रामिंग समूह; यह शायद पैटर्न के बारे में गहन चर्चा के लिए एक अच्छी जगह होगी। –

0

मैं कहूंगा कि साक्षात्कारकर्ता चाहता था कि आप SOLID ऑब्जेक्ट उन्मुख डिजाइन सिद्धांतों का उपयोग (या उल्लेख) करें, और उस प्रक्रिया में आप कुछ डिज़ाइन पैटर्न का उपयोग कर सकते हैं।

उदाहरण के लिए, हम नीचे एक डिज़ाइन बना सकते हैं जो एसआरपी, ओसीपी और डीआईपी का पालन करता है।

internal interface IStatusRecordsToMove 
{  
    List<IRecord> Records { get; } 
} 

internal interface IRecord 
{ 
    string Status { get; set; } 
} 

internal interface IRecordsMover 
{ 
    ITargetDb TargetDb { get; } 
    void Move(IStatusRecordsToMove record); 
} 

internal interface ITargetDb 
{ 
    void SaveAndUpdateStatus(IRecord record); 
} 

class ProcessTableRecordsToMove : IStatusRecordsToMove 
{ 
    public List<IRecord> Records 
    { 
     get { throw new NotImplementedException(); } 
    } 
} 

internal class ProcessRecordsMoverImpl : IRecordsMover 
{ 
    #region IRecordsMover Members 

    public ITargetDb TargetDb 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public void Move(IStatusRecordsToMove recordsToMove) 
    { 
     foreach (IRecord item in recordsToMove.Records) 
     { 
      TargetDb.SaveAndUpdateStatus(item); 
     } 
    } 

    #endregion 
} 

internal class TargetTableBDb : ITargetDb 
{ 
    public void SaveAndUpdateStatus(IRecord record) 
    { 
     try 
     { 
      //some db object, save new record 
      record.Status = "Success"; 
     } 
     catch(ApplicationException) 
     { 
      record.Status = "Failed"; 
     } 
     finally 
     { 
      //Update IRecord Status in Db 
     } 
    } 
} 
संबंधित मुद्दे