मैं अगर मैं अपनी परियोजनाओं में से एक के सॉफ्टवेयर वास्तुकला बदलना चाहिए सोच रहा हूँ।क्या विरासत कार्यक्षमता को खाली करने का अच्छा अभ्यास है जिसका उपयोग नहीं किया जाएगा?
मैं एक परियोजना के लिए सॉफ्टवेयर विकसित कर रहा हूं जहां दो पक्ष (वास्तव में एक मेजबान और एक डिवाइस) साझा कोड का उपयोग करते हैं। इससे मदद मिलती है क्योंकि साझा डेटा, उदा। enums एक केंद्रीय जगह में संग्रहीत किया जा सकता है।
मैं डिवाइस और मेजबान के बीच डेटा स्थानांतरित करने के लिए जिसे "चैनल" कहता हूं उसके साथ काम कर रहा हूं। प्रत्येक चैनल को डिवाइस और मेजबान पक्ष पर लागू किया जाना है। हमारे पास विभिन्न प्रकार के चैनल, सामान्य और विशेष चैनल हैं जो माप डेटा स्थानांतरित करते हैं।
मेरे वर्तमान समाधान एक सार आधार वर्ग में साझा कोड है। वहां से कोड दोनों तरफ के बीच विभाजित है। चूंकि यह निकला है कि कुछ मामले हैं जब हम कोड साझा करते थे लेकिन हम इसे साझा नहीं कर सकते हैं, हमें इसे प्रत्येक तरफ लागू करना होगा।
डीआरवाई का सिद्धांत (स्वयं को दोहराना न करें) कहता है कि आपके पास कोड दो बार नहीं होना चाहिए।
मेरे सोचा अब जैसे की कार्यक्षमता को श्रेणीबद्ध करने के लिए था डिवाइस कोड पर सार माप माप चैनल और मेजबान पक्ष साझा कोड के साथ एक सार वर्ग में। इसका मतलब है कि एक बार जब हम उस चैनल के लिए डिवाइस या मेजबान पक्ष के लिए एक वास्तविक कक्षा बनाते हैं तो हमें दूसरी तरफ उपयोग की जाने वाली कार्यक्षमता को छिपाना होगा।
public abstract class ChannelAbstract
{
protected void ChannelAbstractMethodUsedByDeviceSide() { }
protected void ChannelAbstractMethodUsedByHostSide() { }
}
public abstract class MeasurementChannelAbstract : ChannelAbstract
{
protected void MeasurementChannelAbstractMethodUsedByDeviceSide() { }
protected void MeasurementChannelAbstractMethodUsedByHostSide() { }
}
public class DeviceMeasurementChannel : MeasurementChannelAbstract
{
public new void MeasurementChannelAbstractMethodUsedByDeviceSide()
{
base.MeasurementChannelAbstractMethodUsedByDeviceSide();
}
public new void ChannelAbstractMethodUsedByDeviceSide()
{
base.ChannelAbstractMethodUsedByDeviceSide();
}
}
public class HostMeasurementChannel : MeasurementChannelAbstract
{
public new void MeasurementChannelAbstractMethodUsedByHostSide()
{
base.MeasurementChannelAbstractMethodUsedByHostSide();
}
public new void ChannelAbstractMethodUsedByHostSide()
{
base.ChannelAbstractMethodUsedByHostSide();
}
}
अब, DeviceMeasurementChannel
केवल डिवाइस पक्ष के लिए कार्यक्षमता MeasurementChannelAbstract
से उपयोग कर रहा है:
करने के लिए इस एक स्वीकार्य बात है। सभी तरीकों में घोषित करने से/MeasurementChannelAbstract के सदस्यों protected
आप new
कीवर्ड का उपयोग करने के लिए है बाहर से पहुँचा जा सकता है कि कार्यक्षमता को सक्षम करने।
क्या यह स्वीकार्य है या क्या कोई नुकसान, चेतावनी इत्यादि हैं जो कोड का उपयोग करते समय बाद में उत्पन्न हो सकती हैं?
आपने कई स्थानों पर कहा है कि वे कोड साझा करते हैं और फिर कई अन्य स्थानों पर आपको कुछ अलग करना पड़ता है? उनके बीच वास्तव में क्या साझा किया जाता है जो आपको अलग करने के लिए रोक देता है? –
@ जोन केज: फिलहाल (उपरोक्त उदाहरण में स्वयं आर्किटेक्चर को बदलने से पहले) मेरे पास डिवाइस मापन ChannelAbstract और HostMeasurementChannelAbstract है। डिवाइस पक्ष के लिए एक और मेजबान पक्ष के लिए एक। दोनों चैनल डिवाइसChannelAbstract और HostChannelAbstract से क्रमशः प्राप्त होते हैं। इन दो को एक साझा अमूर्त वर्ग से प्राप्त किया जाता है जिसे चैनल एबस्ट्र कहा जाता है। अब मेरे पास दो चर हैं जिनके सभी माप चैनलों को सामान्य चैनल नहीं होना चाहिए। यही समस्या है। उम्मीद है कि इससे आपको भ्रमित करने की तुलना में यह स्पष्ट किया गया है: एस –