मुझे पता है कि OOP डेटा और व्यवहार को एक साथ जोड़ने के बारे में है, लेकिन मुझे नहीं लगता कि इस मामले में लॉजिक का आकार बदलना एक छवि के लिए एक अच्छा विचार है, क्योंकि एक छवि को यह जानने की आवश्यकता नहीं है कि खुद को आकार देने के लिए कैसे करें एक छवि।
एक थंबनेल वास्तव में एक अलग छवि है। शायद आपके पास एक डेटास्ट्रेक्चर हो सकता है जो एक फोटोग्राफ के बीच संबंध रखता है और यह थंबनेल (दोनों की छवियां हैं)।
मैं अपने कार्यक्रमों को चीजों में विभाजित करने की कोशिश करता हूं (जैसे छवियां, फोटोग्राफ, थंबनेल आदि) और सेवाएं (जैसे फोटोग्राफोग्राफ, थम्बनेलगैनेर, आदि)। अपनी डेटा संरचनाएँ ठीक से प्राप्त करें, और फिर उन सेवाओं को परिभाषित करें जो आपको उन डेटा संरचनाओं को बनाने, हेरफेर करने, बदलने, बनाए रखने और पुनर्प्राप्त करने देती हैं। मैंने यह सुनिश्चित करने की तुलना में अपने डेटा संरचनाओं में कोई अधिक व्यवहार नहीं किया है कि वे ठीक से बनाए गए हैं और उचित रूप से उपयोग किए जाते हैं।
इसलिए, नहीं, एक छवि में तर्क नहीं होना चाहिए कि कैसे एक थंबनेल बनाने के लिए। एक ThumbnailGenerator सेवा होनी चाहिए जिसमें एक विधि हो जैसे:
Image GenerateThumbnailFrom(Image someImage);
मेरी बड़ी डेटा संरचना इस तरह दिख सकती है:
class Photograph : Image
{
public Photograph(Image thumbnail)
{
if(thumbnail == null) throw new ArgumentNullException("thumbnail");
this.Thumbnail = thumbnail;
}
public Image Thumbnail { get; private set; }
}
निश्चित रूप से इसका मतलब यह हो सकता है कि आप प्रयास कर रहे हैं कि आप ऑब्जेक्ट का निर्माण करते समय ऐसा नहीं करना चाहते हैं, इसलिए मैं कुछ इस तरह से भी ठीक पर विचार करूंगा:
class Photograph : Image
{
private Image thumbnail = null;
private readonly Func<Image,Image> generateThumbnail;
public Photograph(Func<Image,Image> generateThumbnail)
{
this.generateThumbnail = generateThumbnail;
}
public Image Thumbnail
{
get
{
if(this.thumbnail == null)
{
this.thumbnail = this.generateThumbnail(this);
}
return this.thumbnail;
}
}
}
... उस मामले में जहां आप आलसी मूल्यांकन के साथ एक डेटा संरचना चाहते हैं। (क्षमा करें, मैंने अपनी अशक्त जाँचों को शामिल नहीं किया है और मैंने इसे थ्रेड-सेफ नहीं बनाया है, जो आप चाहते हैं कि यदि आप एक अपरिवर्तनीय डेटा संरचना की नकल करना चाहते हैं)।
जैसा कि आप देख सकते हैं, इनमें से किसी भी वर्ग का निर्माण किसी तरह के PhotographRepository द्वारा किया जा रहा है, जिसमें संभवतः ThumbnailGenerator का संदर्भ है जो इसे निर्भरता इंजेक्शन के माध्यम से मिला है।