যেহেতু এটি ডেটা অ্যাক্সেস লেয়ারের একটি ডেটা অবজেক্ট তাই এটি সরাসরি একটি ডাটাবেস পরিষেবার উপর নির্ভর করে। আপনি কনস্ট্রাক্টরের জন্য একটি ডাটাবেস সার্ভিস নির্দিষ্ট করতে পারেন:
DataObject dataObject = new DataObject(new DatabaseService());
dataObject.Update();
তবে, ইঞ্জেকশনটি কনস্ট্রাক্টরে থাকতে হবে না। বিকল্পভাবে, আপনি প্রতিটি CRUD পদ্ধতির মাধ্যমে নির্ভরতা সরবরাহ করতে পারেন। আমি এই পদ্ধতির আগেরটির চেয়ে পছন্দ করি কারণ আপনার ডেটা অবজেক্টটি এটি জানা দরকার না যতক্ষণ না আপনি আসলে এটি চালিয়ে যাওয়ার প্রয়োজন না থাকে।
DataObject dataObject = new DataObject();
dataObject.Update(new DatabaseService());
আপনি অবশ্যই CRUD পদ্ধতিতে নির্মাণটি আড়াল করতে চান না !
public void Update()
{
// DON'T DO THIS!
using (DatabaseService dbService = new DatabaseService())
{
...
}
}
বিকল্প বিকল্প হ'ল একটি অতিশ্রয়ী বর্গ পদ্ধতির মাধ্যমে ডেটাবেসস সার্ভিস নির্মাণ করা।
public void Update()
{
// GetDatabaseService() is protected virtual, so in unit testing
// you can subclass the Data Object and return your own
// MockDatabaseService.
using (DatabaseService dbService = GetDatabaseService())
{
...
}
}
একটি চূড়ান্ত বিকল্প হ'ল সিঙ্গলটন-স্টাইলের সার্ভিস লোকেশন ব্যবহার করা। যদিও আমি এই বিকল্পটি অপছন্দ করি, এটি ইউনিট পরীক্ষামূলক।
public void Update()
{
// The ServiceLocator would not be a real singleton. It would have a setter
// property so that unit tests can swap it out with a mock implementation
// for unit tests.
using (DatabaseService dbService = ServiceLocator.GetDatabaseService())
{
...
}
}