में रीफैक्टरिंग पर मूल प्रश्न यह एक शुरुआती प्रश्न हो सकता है लेकिन क्या व्हील संपत्ति के डुप्लिकेशंस को अमूर्त वर्ग में दोहराए जाने का एक मानक तरीका है, फिर भी पार्ट प्रकार के लिए स्पष्ट कलाकार को अभी भी बनाए रखा है। आइए मान लीजिए कि हमें फास्टकायरहेल को स्लोकर पर डालने से रोकना है, और इस तरह की कई संपत्तियां हैं।एक अमूर्त वर्ग
abstract class Car {}
class FastCar : Car
{
public FastCarWheel Wheel { get; set; }
}
class SlowCar : Car
{
public SlowCarWheel Wheel { get; set; }
}
abstract class WheelPart {}
class FastCarWheel: WheelPart {}
class SlowCarWheel: WheelPart {}
इस प्रकार के परिदृश्य में इस प्रकार के नकल की अनुमति देना आम बात है? मैं जेनेरिकों का उपयोग करने की सोच रहा था, लेकिन ऐसा लगता है कि मैं इस मुद्दे को चारों ओर ले जा रहा हूं, और यह इस तरह से व्यवहार करने वाली प्रत्येक अतिरिक्त संपत्ति के लिए बदतर हो जाता है।
abstract class Car <P>
where P : Part
{
protected abstract P Wheel { get; set; }
}
धन्यवाद
हालांकि यह समस्या है। वह नहीं चाहता कि किसी भी कार के किसी भी प्रकार का पहिया हो। वह फास्टकारों को केवल फास्टविल्स के लिए चाहता है, और स्लोवार्स में केवल स्लोवाइल्स हैं। एक इंटरफ़ेस इसे पूरा नहीं करेगा। – Joseph
यदि फास्टकार में स्लोवायरहेल नहीं हो सकता है, तो वह तर्क FastCar में है, न कि बेस क्लास में। –
मैं सहमत हूं, लेकिन समस्या यह है कि आपका कोड इस के उपयोग को बढ़ावा देगा (fastCar.Wheel = new SlowCarWheel();) जिसे उन्होंने स्पष्ट रूप से कहा था कि वह अनुमति नहीं देना चाहता था। हालांकि, मैं सहमत हूं कि यह तर्क आधार वर्ग में नहीं है। – Joseph