এখানে একটি সাধারণ দৃশ্য যা আমার সাথে মোকাবিলা করতে সর্বদা হতাশাবোধ করে।
আমার প্যারেন্ট অবজেক্টের সাথে একটি অবজেক্ট মডেল রয়েছে। পিতামাতার মধ্যে কিছু শিশু অবজেক্ট থাকে। এটার মতো কিছু.
public class Zoo
{
public List<Animal> Animals { get; set; }
public bool IsDirty { get; set; }
}
প্রতিটি শিশু অবজেক্টের বিভিন্ন ডেটা এবং পদ্ধতি রয়েছে
public class Animal
{
public string Name { get; set; }
public int Age { get; set; }
public void MakeMess()
{
...
}
}
যখন শিশু পরিবর্তন হয়, এক্ষেত্রে যখন মেকমেস পদ্ধতিটি ডাকা হয় তখন পিতামাতার কিছু মান আপডেট করা দরকার। ধরা যাক যখন অ্যানিম্যালিজের একটি নির্দিষ্ট দোরগোড়ায় কোনও গোলমাল শুরু হয়, তখন চিড়িয়াখানার ইসডার্টি পতাকা সেট করা দরকার।
এই দৃশ্যটি পরিচালনা করার কয়েকটি উপায় রয়েছে (যা আমি জানি)।
1) প্রতিটি প্রাণীর পরিবর্তনের সাথে যোগাযোগের জন্য পিতামাতার চিড়িয়াখানা উল্লেখ থাকতে পারে।
public class Animal
{
public Zoo Parent { get; set; }
...
public void MakeMess()
{
Parent.OnAnimalMadeMess();
}
}
এটি সবচেয়ে খারাপ বিকল্প হিসাবে অনুভব করে যেহেতু এটি প্রাণীটিকে তার প্যারেন্ট অবজেক্টের সাথে সংযুক্ত করে। আমি যদি এমন একটি প্রাণী চাই যা ঘরে থাকে?
2) আরেকটি বিকল্প, আপনি যদি এমন ভাষা ব্যবহার করেন যা ইভেন্টগুলিকে সমর্থন করে (সি # এর মতো) তবে ইভেন্টগুলি পরিবর্তনের জন্য পিতামাতার সদস্যতা নেওয়া।
public class Animal
{
public event OnMakeMessDelegate OnMakeMess;
public void MakeMess()
{
OnMakeMess();
}
}
public class Zoo
{
...
public void SubscribeToChanges()
{
foreach (var animal in Animals)
{
animal.OnMakeMess += new OnMakeMessDelegate(OnMakeMessHandler);
}
}
public void OnMakeMessHandler(object sender, EventArgs e)
{
...
}
}
এটি কাজ করে বলে মনে হচ্ছে তবে অভিজ্ঞতা থেকে বজায় রাখা শক্ত হয়ে যায়। যদি প্রাণীগুলি কখনও চিড়িয়াখানার পরিবর্তন করে তবে আপনাকে পুরানো চিড়িয়াখানায় ইভেন্টগুলি বাতিল করতে হবে এবং নতুন চিড়িয়াখানায় পুনরায় সদস্যতা নিতে হবে। রচনা গাছ আরও গভীর হওয়ার সাথে সাথে এটি আরও খারাপ হয়।
3) অন্য বিকল্পটি হ'ল লজিককে পিতামাতার কাছে নিয়ে যাওয়া।
public class Zoo
{
public void AnimalMakesMess(Animal animal)
{
...
}
}
এটি খুব অপ্রাকৃত বলে মনে হচ্ছে এবং যুক্তির নকল ঘটায়। উদাহরণস্বরূপ, যদি আমার কাছে কোনও বাড়ির অবজেক্ট থাকে যা চিড়িয়াখানার সাথে কোনও সাধারণ উত্তরাধিকার পিতাকে ভাগ করে না ..
public class House
{
// Now I have to duplicate this logic
public void AnimalMakesMess(Animal animal)
{
...
}
}
এই পরিস্থিতিগুলি মোকাবেলার জন্য আমি এখনও ভাল কৌশল খুঁজে পাইনি। আর কি পাওয়া যায়? এটিকে কীভাবে সহজ করা যায়?