বাহ, বিশ্বাস করতে পারছেন না যে জোল এর পক্ষে হবে:
var svc = new ShippingService(new ProductLocator(),
new PricingService(), new InventoryService(),
new TrackingRepository(new ConfigProvider()),
new Logger(new EmailLogger(new ConfigProvider())));
এটার উপরে:
var svc = IoC.Resolve<IShippingService>();
অনেক লোক বুঝতে পারে না যে আপনার নির্ভরশীলতা শৃঙ্খলা বাসা বাঁধতে পারে এবং এগুলি ম্যানুয়ালি তারে চাপিয়ে দেওয়া অযৌক্তিক হয়ে যায়। এমনকি কারখানাগুলির সাথেও, আপনার কোডটির সদৃশ এটি উপযুক্ত নয়।
আইওসি পাত্রে জটিল হতে পারে, হ্যাঁ। তবে এই সাধারণ ক্ষেত্রে আমি এটি অবিশ্বাস্যভাবে সহজ দেখিয়েছি।
ঠিক আছে, এর আরও আরও ন্যায়সঙ্গত করা যাক। ধরা যাক আপনার কিছু সত্ত্বা বা মডেল অবজেক্ট রয়েছে যা আপনি একটি স্মার্ট UI তে আবদ্ধ করতে চান। এই স্মার্ট ইউআই (আমরা এটি শিন্ডোস মর্মস বলব) আপনি INotifyPropertyChanged প্রয়োগ করতে চান যাতে এটি ট্র্যাকিং পরিবর্তন করতে পারে এবং সেই অনুযায়ী ইউআই আপডেট করতে পারে।
"ঠিক আছে, এটি এত কঠিন শোনায় না" তাই আপনি লিখতে শুরু করুন।
আপনি এটি দিয়ে শুরু করুন:
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime CustomerSince { get; set; }
public string Status { get; set; }
}
..এবং দিয়ে শেষ এই :
public class UglyCustomer : INotifyPropertyChanged
{
private string _firstName;
public string FirstName
{
get { return _firstName; }
set
{
string oldValue = _firstName;
_firstName = value;
if(oldValue != value)
OnPropertyChanged("FirstName");
}
}
private string _lastName;
public string LastName
{
get { return _lastName; }
set
{
string oldValue = _lastName;
_lastName = value;
if(oldValue != value)
OnPropertyChanged("LastName");
}
}
private DateTime _customerSince;
public DateTime CustomerSince
{
get { return _customerSince; }
set
{
DateTime oldValue = _customerSince;
_customerSince = value;
if(oldValue != value)
OnPropertyChanged("CustomerSince");
}
}
private string _status;
public string Status
{
get { return _status; }
set
{
string oldValue = _status;
_status = value;
if(oldValue != value)
OnPropertyChanged("Status");
}
}
protected virtual void OnPropertyChanged(string property)
{
var propertyChanged = PropertyChanged;
if(propertyChanged != null)
propertyChanged(this, new PropertyChangedEventArgs(property));
}
public event PropertyChangedEventHandler PropertyChanged;
}
এটি ঘৃণ্য নদীর গভীরতানির্ণয় কোড, এবং আমি বজায় করছি যে আপনি যদি হাতের মতো কোডটি লিখে থাকেন তবে আপনি নিজের ক্লায়েন্টের কাছ থেকে চুরি করছেন । কাজের আরও ভাল, স্মার্ট পদ্ধতি রয়েছে।
এই শব্দটি কি কখনও শুনবেন, কাজটি আরও স্মার্ট, শক্ত নয়?
আচ্ছা কল্পনা করুন আপনার দলের কোনও স্মার্ট লোক এসে বলল: "এখানে একটি সহজ উপায়"
আপনি যদি নিজের সম্পত্তিগুলিকে ভার্চুয়াল করে তোলেন (শান্ত হোন, এটি কোনও চুক্তির চেয়ে বড় কিছু নয়) তবে আমরা সেই সম্পত্তি আচরণে স্বয়ংক্রিয়ভাবে বুনতে পারি । (এটি এওপি বলা হয়, তবে নামটি নিয়ে চিন্তা করবেন না, এটি আপনার জন্য কী করবে সেদিকে মনোনিবেশ করুন)
আপনি কোন আইওসি সরঞ্জামটি ব্যবহার করছেন তার উপর নির্ভর করে আপনি এমন কিছু করতে পারেন যা দেখায়:
var bindingFriendlyInstance = IoC.Resolve<Customer>(new NotifyPropertyChangedWrapper());
সমকামী! আইএনটিফাইপ্রোপার্টি চেঞ্জড বিএসের সমস্ত ম্যানুয়ালই এখন স্বয়ংক্রিয়ভাবে আপনার জন্য প্রশ্নাবলীর অবজেক্টের প্রতিটি ভার্চুয়াল সম্পত্তি সেটারে তৈরি হয়।
এই যাদু কি? হ্যাঁ ! আপনি যদি এই কোডটি তার কাজটি করে এমনটি বিশ্বাস করতে পারেন তবে আপনি সেই সম্পত্তি মোমবো-জাম্বো মোড়কে নিরাপদে এড়িয়ে যেতে পারেন। আপনার ব্যবসায়ের সমস্যার সমাধান করতে হবে।
এওপি করতে আইওসি সরঞ্জামের আরও কয়েকটি আকর্ষণীয় ব্যবহার:
- ঘোষিত এবং নেস্টেড ডাটাবেস লেনদেন
- কাজের ঘোষণাযুক্ত এবং নেস্টেড ইউনিট
- লগিং
- প্রাক / পোস্ট শর্তাদি (চুক্তি অনুসারে নকশা করা)