আমি জানি যে ওওপি ডেটা এবং আচরণকে একত্রে আবদ্ধ করার বিষয়ে, তবে আমি মনে করি না যে কোনও চিত্রের ক্ষেত্রে এই ক্ষেত্রে পুনরায় আকার দেওয়ার যুক্তি এম্বেড করা ভাল ধারণা, কারণ কোনও চিত্র নিজেকে কীভাবে পুনরায় আকার দেবে তা জানার দরকার নেই একটি ছবি.
একটি থাম্বনেইল আসলে একটি আলাদা চিত্র। সম্ভবত আপনার একটি ডেটাস্ট্রাকচার থাকতে পারে যা কোনও ফটোগ্রাফের সাথে সম্পর্ককে ধরে রাখে এবং এটি থাম্বনেইল (যা উভয়ই চিত্র)।
আমি আমার প্রোগ্রামগুলিকে জিনিসগুলিতে (যেমন চিত্র, ফটোগ্রাফ, থাম্বনেইলস, ইত্যাদি) এবং পরিষেবাদিতে (যেমন ফটোগ্রাফের সংরক্ষণাগার, থাম্বনেইল জেনারেটর ইত্যাদি) বিভক্ত করার চেষ্টা করি। আপনার ডেটা স্ট্রাকচারগুলি সঠিকভাবে পান এবং তারপরে পরিষেবাগুলি সংজ্ঞায়িত করুন যা আপনাকে সেই ডেটা স্ট্রাকচারগুলি তৈরি, হেরফের, রূপান্তর, অবিরাম এবং পুনরুদ্ধার করতে দেয়। সেগুলি সঠিকভাবে তৈরি করা হয়েছে এবং যথাযথভাবে ব্যবহৃত হয়েছে তা নিশ্চিত করার চেয়ে আমি আমার ডেটা স্ট্রাকচারগুলিতে আর কোনও আচরণ রাখি না।
অতএব, না, কোনও থাম্বনেইল কীভাবে তৈরি করা যায় সে সম্পর্কে কোনও যুক্তিতে যুক্তি থাকা উচিত নয়। একটি থাম্বনেইল জেনারেটর পরিষেবা থাকা উচিত যার একটি পদ্ধতি রয়েছে:
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;
}
}
}
... আপনি অলস মূল্যায়ন সহ কোনও ডেটা কাঠামো চান এমন ক্ষেত্রে। (দুঃখিত, আমি আমার নাল চেকগুলি অন্তর্ভুক্ত করি নি এবং আমি এটি থ্রেড-নিরাপদ করে তুলিনি, যা আপনি চাইলে এমন কিছু যা আপনি যদি একটি পরিবর্তনীয় ডেটা কাঠামো নকল করার চেষ্টা করছিলেন)।
আপনি দেখতে পাচ্ছেন যে, এই ক্লাসগুলির কোনওটি কোনও এক ধরণের ফটোগ্রাফারোপোজিটরি দ্বারা নির্মিত হয়েছে, সম্ভবত এটি একটি থাম্বনেল জেনারেটরের রেফারেন্স রয়েছে যা এটি নির্ভরতা ইনজেকশনের মাধ্যমে পেয়েছিল।