আমি বর্তমানে একটি এন-টিয়ার সমাধান ডিজাইন করছি যা সত্তা ফ্রেমওয়ার্ক 5 (। নেট 4) এর ডেটা অ্যাক্সেস কৌশল হিসাবে ব্যবহার করছে তবে এটি কীভাবে নির্ভরযোগ্যতা ইঞ্জেকশনটিকে পরীক্ষণযোগ্য / নমনীয় করে তুলবে তা সম্পর্কে উদ্বিগ্ন।
আমার বর্তমান সমাধান বিন্যাস নিম্নরূপে রয়েছে (আমার সমাধানটিকে আলকাত্রাজ বলা হয়):
অ্যালকাট্রাজ.উইউবিআইআই : একটি এস্প নেট ওয়েবসাইট ওয়েবফর্ম প্রকল্প, ফ্রন্ট এন্ড ইউজার ইন্টারফেস, আলকাট্রাজ.ব্যসনেস এবং অ্যালকাট্রাজ.ডাটা.মোডেলস সম্পর্কিত প্রকল্পগুলি উল্লেখ করে ।
আলকাট্রাজ.ব্যাজনেস : একটি শ্রেণিকালীন গ্রন্থাগার প্রকল্প, ব্যবসায় যুক্তি যুক্ত করে, আলকাট্রাজ.ডাটা.অ্যাক্সেস , আলকাট্রাজ.ডাটা.মোডেলস
অ্যালকাট্রাজ.ডাটা.অ্যাক্সেস : একটি শ্রেণিবদ্ধ গ্রন্থাগার প্রকল্পে আলকাট্রাজমডেল.এডএমএক্স এবং AlcatrazEntities
ডিবি কনটেক্সট রয়েছে, রেফারেন্স প্রকল্পসমূহ আলকাট্রাজ.ডাটা.মোডেলস ।
অ্যালকাট্রাজ.ডাটা.মোডেলস : একটি শ্রেণিকালীন গ্রন্থাগার প্রকল্পে আলকাট্রাজ মডেলের জন্য পোকো রয়েছে, কোনও উল্লেখ নেই।
এই সমাধানটি কীভাবে কাজ করবে সে সম্পর্কে আমার দৃষ্টিভঙ্গি হ'ল ওয়েব-ইউআই ব্যবসায় লাইব্রেরির মধ্যে একটি সংগ্রহস্থল ইনস্ট্যান্ট করবে, এই সংগ্রহস্থলের সংযোগ স্ট্রিংয়ের (কনস্ট্রাক্টরের মাধ্যমে) নির্ভরতা থাকবে ( AlcatrazEntities
উদাহরণ নয়)। ওয়েব-ইউআই ডাটাবেস সংযোগের স্ট্রিংগুলি জানত, তবে তা নয় যে এটি কোনও সত্তা ফ্রেমওয়ার্ক সংযোগ স্ট্রিং ছিল।
ব্যবসায় প্রকল্পে:
public class InmateRepository : IInmateRepository
{
private string _connectionString;
public InmateRepository(string connectionString)
{
if (connectionString == null)
{
throw new ArgumentNullException("connectionString");
}
EntityConnectionStringBuilder connectionBuilder = new EntityConnectionStringBuilder();
connectionBuilder.Metadata = "res://*/AlcatrazModel.csdl|res://*/AlcatrazModel.ssdl|res://*/AlcatrazModel.msl";
connectionBuilder.Provider = "System.Data.SqlClient";
connectionBuilder.ProviderConnectionString = connectionString;
_connectionString = connectionBuilder.ToString();
}
public IQueryable<Inmate> GetAllInmates()
{
AlcatrazEntities ents = new AlcatrazEntities(_connectionString);
return ents.Inmates;
}
}
ওয়েব ইউআইতে:
IInmateRepository inmateRepo = new InmateRepository(@"data source=MATTHEW-PC\SQLEXPRESS;initial catalog=Alcatraz;integrated security=True;");
List<Inmate> deathRowInmates = inmateRepo.GetAllInmates().Where(i => i.OnDeathRow).ToList();
এই নকশাটি সম্পর্কে আমার কয়েকটি সম্পর্কিত প্রশ্ন রয়েছে।
সত্তা ফ্রেমওয়ার্কের ক্ষমতাগুলির ক্ষেত্রেও এই নকশাটি কী অর্থবোধ করে? আমি শুনেছি যে সত্তা কাঠামোটি ইতিমধ্যে ইউনিট-অফ-ওয়ার্ক প্যাটার্ন ব্যবহার করে, আমি কি অযৌক্তিকভাবে বিমূর্তের অন্য স্তরটি যুক্ত করছি?
আমি চাই না যে আমার ওয়েব-ইউআইটি সত্তা ফ্রেমওয়ার্কের সাথে সরাসরি যোগাযোগ করুন (বা এমনকি এটির জন্য এটি উল্লেখ করুন), আমি চাই ভবিষ্যতে যেমন একই ব্যবসায়ের স্তর ব্যবহার করে একাধিক প্রকল্প থাকবে তেমন ব্যবসায়ের স্তরের মধ্য দিয়ে সমস্ত ডাটাবেস অ্যাক্সেস পেতে পারি (ওয়েব পরিষেবা, উইন্ডোজ অ্যাপ্লিকেশন, ইত্যাদি) এবং আমি একটি কেন্দ্রীয় অঞ্চলে ব্যবসার যুক্তি রেখে এটি বজায় রাখা / আপডেট করা সহজ করতে চাই। এটি অর্জনের জন্য এটি কি উপযুক্ত উপায়?
ব্যবসায়ের স্তরটিতে এমনকি ভান্ডারগুলিও থাকা উচিত, বা এটি অ্যাক্সেস স্তরের মধ্যে থাকা উচিত? যদি তারা ঠিকঠাক থাকে তবে অনুমান করার জন্য কোনও সংযোগের স্ট্রিংটি কি নির্ভর করে?
পড়ার জন্য সময় দেওয়ার জন্য ধন্যবাদ!
DbContext
এটিকে নির্ভরতা হিসাবে গ্রহণ করে । নির্ভরশীলতা হিসাবে ব্যবসায়িক শ্রেণীর সংগ্রহস্থল রয়েছে। নির্ভরতা ইনজেকশনের জন্য, আমি এটি ম্যানুয়ালি করছি (তাই আমি বুঝতে পারি কী চলছে)। যে কারণে আমি সংযোগের স্ট্রিংটি সেট করতে সক্ষম হতে চাই তাDbContext
হ'ল আমি ডাটাবেস শাড়িং ব্যবহার করি তাই নির্দিষ্ট ক্ষেত্রে আমার কাছে বিভিন্ন ডাটাবেসের সাথে (একই কাঠামোর) সংযোগের জন্য সত্তা কাঠামো থাকা দরকার। আমি কি আপনাকে সঠিকভাবে বুঝতে পারি?