স্প্রিং এ হাতেখড়ি (পার্ট-১)

ভাই সব ভাই সব, ওয়েব ডেভেলপমেন্ট করতে চান ? কিন্তু PHP দেখলেই মাথা ঘুরায়, বমি আসে ? এত $ দেখেন কিন্তু ঘরে $ আসে না ? Java ছাড়া কিছু পারেন না? জাভায় ওয়েব ডেভেলপমেন্ট করতে চান ? আপনার জন্য নিয়ে এসেছি সুখবর। আজকেই স্প্রিং ফ্রেমওয়ার্ক শিখুন, নিজের জীবন গড়ুন।

স্প্রিং কি ?

স্প্রিং ফ্রেমওয়ার্ক জাভাতে ওয়েব ডেভেলপমেন্ট এর জন্য সবচেয়ে জনপ্রিয় ফ্রেমওয়ার্ক। ফ্রেমওয়ার্ক টি অনেক স্কেলেবল, সহজেই টেস্ট করা যায়, এবং একই কোড বার বার ব্যাবহার করা যায়। স্প্রিং, ওয়েব ডেভেলপমেন্ট এর জন্য প্রয়োজনীয় অনেক কিছুই আমাদের আগের থেকেই আমাদের দিয়ে থাকে, যার ফলে আমাদের ইনফোস্ত্রাকচার নিয়ে তেমন মাথা ঘামাতে হয় না। আমরা ওয়েব ডেভেলপমেন্টে বেশি ফোকাস করতে পারি। স্প্রিং মডিউলার, এম ভি সি ডিজাইন প্যাটার্ন ফলো করে। যার ফলে আমাদের কোড হয় Loosely Coupled এবং কোডে পরিবর্তন আনা অনেক সহজ হয়ে যায়।

স্প্রিং কেন এত জনপ্রিয়?

• স্প্রিং এ যেকোনো ডেভেলপমেন্ট করা যায়, যদিও এটা ওয়েব ডেভেলপমেন্ট এর জন্য সবচেয়ে জনপ্রিয়।

• স্প্রিং অন্য অনেক জাভা ফ্রেমওয়ার্ক যেমন Struts, Hibernate, Tapestry, EJB কে সাপোর্ট করে। • স্প্রিং AOP এবং Dependency Injection ফলো করে।

• স্প্রিং এ JPA/Hibernate, ORM ইনটিগ্রেট করা সহজ। যার ফলে ডাটাবেস ও ডাটা ম্যানেজমেন্ট করা সহজ।

সিরিজের এই প্রথম পার্টে আমরা কিছু স্প্রিং রিলেটেড টারমিনলজি নিয়ে ধারনা নিব যা আমাদের পরবর্তীতে সাহায্য করবে। জানি থিওরি বোরিং, কিন্তু এই টারমিনলজি গুলো না বুঝলে পরে অনেক টপিক বুঝতে সমস্যা হবে। তাই বিষয় গুলো যতটা সহজে পারি, ততটা সহজে বুঝানোর চেষ্টা করব।

টারমিনলজি

এ ও পিঃ এ ও পি বা এস্পেকট ওরিয়েন্টেড প্রোগ্রামিং একটি ডিজাইন প্যাটার্ন যেটি Loosely Coupled সফটওয়্যার ডেভেলপমেন্ট এর জন্য ব্যাবহার করা হয়। এস্পেকট ওরিয়েন্টেড প্রোগ্রামিং বুঝার আগে আমাদের এস্পেকট কি তা বুঝতে হবে। আমরা যদি খেয়াল করি তাহলে দেখতে পারব প্রতিটা সফটওয়্যারই কিছু কমন বৈশিষ্ট্য ধারন করে। প্রায় প্রতিটা সফটওয়্যারেই কোন না কোন ভাবে ডাটা অথেনটিকেশন করা হয়, ডাটা স্টোর করা, লগিন/লগাউট করার সিস্টেম/ফিচার থাকে । এই সিস্টেম/ফিচার গুলো যদি এমন ভাবে ডেভেলপ করা যায় যাতে তারা অন্য কোন সিস্টেম/ফিচার এর উপর ডিপেণ্ড করবে না তাহলে এই সিস্টেম/ফিচার গুলা আমাদের বার বার ডেভেলপ করা লাগবে না। একই কোড আমরা বিভিন্ন জায়গায় ব্যাবহার করতে পারবো। এই আইডিয়া থেকেই এস্পেকট ওরিয়েন্টেড প্রোগ্রামিং ডিজাইন প্যাটার্ন এর সূচনা হয়। প্রতিটা কমন সিস্টেম/ফিচার কে এক এক টা এস্পেকট বলা হয়। এই এস্পেকট গুলো Loosely Coupled অর্থাৎ ডিপেনডেন্সি ফ্রী হয়।

