मैं सोलिड सिद्धांतों का अध्ययन कर रहा हूं और इंटरफेस के संबंध में निर्भरता प्रबंधन के बारे में एक प्रश्न पूछता हूं।क्या आपके पास एक इंटरफ़ेस कक्षा पर निर्भर हो सकता है?
किताब मैं पढ़ रहा हूँ से एक उदाहरण (अनुकूली कोड के माध्यम से सी # गैरी मैकलीन हॉल) एक TradeProcessor
वर्ग कि व्यापार डेटा मिलेगा, यह प्रक्रिया से पता चलता है, और डेटाबेस में संग्रहीत। व्यापार डेटा को TradeRecord
नामक कक्षा द्वारा मॉडलिंग किया जाता है। TradeParser
कक्षा TradeRecord
उदाहरण (ओं) में प्राप्त व्यापार डेटा को परिवर्तित करने में संभाल लेगी। TradeProcessor
कक्षा केवल ITradeParser
इंटरफ़ेस का संदर्भ देती है ताकि यह TradeParser
कार्यान्वयन पर निर्भर न हो।
लेखक Parse
विधि (ITradeParser
इंटरफ़ेस में) IEnumerable<TradeRecord>
संग्रह को संसाधित करता है जो संसाधित व्यापार डेटा रखता है। क्या इसका मतलब यह नहीं है कि ITradeParser
अब TradeRecord
कक्षा पर निर्भर है?
क्या लेखक ने ITradeRecord
इंटरफ़ेस बनाने की तरह कुछ नहीं किया है और Parse
ITradeRecord
उदाहरणों का संग्रह लौटाता है? या क्या मुझे कुछ महत्वपूर्ण याद आ रहा है?
कोड यह (TradeRecord
के कार्यान्वयन अप्रासंगिक है तो यह छोड़ दिया जाता है):
TradeProcessor.cs
public class TradeProcessor
{
private readonly ITradeParser tradeParser;
public TradeProcessor(ITradeParser tradeParser)
{
this.tradeParser = tradeParser;
}
public void ProcessTrades()
{
IEnumerable<string> tradeData = "Simulated trade data..."
var trades = tradeParser.Parse(tradeData);
// Do something with the parsed data...
}
}
ITradeParser.cs
public interface ITradeParser
{
IEnumerable<TradeRecord> Parse(IEnumerable<string> tradeData);
}
यह भी ध्यान दें: लेखक इंटरफेस और उनके कार्यान्वयन को एक अलग असेंबली (यानी सीढ़ी पैटर्न) में रखने की वकालत करता है। यदि मैं उस पैटर्न का पालन करता हूं, तो 'ट्रेडरॉर्ड' को दोनों विधानसभाओं में उपस्थित होने की आवश्यकता होगी या मुझे कार्यान्वयन असेंबली से कार्यान्वयन असेंबली (इस प्रकार एक परिपत्र संदर्भ बनाने) में संदर्भ होना होगा। –
वास्तव में ट्रेडरॉर्ड का कार्यान्वयन प्रासंगिक है। यदि यह शुद्ध डेटा क्लास है (केवल किसी भी तर्क के बिना गुण होते हैं), तो उसके लिए इंटरफ़ेस को घुमाने के लिए बहुत अधिक कारण नहीं है। – Evk
मुझे लगता है कि ऐसा इसलिए है क्योंकि ट्रेडरॉर्ड सिर्फ एक साधारण डीटीओ ऑब्जेक्ट है। इस वर्ग के लिए आप एक इंटरफ़ेस बना सकते हैं, लेकिन क्या आप अपने द्वारा बनाए गए हर दूसरे वर्ग के लिए इंटरफेस बनायेंगे? आप अपने ट्रेडरॉर्ड क्लास को अनुबंध के रूप में देख सकते हैं। – MistyK