একটি মাঝারি-বৃহত্তর এমভিসি ওয়েব অ্যাপ্লিকেশনটির জন্য আর্কিটেকচারের পরিকল্পনা করার সময় আপনি কীভাবে স্তরগুলি সম্ভব এবং পরীক্ষার পক্ষে সহজ হিসাবে ডিউপলড রূপে বাস্তবায়ন করবেন? (মূলত সর্বোত্তম অনুশীলনগুলি অনুসরণ করুন) আসুন ধরা যাক আমি কোডটি আমার ডেটা অ্যাক্সেস হিসাবে প্রথমে ব্যবহার করছি।
"ব্যবসায়িক যুক্তি" কে কী হিসাবে সংজ্ঞায়িত করা যায় এবং ডেটা স্তরের সাথে ইন্টারেক্ট করার জন্য কীভাবে বোঝানো হয় তা নিয়ে আমি লড়াই করছি। উদাহরণস্বরূপ যানবাহন বিক্রির আবেদন গ্রহণ করা, ব্যবসায়ের যুক্তি কি এমন শ্রেণি হতে পারে যেগুলি প্রদত্ত যানবাহনের জন্য ট্যাক্স ব্যান্ড গণনা করা, প্রতি গ্যালন পরিসংখ্যানের প্রতি মাইল তুলনা ইত্যাদি কাজ করে? ব্যবসায়ের সত্তা হিসাবে (যেমন গাড়ি, ভ্যান, মোটর সাইকেল) আমি এগুলি আমার DataContext
ক্লাসের সাথে ডেটা স্তরে রাখি ।
এছাড়াও ব্যবসায়ের বিপরীতে অ্যাপ্লিকেশন যুক্তিটি কী গঠন করবে - আমি সেশন / ব্যবহারকারী ইনপুট বৈধতার মতো জিনিসগুলি অনুমান করছি?
সুতরাং উদাহরণস্বরূপ, কোনও গাড়ি নিয়ামক এমন কোনও ক্রিয়া / দর্শন ফলাফল দিতে পারে যা টাইপ করে এবং সেরা এমপিজি দ্বারা ফিল্টার করা সেরা দশটি গাড়ি তালিকাভুক্ত করে। সুতরাং আসুন আমি বলি যে ICarRepository
আমার কন্ট্রোলারে একটি 'কারিপো' ইনজেকশন রয়েছে (রিপোজিটরি প্যাটার্ন / ডিআই ব্যবহার করে), আমি আমার গাড়িগুলি অ্যাকশন পদ্ধতির প্যারামিটার থেকে ফিল্টার করি egvar cars = carRepo.getCarsByType("hatchback");
সুতরাং আমি কোনও সংগ্রহস্থল ব্যবহার করে ডেটা অ্যাক্সেস জ্ঞানকে আমার নিয়ামকের বাইরে রেখে দিয়েছি, এখন কোনও ডোমেন মডেল ব্যবহার করে ব্যবসায়ের যুক্তি নিয়ন্ত্রকের বাইরে রাখার জন্য - var ফলাফল = নতুন এমপিজিক্যালকুলেটার (গাড়ি); - আসুন আমরা ক্যালকুলেটর শ্রেণি প্রয়োজন কারণ এটি কেবলমাত্র ডিবি থেকে লোডিং / ফিল্টারিং সত্তার চেয়ে সর্বোত্তম জ্বালানী দক্ষতার গণনা করার জন্য অতিরিক্ত যুক্তি সম্পাদনের প্রয়োজন। সুতরাং এখন আমার কাছে আমার ভিউ রেন্ডার করার জন্য একটি ডেটা সেট আছে যা ডেটা অ্যাক্সেস স্তর থেকে পুনরুদ্ধার করতে একটি সংগ্রহস্থল ব্যবহার করে এবং সেই ডেটাতে ব্যবসায় সম্পর্কিত কাজগুলি সম্পাদন করতে এবং ডোমেন সুনির্দিষ্ট অবজেক্টটি ব্যবহার করে।
আমি কি এখানে ভুল করছি? আমাদের কি এখনও রিপোজিটরি প্যাটার্ন ব্যবহার করা দরকার বা আমি কেবল একটি ইন্টারফেসের বিরুদ্ধে কোডটি ওআরএম এবং পরীক্ষা ডিকুয়াল করতে পারি? এই বিষয়টিতে, আমার কংক্রিটের ডেটা অ্যাক্সেস সংঘর্ষ (গুলি) dbcontext ডেটা স্তরে থাকাকালীন ইন্টারফেসের সংজ্ঞাগুলি ডোমেন / ব্যবসায়ের স্তরে যেতে হবে অর্থাত যদি ডেটা অ্যাক্সেস প্রযুক্তি পরিবর্তন করা হয় তবে আমার অন্যান্য স্তরগুলি প্রভাবিত হবে না?
আমি এখন পর্যন্ত যা পড়াশোনা করেছি তা থেকে আমার কাঠামোটি দেখতে এরকম দেখাচ্ছে:
এমভিসি ইন্টারনেট অ্যাপ্লিকেশন -> মানক ইন্টারনেট প্রকল্প - মডেলগুলি এখানে ভিউমোডেলস
ডোমেন / বিজনেস স্তর -> ব্যবসায়ের নির্দিষ্ট শ্রেণি / মডেল যা নিয়ামকরা প্রাসঙ্গিক দর্শনে যাওয়ার আগে ডেটা স্তর থেকে ডোমেন সত্তাগুলি প্রসেস করতে ব্যবহার করতে পারেন
সংগ্রহস্থল বিমূর্ততা প্রয়োজনীয়? -> আমি এ নিয়ে প্রচুর বিতর্ক শুনি, বিশেষত কোনও ওআরএম ব্যবহার করার সময়
ডেটা স্তর -> সত্তা শ্রেণি (গাড়ি, ভ্যান, মোটরসাইকেল), ডিবি কনটেক্সট - কংক্রিট ডেটা অ্যাক্সেস প্রযুক্তি স্তর