আপনি যখন আপনার Rails অ্যাপটি লিখছেন, তখন আপনি একটি সমস্যায় পড়তে পারেন যা আপনি একটি ভিন্ন ডেটা স্টোরের মাধ্যমে আরও সহজে সমাধান করতে পারেন। উদাহরণ স্বরূপ, আপনার কাছে এমন একটি লিডারবোর্ড থাকতে পারে যা ব্যবহারকারীরা আপনার সাইটে প্রশ্নের উত্তর দেওয়ার জন্য যত পয়েন্ট পেয়েছে তার সংখ্যা অনুসারে রেঙ্ক করে। রেডিস সাজানো সেটের সাথে, আপনার জন্য অনেকগুলি বাস্তবায়ন করা হয়েছে। অসাধারণ! কিন্তু আপনি কোডটি কোথায় রাখবেন যা রেডিসের সাথে ইন্টারঅ্যাক্ট করে?
আপনার User
মডেল রেডিসের সাথে কথা বলতে পারে:
class User < ActiveRecord::Base
def award_points(points)
Redis.current.zincrby("leaderboard", points, id)
end
end
কিন্তু এখন আপনার User
মডেল আউজারকে প্রতিনিধিত্ব করার, Redis-এর সাথে কথা বলার দায়িত্ব রাখে, এবং লিডারবোর্ড পরিচালনা! এটি User
করে বোঝা কঠিন এবং পরীক্ষা করা কঠিন, এবং এটি আপনি যা চান তার বিপরীত।
পরিবর্তে, আপনি Redis অনুরোধগুলিকে একটি নতুন অবজেক্টে মুড়ে দিতে পারেন যা আপনি Redis এর জন্য ব্যবহার করছেন তা প্রতিনিধিত্ব করে . উদাহরণস্বরূপ, আপনি একটি Leaderboard
তৈরি করতে পারেন রেডিস কমিউনিকেশন মোড়ানো ক্লাস,না ActiveRecord::Base
থেকে উত্তরাধিকারী , কিন্তু এখনও app/models
-এ থাকে ডিরেক্টরি এটি দেখতে এরকম হবে:
class Leaderboard
def award_points_to_user(user_id, points)
Redis.current.zincrby("leaderboard", points, user_id)
end
end
class User < ActiveRecord::Base
def award_points(leaderboard, points)
leaderboard.award_points_to_user(id, points)
end
end
এই উভয় ক্লাসই app/models
-এ থাকতে পারে , কিন্তু এখন আপনি অতিরিক্ত যুক্তি দিয়ে আপনার ActiveRecord মডেলগুলিকে দূষিত করছেন না। Leaderboard
ক্লাস রেডিসের সাথে যোগাযোগ পরিচালনা করে, তাই User
লিডারবোর্ডগুলি কীভাবে প্রয়োগ করা হয় তা নিয়ে ক্লাসকে আর যত্ন নিতে হবে না। এটি পরীক্ষা করা সহজ করে তোলে।
নতুন দায়িত্ব এবং app/models
এর জন্য নতুন ক্লাস তৈরি করে আপনি অনেক কিছু লাভ করেন তাদের রাখার জন্য একটি দুর্দান্ত জায়গা। আপনি আপনার বৈশিষ্ট্যের বাস্তবায়নের জন্য অন্য পরিষেবার দিকে ঝুঁকে পড়ার সুবিধাগুলি পান, পাশাপাশি আপনার কোডের সাথে কাজ করা সহজ।
এটি ব্যবহার করে দেখুন
৷আপনি কি এমন কোনো নেটওয়ার্ক পরিষেবা যোগাযোগের কথা ভাবতে পারেন যা সরাসরি আপনার ActiveRecord মডেল, কন্ট্রোলার বা ভিউ থেকে কল করা হয়? সেই কোডটিকে একটি অ-ActiveRecord ডেটা মডেলে সরানোর চেষ্টা করুন এবং দেখুন আপনার কোড বোঝা, কাজ করা এবং পরীক্ষা করা সহজ হয় কিনা। তারপর, আমাকে একটি ইমেল পাঠান এবং আমাকে জানান যে এটি কেমন হয়েছে!
শুধু মনে রাখবেন:
কম্পিউটার বিজ্ঞানের সমস্ত সমস্যা অন্য মাত্রার পরোক্ষ দ্বারা সমাধান করা যেতে পারে।
— ডেভিড হুইলার
…অত্যধিক পরোক্ষ স্তরের সমস্যা ছাড়া।
— কেভলিন হেনি