আই ও সিঃ আই ও সি বা ইনভারশন অফ কন্ট্রোল একটি ডিজাইন প্যাটার্ন যেটি জাভা প্রোগ্রামে অবজেক্ট তৈরিয়ের উপর ডেভেলপার এর কন্ট্রোল কমানোর জন্য ব্যাবহার করা হয়। কথাটি প্রথমে শুনলে এটা একটি ডিসএডভান্টেজ মনে হয়। কিন্তু এটি মোটেও কোন ডিসএডভান্টেজ না। এটি robust ডেভেলপমেন্ট এর জন্য অত্যন্ত জরুরি।

আই ও সিইয়ের কনসেপ্ট ভাল ভাবে বুঝার জন্য গাড়িকে উধাহরন হিসেবে ব্যাবহার করা যায়। মনে করেন আপনি একটি গাড়ি কিনলেন। গাড়িটা যদি আপনি চালান তাহলে এই গাড়ির দেখভাল, যত্ন, তেলের পরিমাণ সব আপনাকেই দেখতে হবে। যা আপনার কাজে ব্যাঘাত ঘটাতে পারে। কিন্তু আপনি যদি এই গাড়ি চালানোর জন্য একজন ড্রাইভার রাখেন তাহলে আপনাকে আর গাড়ির যত্ন নিতে হবে না, এই কাজ গুলো আপনার ড্রাইভার আপনার হয়ে করে দিবে। যার ফলে আপনি আপনার কাজ গুলো অন্য কোন চিন্তা ছাড়া করতে পারবেন। এর ফলে আপনার প্রোডাক্টিভিটি বাড়বে। এই উধাহরনের ড্রাইভার হল স্প্রিং ফ্রেমওয়ার্ক। স্প্রিং যেহেতু অবজেক্ট তৈরি ও ইউস এর এর বিষয় গুলো দেখে তাই আপনাকে সে বিষয়ে মাথা ঘামাতে হয় না। আপনি শুধু ডেভেলপমেন্ট এ ফোকাস করতে পারেন।

সিঙ্গেলটনঃ সিঙ্গেলটন একটি ডিজাইন প্যাটার্ন যেটি একটি ক্লাস এর শুধুমাত্র একটি ইন্সটেনস তৈরি করার জন্য ব্যাবহার করা হয়। পুরো সফটওয়্যারে সিঙ্গেলটন ক্লাস এর একটি মাত্র অবজেক্ট থাকে। সিঙ্গেলটনে new কল করে নতুন অবজেক্ট তৈরি করা যায় না। এবং এটি করা হয় কন্সট্রাকটর কে প্রাইভেট বানিয়ে। এখন মনে প্রশ্ন আসতে পারে এটি কেন জরুরি? এটির ব্যাবহার কথায় ? সিঙ্গেলটন এর ব্যাবহার স্বরূপ আমরা বলতে পারি ডাটাবেস কানেকশনের কোড। আমাদের একটি সফটওয়্যারে বার বার ডাটাবেস এর কোড না লিখে যদি আমরা আগে ইনিসিয়েট করা কানেকশন অবজেক্টটি ব্যাবহার করি তাহলে সফটওয়্যারের কোন ক্ষতি হবে না বরং সফটওয়্যারটি আরো robust হবে। এবং যেহেতু আমরা সেম অবজেক্ট বার বার তৈরি করবো না তাই আমাদের মেমরি ও সেভ হবে।

ডিপেনডেন্সি ইনজেকশনঃ ডিপেন্ডেন্সি ইনজেকশন স্ট্রাকচারাল ডিজাইন প্যাটার্নের মধ্যে একটি। এইটা এমন একটা ডিজাইন প্যাটার্ন যা কোন ক্লাসের ডিপেন্ডেন্সি অর্থাৎ প্রয়োজনীয় অবজেক্ট গুলোকে রান টাইম কিংবা কম্পাইল টাইমে সহজে পরিবর্তনে সহায়তা করে। ডিপেন্ডেন্সি ইনজেকশন ডিজাইন প্যাটার্ন হল S.O.L.I.D Principle এর D যার পূর্ণ অর্থ Dependency Inversion Principle (DIP) যেটি ইনভারশন অফ কন্ট্রোল কে অনুসরণ করে। এই প্যাটার্নের মূল উদ্দেশ্যই হল Loosely Coupled আর্কিটেকচার ইমপ্লিমেন্ট করা।

