আপনি আপনার পরবর্তী প্রজেক্টে rails new টাইপ করলেন। এখন কী? কোথায় শুরু করবেন? সবকিছু এক অ্যাপে লিখবেন, নাকি সার্ভিস অরিয়েন্টেড আর্কিটেকচার? এটা RSpec শিখার ভালো সময়? সব ডেটা মডেল বানাতে শুরু করবেন, নাকি কয়েকটা অ্যাকশন এন্ড-টু-এন্ড কাজ করাতে? সেটার প্রথমে নিতে হয় টন সিদ্ধান্ত, এবং হারানো, প্রক্রাস্টিনেশন, ফ্রাস্ট্রেশন, এবং অ্যাপ কখনো ফিনিশ না করার রাস্তা খুব সহজ।
এই সমস্যা সুপার কমন। এর কারণ হলো কম ইনফো থাকার সময় অনেক চয়েস নিতে হয়, যখন এডুকেটেড ডিসিশন নেওয়ার ইনফো সবচেয়ে কম থাকে।
কনভেনশন ওভার ডিসিশন-মেকিং
Convention over Configuration আমার সবচেয়ে পছন্দের রেইলস প্রিন্সিপ্যাল। রেইলসের আগে, আমি ফাইল কোথায় রাখব, ডেটাবেস টেবিল কী নাম দেব, সেগুলো অবজেক্টে কীভাবে ম্যাপ করব, এবং অন্য অনন্য ননসেন্স ডিসিশনে আটকে যাতাম। চেঞ্জ করা মনে করলে চেয়ে বেশি সময় ডিরেকশন বাছাতে কাটাতাম।
নতুন প্রজেক্ট শুরু করার সময় আপনার সামনে আসা অনেক ডিসিশন এইরকম। কিন্তু আপনি এই ডিসিশনগুলো বই, ব্লগ, বা স্টাইলগাইড থেকে কনভেনশন নিয়ে রিপ্লেস করতে পারেন। এবং আপনি অনেক সময়, চিন্তা, এবং বেসার ডিবেট বাঁচাবেন।
নতুন অ্যাপ শুরু করার সময় আমি যে কনভেনশনগুলো ফলো করি:
-
কয়েকটা ফুল ফিচার দিয়ে শুরু করুন।
আপনার অ্যাপকে একসাথে সবকিছু করতে হবে না। ছোট থেকে শুরু করুন, সিম্পল থেকে শুরু করুন। এক বা দুটি ফিচার বের করুন যা ছাড়া চলবে না, এবং সেগুলোতে পুরো ফোকাস দিন। সেগুলো খুব ভালোভাবে বানান। বাকি জিনিসগুলো পরে যোগ করবেন যদি দরকার হয়। কিন্তু সম্ভবত, YAGNI। (এবং সাধারণত আপনি যা চান সেটা আপনার কাস্টমাররা যা চান তার থেকে সম্পূর্ণ ভিন্ন হয়)।
-
সিঙ্গেল অ্যাপ দিয়ে শুরু করুন।
জানি, আপনি Monorail এড়াতে চান। এবং সার্ভিস অরিয়েন্টেড আর্কিটেকচার কীভাবে লং টার্মে রেইলস অ্যাপ মেইনটেইনেবল রাখে সেটা নিয়ে হাফ ডজন RailsConf টক আছে। আপনার অ্যাপের কোন পার্টস ইন্ডিপেন্ডেন্ট, সেটা বের করে প্রতিটার জন্য সার্ভিস বানাতে হবেন কিনা?
SOA বড়, জটিল অ্যাপ ভাঙার চমৎকার উপায়। কিন্তু এটা খুব বেশি পেইন যোগ করে, এবং যতক্ষণ সার্ভিস বানানো, মেইনটেইন, এবং মনিটর করার পেইন আপনার মোনোলিথিক রেইলস অ্যাপে কাজ করার পেইন চেয়ে বেশি না হয়, ততক্ষণ এটা ওরথ ইট নয়। এবং আপনি এখনো অ্যাপ শুরু করিনি, তাই সেটা পেইন ফিল করছেন না। তাই, একটা অ্যাপ দিয়ে শুরু করুন।
-
আপনার ব্যবহার করা স্ট্যাক দিয়ে শুরু করুন।
আপনি যদি কোনো স্ট্যাক জানেন না, শুধু Omakase স্ট্যাক ব্যবহার করুন। যেভাবেই হোক, আপনি আগে কখনো ব্যবহার না করা টেস্ট ফ্রেমওয়ার্ক রেইলসের সাথে ইন্টিগ্রেট করতে আধা দিন বিতাবেন না। VCR এবং WebMock-এর ভার্সন কনফ্লিক্টে লড়বেন না। আপনার টেস্ট ক্র্যাশ করছে আপনার ফল্ট নাকি resque_unit-এর - সেটা বের করতে হবে না। নতুন লাইব্রেরি ট্রাই করতে চাইলে, পরে যোগ করুন (বা টয় প্রজেক্টে ট্রাই করুন)।
শিপ করা কঠিন। অ্যাপ ফিনিশ করতে চাইলে, যেকোনো সুবিধা খুঁজে বের করতে হবে। তাই ছোট থেকে শুরু করুন, সিম্পল থেকে শুরু করুন, এবং যা জানেন সেটা দিয়ে শুরু করুন।
কনভেনশন সবসময় পাঃফেক্ট নয়, কিন্তু এগুলো আপনাকে শুরু করতে সাহায্য করে। আর শুরু করা সবচেয়ে কঠিন।
পরবর্তী কী?
আপনার প্রজেক্টে আপনি কী কনভেনশন ফলো করেন? এবং কোন ফিচার বা টেস্ট দিয়ে শুরু করবেন সেটা কীভাবে ডিসাইড করেন? আমি পরের বার আমার মতামত শেয়ার করব, কিন্তু আপনার মতামত শুনতে চাই।