আমরা বর্তমানে কয়েকটি ওয়েব অ্যাপ্লিকেশন জুড়ে অ্যান্টি ফ্রেমওয়ার্কটি একটি ওআরএম হিসাবে ব্যবহার করছি এবং এখন অবধি এটি আমাদের উপযোগী হিসাবে আমাদের সমস্ত ডেটা একক ডাটাবেসে সংরক্ষণ করা হয়। আমরা সংগ্রহস্থল প্যাটার্নটি ব্যবহার করছি, এবং পরিষেবাগুলি (ডোমেন স্তর) রয়েছে যা এগুলি ব্যবহার করে এবং EF সত্তাগুলি সরাসরি এএসপি.নেট এমভিসি নিয়ন্ত্রকদের কাছে ফিরিয়ে দেয়।
তবে, একটি তৃতীয় পক্ষের এপিআই (ওয়েব সার্ভিসের মাধ্যমে) ব্যবহার করার জন্য একটি প্রয়োজনীয়তা এসেছে যা আমাদের ডেটাবেজে ব্যবহারকারীর সাথে সম্পর্কিত অতিরিক্ত তথ্য দেবে। আমাদের স্থানীয় ব্যবহারকারীর ডাটাবেসে, আমরা একটি বাহ্যিক আইডি সঞ্চয় করব যা আমরা অতিরিক্ত তথ্য পেতে API কে সরবরাহ করতে পারি। এখানে বেশ কিছু বিস্তৃত তথ্য পাওয়া যায়, তবে সরলতার জন্য, এর মধ্যে একটি ব্যবহারকারীর সংস্থার (নাম, পরিচালক, ঘর, কাজের শিরোনাম, অবস্থান ইত্যাদি) সম্পর্কিত। এই তথ্যটি আমাদের ওয়েব অ্যাপ্লিকেশনগুলিতে বিভিন্ন জায়গায় ব্যবহার করা হবে - একক জায়গায় ব্যবহারের বিপরীতে।
সুতরাং আমার প্রশ্ন হ'ল, এই তথ্যকে জনবহুল ও অ্যাক্সেস করার সর্বোত্তম জায়গাটি কোথায়? যেহেতু এটি বিভিন্ন স্থানে ব্যবহৃত হয়, ওয়েব অ্যাপ্লিকেশনটিতে আমরা যেখানেই এটি ব্যবহার করি না কেন এটি অ্যাড-হক ভিত্তিতে আনা সত্যিকার অর্থে বুদ্ধিমানের কাজ নয় - তাই ডোমেন স্তর থেকে এই অতিরিক্ত ডেটা ফেরানো বোধগম্য।
আমার প্রাথমিক চিন্তাটি কেবল একটি র্যাপার মডেল ক্লাস তৈরি করা ছিল যা EF সত্তা (EFUser) এবং একটি নতুন 'ApiUser' ক্লাসে নতুন তথ্য থাকবে - এবং যখন আমরা কোনও ব্যবহারকারী পাই, তখন আমরা EFUser পাই এবং তার পরে অতিরিক্ত পেতে পারি এপিআই থেকে তথ্য এবং ApiUser অবজেক্টটি পপুলেট করুন। তবে, একক ব্যবহারকারী পাওয়ার ক্ষেত্রে এটি ঠিক থাকবে, একাধিক ব্যবহারকারী পাওয়ার সময় এটি পড়ে যায়। ব্যবহারকারীর তালিকা পাওয়ার সময় আমরা API টি হিট করতে পারি না।
আমার দ্বিতীয় চিন্তাটি ছিল কেবলমাত্র EFUser সত্তায় একটি সিঙ্গলটন পদ্ধতি যুক্ত করা যা এপিউসারকে ফেরত দেয় এবং যখন প্রয়োজন হয় তখন এটি তৈরি করে। এটি কেবল যখন আমাদের প্রয়োজন হয় তখন এটি অ্যাক্সেস করার কারণে উপরের সমস্যাটি সমাধান করে।
বা চূড়ান্ত চিন্তাটি ছিল আমাদের ডাটাবেসে ডেটার একটি স্থানীয় অনুলিপি রাখা এবং যখন ব্যবহারকারী লগ ইন করে এটি এপিআইয়ের সাথে সিঙ্ক্রোনাইজ করে। এটি কেবলমাত্র একটি সিঙ্ক্রোনাইজেশন প্রক্রিয়া হিসাবে এটি ন্যূনতম কাজ - এবং আমাদের কাছে আঘাতের ওভারহেড নেই DB এবং API প্রতিবার আমরা ব্যবহারকারীর তথ্য পেতে চাই। যাইহোক, এর অর্থ দুটি স্থানে ডেটা সংরক্ষণ করা এবং এর অর্থ হ'ল যে কোনও ব্যবহারকারীর জন্য কিছুক্ষণ লগইন করা হয়নি তার ডেটা পুরানো।
এই ধরণের পরিস্থিতিটি কীভাবে পরিচালনা করা যায় সে সম্পর্কে কারও কি কোনও পরামর্শ বা পরামর্শ আছে?
it's not really sensible to fetch it on an ad-hoc basis
- কেন? পারফরম্যান্সের কারণে?