मैं एक वरिष्ठ डेवलपर के लिए कोड समीक्षा कर रहा हूं और उन्होंने काफी उत्सुक डिजाइन पैटर्न लागू किया है।

public class A : ABase
{
    private ABase aBase { get; }
    public A(A a)
    {
        aBase = a;
    }
    public A () {}
    //loads of stuff depending on aBase being initialised
}

ए () कंस्ट्रक्टर का उपयोग पूरे में किया जाता है, फिर निर्मित ऑब्जेक्ट को ए (ए) कंस्ट्रक्टर में वापस इस तरह से पास किया जाता है

var a = new A();
//a is not usable at this point.
var b = new A(a);
//b is usable.

मेरा प्रश्न: क्या यह एक वैध डिजाइन पैटर्न है? और यदि नहीं, तो एक जूनियर डेवलपर एक वरिष्ठ डेवलपर से कैसे संपर्क करता है जो कोड बेस के लिए कुछ पागल कर रहा है।

4
Izzy 19 अगस्त 2016, 15:27

3 जवाब

सबसे बढ़िया उत्तर

क्या यह एक वैध डिजाइन पैटर्न है?

हां। यह काफी हद तक डेकोरेटर पैटर्न जैसा दिखता है, जहां आप बिना अपनी कक्षा में व्यवहार जोड़ने के लिए कंपोजिशन का उपयोग करते हैं। अपने एपीआई को बहुत सारे उपवर्गों के साथ विस्फोट करना। पैटर्न आपके संदर्भ में उपयुक्त है या नहीं यह बाकी कोड पर निर्भर करता है जो आपने हमें नहीं दिखाया है।

कथन var b = new A(a); को अतिरिक्त व्यवहार के साथ A के मौजूदा उदाहरण को सजाने के लिए कहा जाता है। इसकी तुलना रणनीति पैटर्न से करें जहां आप प्रत्येक क्रमपरिवर्तन के लिए एक नया उपवर्ग बनाते हैं / व्यवहार का संयोजन।

और यदि नहीं, तो एक जूनियर डेवलपर एक वरिष्ठ डेवलपर से कैसे संपर्क करता है जो कोड बेस के लिए कुछ पागल कर रहा है

यह प्रश्न StackOverflow के दायरे से बाहर है। लेकिन अगर मुझे इसका जवाब देना है, तो सही तरीका यह होगा कि आप जितना हो सके पढ़ लें और खुले दिमाग से अपने वरिष्ठ से संपर्क करें।

1
CKing 19 अगस्त 2016, 18:10

मुझे मिलगया। कक्षा को या तो चाहिए:

  1. विरासत का सही ढंग से उपयोग करें, आंतरिक रूप से 'इस' का संदर्भ लें, और निजी ABase संपत्ति और संबंधित निर्माता को हटा दें।

  2. इनहेरिटेंस का उपयोग न करें और A() कंस्ट्रक्टर को हटाते हुए बेस क्लास के इंस्टेंस को इनिशियलाइज़ करने के लिए IoC (हमारे मामले में स्ट्रक्चर मैप) का उपयोग करें।

जहाँ तक उसके पास जाने की बात है, मैं उसके पास गया और उसे ये दो विकल्प दिए... मुझे लगता है कि जब आपके पास उत्तर होगा तो यह बहुत आसान होगा।

1
Izzy 19 अगस्त 2016, 16:29

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

0
rory.ap 19 अगस्त 2016, 15:34