1) আপনি ওআরএমগুলি স্যুইচআউট করতে চাইলে আপনি কী করবেন, আপনার অ্যাপ্লিকেশনটিতে নির্দিষ্ট ওআরএম কোড থাকবে যদি আপনি এটি কোনও ভান্ডারে রাখেন না।
আমি এখনও এমন অবস্থানে পৌঁছেছি না যেখানে সংস্থা হঠাৎ করে ডেটা অ্যাক্সেস প্রযুক্তি পরিবর্তন করার সিদ্ধান্ত নিয়েছিল। যদি এটি ঘটে তবে কিছু কাজ করা দরকার। আমি ইন্টারফেসের মাধ্যমে ডেটা অ্যাক্সেস অপারেশনগুলিতে প্রবণতা করি। এটি সমাধানের এক উপায় হল সংগ্রহস্থল।
তারপরে আমার ডেটা অ্যাক্সেস স্তরটির কংক্রিট বাস্তবায়নের জন্য আমার একটি আলাদা সমাবেশ হবে। উদাহরণস্বরূপ, আমার থাকতে পারে:
Company.Product.Data
এবং Company.Product.Data.EntityFramework
সমাবেশগুলি। প্রথম সমাবেশটি ইন্টারফেসের জন্য বিশুদ্ধরূপে ব্যবহৃত হবে, যখন অন্যটি সত্তা ফ্রেমওয়ার্কের ডেটা অ্যাক্সেস লজিকের একটি দৃ implementation় বাস্তবায়ন হবে।
২) কোনও ওআরএম ব্যবহার না করার সময় কি ভান্ডারগুলির প্যাটার্নটি এখনও কার্যকর আছে এবং আপনি ডেটা অ্যাক্সেস এবং অবজেক্টের ডেটা নিজেই পপুলেটিংয়ের জন্য ADO.net ব্যবহার করছেন?
আমি মনে করি যে কোন প্যাটার্নটি বৈধ কিনা তা সিদ্ধান্ত নেওয়া আপনার পক্ষে নির্ভর করে। আমি উপস্থাপনা স্তরটিতে একটি সংগ্রহস্থল প্যাটার্ন ব্যবহার করেছি। একটি জিনিস মনে রাখবেন যে লোকেরা স্টোরগুলিতে দায়িত্ব ফেলে দিতে পছন্দ করে। আপনি এটি জানার আগে, আপনার সংগ্রহশালাটি নাচবে, গান করবে এবং সমস্ত ধরণের কাজ করবে doing আপনি এটি এড়াতে চান।
গেটএল, গেটবাইআইডি, আপডেট এবং মুছে ফেলা দায়বদ্ধতার দ্বারা শুরু হওয়া একটি সংগ্রহস্থল শ্রেণি আমি দেখেছি যা ভাল। প্রকল্পটি সম্পূর্ণ হওয়ার সাথে সাথে, একই শ্রেণীর কয়েক ডজন পদ্ধতি (দায়িত্ব) ছিল যা কখনও কখনও হওয়া উচিত ছিল না। উদাহরণস্বরূপ, GetByForename, GetBySurname, আপডেটউইথএক্সক্লুশন এবং সকল ধরণের পাগল স্টাফ।
এখান থেকেই প্রশ্ন এবং আদেশগুলি কার্যকর হয়।
3) আপনি যদি কোনও ওআরএম ব্যবহার করেন তবে সংগ্রহস্থল প্যাটার্নটি নয় যেখানে আপনি সাধারণত ব্যবহৃত প্রশ্নগুলি রাখেন। প্রতিটি ক্যোয়ারিকে শ্রেণি হিসাবে উপস্থাপন করা এবং উদাহরণ তৈরি করার জন্য কোনও ধরণের কোয়েরি ফ্যাক্টরি যুক্ত করা কি বুদ্ধিমানের কাজ হবে?
আমি মনে করি সংগ্রহস্থলের পরিবর্তে ক্যোয়ারী এবং কমান্ড ব্যবহার করা খুব ভাল ধারণা। আমি নিম্নলিখিতটি করি:
একটি প্রশ্নের জন্য ইন্টারফেস সংজ্ঞায়িত করুন। এটি আপনাকে ইউনিট পরীক্ষায় সহায়তা করবে। যেমনpublic interface IGetProductsByCategoryQuery { ... }
একটি প্রশ্নের জন্য কংক্রিট বাস্তবায়ন সংজ্ঞায়িত করুন। আপনি আপনার পছন্দের আইওসি কাঠামোর মাধ্যমে এগুলি ইনজেক্ট করতে সক্ষম হবেন। যেমনpublic class GetProductsByCategoryQuery : IGetProductsByCategoryQuery
এখন কয়েক ডজন দায়িত্ব নিয়ে রিপোজিটারি দূষিত করার পরিবর্তে আমি আমার প্রশ্নগুলি কেবলমাত্র নামের জায়গাগুলিতে ভাগ করে নিই। উদাহরণস্বরূপ, উপরের ক্যোয়ারির জন্য একটি ইন্টারফেস থাকতে পারে: Company.SolutionName.Products.Queries
এবং প্রয়োগটি লাইভ থাকতে পারেCompany.SolutionName.Products.Queries.Implementation
যখন ডেটা আপডেট করার বা অপসারণের বিষয়টি আসে, আমি একইভাবে কমান্ড প্যাটার্নটি ব্যবহার করি।
কেউ কেউ দ্বিমত পোষণ করতে পারে এবং বলে যে প্রকল্পটি শেষ হওয়ার আগে আপনার কয়েক ডজন ক্লাস এবং নেমস্পেস থাকবে। হ্যাঁ আপনি করবেন। আমার মনে এটি ভাল জিনিস হিসাবে আপনি নিজের পছন্দের আইডিইতে সমাধানটি ব্রাউজ করতে এবং তাত্ক্ষণিকভাবে দেখতে পারেন যে নির্দিষ্ট উপাদানটির কী ধরণের দায়িত্ব রয়েছে। আপনি যদি এর পরিবর্তে কোনও সংগ্রহস্থল প্যাটার্ন ব্যবহার করার সিদ্ধান্ত নিয়ে থাকেন তবে আপনাকে প্রতিটি ভান্ডার শ্রেণীর দায়িত্ব খুঁজে বের করার চেষ্টা করতে হবে।