আপনি যখন Rails ব্লগ এবং বই পড়েন, বা কনফারেন্সের আলোচনা দেখেন, তখন আপনি আপনার মডেলগুলিকে আরও চর্মসার করার বিষয়ে অনেক কিছু শিখবেন৷
এই কৌশলগুলি দুর্দান্ত, কারণ আপনার মডেলগুলি হবে৷ হ্যান্ডেল করা খুব বড় বা জটিল পেতে. কিন্তু আপনি কি সত্যিই এতদূর যেতে চান যে আপনার মডেলগুলি শুধুমাত্র অধ্যবসায়, সমিতি এবং বৈধতার জন্য দায়ী? আপনার ActiveRecord মডেলগুলিতে কতটা যুক্তি থাকা উচিত তা আপনি কীভাবে সিদ্ধান্ত নেবেন?
চর্মসার। কিন্তু খুবও না চর্মসার।
অ্যাক্টিভ রেকর্ড হল এমন একটি প্যাটার্ন যা সবচেয়ে ভালো কাজ করে যখন আপনার মডেলগুলি আপনার ডাটাবেস স্কিমার সাথে মিলে যায়। এটা কি জন্য ডিজাইন করা হয়েছে! কিন্তু এর মানে কি?
-
যদি কিছু কোড একটি ActiveRecord মডেলের দৃষ্টিকোণ থেকে কাজ করে, তবে এটি মডেলটিতে যেতে পারে।
-
যদি কিছু কোড কাজ করে যা একাধিক টেবিল/অবজেক্টকে বিস্তৃত করে, এবং প্রকৃতপক্ষে একটি পরিষ্কার মালিক না থাকে, তাহলে এটি একটি পরিষেবা অবজেক্টে যেতে পারে।
-
অ্যাট্রিবিউট-এর মতো (যেমন অ্যাট্রিবিউট বা অন্যান্য অ্যাট্রিবিউট থেকে গণনা করা অ্যাট্রিবিউট) আপনার ActiveRecord মডেলে যেতে হবে।
-
আপনার যদি যুক্তি থাকে যা একসাথে একাধিক মডেল সংরক্ষণ বা আপডেট করতে হয়, তাহলে এটি একটি ActiveModel ফর্ম অবজেক্টে যেতে হবে।
-
যদি কোডটি বেশিরভাগ ক্ষেত্রে মডেলগুলিকে একটি দৃশ্যে প্রদর্শন বা বিন্যাস করার জন্য বোঝানো হয় তবে এটি একটি রেল সাহায্যকারী বা একটি উপস্থাপকের মধ্যে যাওয়া উচিত৷
এই নির্দেশিকাগুলির বাইরে, আপনার সেই নিয়মগুলি ব্যবহার করা উচিত যা আপনি খুব বড় হয়ে উঠছে এমন কোনও শ্রেণিকে রিফ্যাক্ট করতে ব্যবহার করবেন। তবে সাধারণত, কিছু ছেড়ে যাওয়ার জন্য আপনার খারাপ বোধ করা উচিত নয় আপনার ActiveRecord মডেলে যুক্তি। তারা এটা আছে বোঝানো হয়!
সুতরাং, যেহেতু রেলগুলি অ্যাক্টিভ রেকর্ড প্যাটার্ন বেছে নিয়েছে, তাই আপনার মডেলগুলিতে কিছু যুক্তি থাকা বোধগম্য। কিন্তু রেল কেন ক্লিনারের পরিবর্তে সেই প্যাটার্ন বেছে নিল?
রুবি কি করবে?
এন্টারপ্রাইজ অ্যাপ্লিকেশন আর্কিটেকচারের প্যাটার্নে, অ্যাক্টিভ রেকর্ড প্যাটার্ন সারি ডেটা গেটওয়ে এবং ডেটা ম্যাপারের মধ্যে মাঝামাঝি জায়গা ধরে রাখে। সারি ডেটা গেটওয়ে টেবিলের সারিগুলির চারপাশে বেশিরভাগ বোবা অবজেক্ট-ভিত্তিক মোড়ক, সমস্ত সম্ভাব্য মডেলগুলির মধ্যে সবচেয়ে চর্মসারের মতো। ডেটা ম্যাপার অ্যাক্টিভ রেকর্ডের চেয়ে বেশি জটিল, এবং বেশিরভাগই ব্যবসায়িক যুক্তি ছাড়া আর কিছুই নেই এমন বস্তুর মধ্যে রূপান্তর করতে ব্যবহৃত হয় এবং অধ্যবসায় যুক্তি ছাড়া কিছুই নেই।
সুতরাং, রুবির প্রসঙ্গে, অ্যাকটিভ রেকর্ড হল একেবারে সঠিক ডিফল্ট প্যাটার্ন৷
আমি কেন বলছি?
রুবি প্রোগ্রামারদের খুশি করার জন্য ডিজাইন করা হয়েছে। যখন এটি পরিষ্কার-পরিচ্ছন্নতা এবং সুবিধার মধ্যে ট্রেডঅফ করতে বাধ্য হয়, তখন এটি প্রায় সবসময় সুবিধা বেছে নেয়।
মানে, Array
এর পাবলিক এপিআইতে একশোরও বেশি পদ্ধতি রয়েছে। এটির একটি টন আছে৷ পদ্ধতিগুলি যা একে অপরের উপনাম মাত্র। কারণ কিছু ডেভেলপার শুধু .detect
লিখতে পছন্দ করে .find
করতে .
সেই প্রেক্ষাপটে, এটি অনেক অর্থবহ যে রেলগুলি এমন একটি প্যাটার্নে ডিফল্ট হবে যা আরও নমনীয়, বা আরও অবজেক্ট-ভিত্তিক বিশুদ্ধতার তুলনায় সুবিধাজনক। এটি রুবি পথ। এবং আমি এটা পছন্দ করি।
আপনি যখন প্রয়োজন তখন আরও নমনীয় কিছুতে রিফ্যাক্টর করতে পারেন। কিন্তু তারপর আবার, ইয়াগ্নি।