এটি ছিল পথ
কয়েক বছর ধরে, আমি আমার সফ্টওয়্যার সমাধানগুলি এরকমভাবে সংগঠিত করেছি:
- ডেটা অ্যাক্সেসের ব্যবসায়টি বিমূর্ত করতে ডেটা অ্যাক্সেস লেয়ার (ডাল)
- ব্যবসায়িক লজিক স্তর (বিএলএল) ডেটা সেটগুলিতে ব্যবসায়ের বিধি প্রয়োগ করতে, প্রমাণীকরণ হ্যান্ডেল করতে পারে
- ইউটিলিটিস (ইউটিলিটি) যা আমি সময়ের সাথে সাথে নির্মিত সাধারণ ইউটিলিটি পদ্ধতির একটি গ্রন্থাগার।
- উপস্থাপনা স্তর যা অবশ্যই ওয়েব, ডেস্কটপ, মোবাইল, যাই হোক না কেন হতে পারে।
এখন যেভাবে চলছে
গত চার বছর বা তার জন্য আমি মাইক্রোসফ্টের সত্তা ফ্রেমওয়ার্ক ব্যবহার করে আসছি (আমি মূলত একটি। নেট দেব) এবং আমি খুঁজে পেয়েছি যে সত্তা ফ্রেমওয়ার্ক ইতিমধ্যে কাজটি করেছে যে কারণে ডালের উপস্থিতি পরিষ্কারের চেয়ে আরও জটিল হয়ে উঠছে of আমার ডাল যে কাজটি করত: এটি একটি ডাটাবেসের বিরুদ্ধে সিআরইউডি চালানোর ব্যবসায়কে বিমূst় করে।
সুতরাং, আমি সাধারণত একটি ডাল দিয়ে শেষ করি যা এর মতো পদ্ধতিগুলির সংগ্রহ রয়েছে:
public static IQueryable<SomeObject> GetObjects(){
var db = new myDatabaseContext();
return db.SomeObjectTable;
}
তারপরে, বিএলএলে এই পদ্ধতিটি এইভাবে ব্যবহৃত হয়:
public static List<SomeObject> GetMyObjects(int myId){
return DAL.GetObjects.Where(ob => op.accountId == myId).ToList();
}
এটি অবশ্যই একটি সহজ উদাহরণ, কারণ বিএলএল সাধারণত যুক্তিযুক্ত আরও কয়েকটি লাইন প্রয়োগ করা হবে, কিন্তু এই জাতীয় সীমিত সুযোগের জন্য একটি ডাল বজায় রাখা কিছুটা মাত্রাতিরিক্ত বলে মনে হচ্ছে।
শুধু ডালটি ছেড়ে দিয়ে আমার বিএলএল পদ্ধতিগুলি কেবল এইভাবে লেখাই ভাল হবে না:
public static List<SomeObject> GetMyObjects(int myId){
var db = new myDatabaseContext();
return db.SomeObjectTable.Where(ob => op.accountId == myId).ToList();
}
আমি উপরে বর্ণিত কারণে ভবিষ্যতের প্রকল্পগুলি থেকে ডাল বাদ দেওয়ার বিষয়টি বিবেচনা করছি তবে এটি করার আগে আমি কোনও প্রকল্পে রাস্তায় নামার আগে আমি যে সমস্যাটি করেছি তা আবিষ্কার করার আগে আমি আপনার সম্প্রদায়ের দৃষ্টি / দূরদৃষ্টি / মতামতের জন্য এখানে সম্প্রদায়টি পোল করতে চেয়েছিলাম ' টি অনুমান করা।
কোন চিন্তা প্রশংসা করা হয়।
হালনাগাদ
Sensক্যমত্য বলে মনে হচ্ছে যে একটি আলাদা ডাল প্রয়োজনীয় নয় তবে (এখানে আমার নিজের অনুমান তৈরি করা) বিক্রেতাদের লক ইন এড়াতে ভাল ধারণা For উদাহরণস্বরূপ, যদি আমার কাছে একটি ডাল থাকে যা উপরে বর্ণিত ইএফ কলগুলিকে বিমূর্ত করছে, যদি আমি অন্য কোনও বিক্রেতার কাছে কখনও স্যুইচ করুন আমাকে আমার বিএলএল পুনর্লিখনের দরকার নেই। ডালের কেবলমাত্র সেই প্রাথমিক প্রশ্নগুলির জন্য নতুন করে লেখা দরকার। এটি বলার পরে, আমি এমন একটি দৃশ্যের কল্পনা করতে শক্ত হচ্ছি যা এই ঘটবে। আমি ইতিমধ্যে একটি ওরাকল ডিবি এর একটি ইএফ মডেল তৈরি করতে পারি, এমএসএসকিউএল একটি প্রদত্ত, আমি নিশ্চিত যে মাইএসকিউএলও সম্ভব (??) তাই আমি নিশ্চিত নই যে অতিরিক্ত কোডটি কখনই একটি উপযুক্ত আরওআই দেবে কিনা তা আমি নিশ্চিত নই।
GetMyObjects(int myId)
উপহাস / stubbing / এর faking তুলনায় অনেক সহজ GetObjects.Where(ob => op.accountId == myId).ToList()
।