ডিপেন্ডেন্সি ইনজেকশন ভালোভাবে বুঝার জন্য আমরা সিডি প্লেয়ার উধাহরন হিসেবে ব্যাবহার করতে পারি। সিডি প্লেয়ার ফাংশনাল হওয়ার জন্য সিডি প্রয়োজন। সিডি হচ্ছে সিডি প্লেয়ার এর ডিপেন্ডেন্সি। কিন্তু যদি সিডি বিল্টইন ভাবে দেওয়া থাকে তাহলে সিডি প্লেয়ার এর ফাংশনালিটি অনেক কমে যাবে। আমরা আমাদের প্রয়োজন মত সিডি পরিবর্তন করতে পারি দেখে ডিমান্ড বেশি। ঠিক সিডি প্লেয়ার এর মতই আমরা যখন কোন ক্লাসকে অন্য কোন ক্লাসের ডিপেন্ডেন্সি বানাই তক্ষন তার ফাংশনালিটি কমে যায়। রানটাইমে যখন আমরা কোন ক্লাসে ডিপেন্ডেন্সি ইনজেকশন করতে পারি তক্ষন আমরা ক্লাসটির ফাংশনালিটি বাড়ানর পাশাপাশি ক্লাসটি কে Loosely Coupled করতে সক্ষম হই।

Dependency Injection

এম ভি সিঃ আমরা যদি কোন সিস্টেম একটু মনোযোগ দিয়ে খেয়াল করি তাহলে দেখতে পাব সিস্টেমটির তিনটি বেসিক কম্পোনেন্ট আছে। একটি চেহারা যাতে আমরা তথ্য দেখ, কিছু তথ্য, ও ওই তথ্য গুলো দেখার জন্য কিছু একশন। এই পর্যবেক্ষণ থেকেই এমভিসি এর সৃষ্টি। এমভিসি বা মডেল-ভিউ-কন্ট্রোলার খুবই জনপ্রিয় একটি প্যাটার্ন । এমভিসি প্যাটার্নের মূল বক্তব্য হলো এই প্যাটার্নে তিনটি কম্পোনেন্ট থাকবে – একটি মডেল যেটি ডাটা নিয়ে কাজ করবে, একটি ভিউ যেটার কাজ হবে মডেলকে ভিজ্যুয়ালাইজ করা এবং একটি কন্ট্রোলার যেটি ব্যবহারকারী এবং সিস্টেমের মধ্য সমন্বয়কারী হিসেবে কাজ করে । আমরা যদি এমভিসি কম্পোনেন্টগুলোর দিকে নজর দেই তাহলে দেখবো –

মডেল: মডেলের কাজই হলো ডাটা নিয়ে কাজ করা । মডেল হতে পারে একটি অবজেক্ট কিংবা অনেকগুলো অবজেক্ট এর একটি স্ট্রাকচার । একটি সিস্টেমের সব ধরণের নলেজ বা ডাটা মডেল দিয়ে রিপ্রেজেন্ট করা যায় ।

ভিউ: ভিউ এর কাজ হচ্ছে মডেলকে ব্যবহারকারীর সামনে তুলে ধরা । সাধারণত ভিউ মডেল থেকে ডাটা নিয়ে সেটাকে ব্যবহারকারীর কাছে সহজবোধ্য রূপে তুলে ধরে ।

কন্ট্রোলার: কন্ট্রোলার ব্যবহারকারীর কাছ থেকে তথ্য সংগ্রহ করে আবার ব্যবহারকারীর প্রয়োজনমত ভিউ উপস্থাপন করে । কন্ট্রোলারই বলে দেয় ভিউ কোন মডেল থেকে ডাটা নিয়ে কিভাবে উপস্থাপন করবে । এছাড়াও কন্ট্রোলার মডেলে নানা ধরণের পরিবর্তন করতে পারে প্রয়োজনমত ।

MVC Pattern

আজ এই পর্যন্তই । আশা করি কনসেপ্ট গুলো সম্পর্কে ভালো ধারনা দিতে সক্ষম হয়েছি। পরবর্তী পার্টে আমরা দেখব কিভাবে স্প্রিং ডেভেলপমেন্ট এর জন্য ডেভেলপমেন্ট এনভারমেন্ট তৈরি করা যায়।

Post by wsit_developer

2 Responses to স্প্রিং এ হাতেখড়ি (পার্ট-১)

Leave a Reply

Your email address will not be published. Required fields are marked *