পিএইচপি-তে কার একা প্রয়োজন?
লক্ষ্য করুন যে সিলেটলেটের প্রায় সমস্ত আপত্তি প্রযুক্তিগত অবস্থানগুলি থেকে আসে - তবে তারা তাদের ক্ষেত্রের মধ্যেও খুব সীমিত। বিশেষত পিএইচপি জন্য। প্রথমে আমি সিলেটলেট ব্যবহারের কয়েকটি কারণ তালিকাবদ্ধ করব এবং তারপরে আমি সিঙ্গলেটনের ব্যবহারের আপত্তিগুলি বিশ্লেষণ করব। প্রথমত, যাদের প্রয়োজন তাদের:
- এমন লোকেরা যারা একটি বৃহত ফ্রেমওয়ার্ক / কোডবেস কোডিং করছে যা বিভিন্ন পরিবেশে ব্যবহৃত হবে, তাদের বিভিন্ন ক্লায়েন্ট / বসদের স্বচ্ছল অনুরোধগুলি প্রয়োগ করার পূর্বে বিদ্যমান বিভিন্ন, বিভিন্ন ফ্রেমওয়ার্ক / কোডবেসগুলির সাথে কাজ করতে হবে many / পরিচালনা / ইউনিট নেতারা না।
দেখুন, সিঙ্গলটন প্যাটার্নটি স্বয়ংসম্পূর্ণ। সম্পন্ন হয়ে গেলে, একটি সিঙ্গলটন শ্রেণি আপনি যে কোনও কোডের মধ্যে অন্তর্ভুক্ত করেছেন তা জুড়ে অনমনীয় এবং এটি কীভাবে আপনি এর পদ্ধতি এবং ভেরিয়েবলগুলি তৈরি করেছিলেন তার মতো কাজ করে। এবং প্রদত্ত অনুরোধে এটি সর্বদা একই জিনিস। যেহেতু এটি দুটি পৃথক বস্তু হিসাবে দুটিবার তৈরি করা যায় না, আপনি জানেন যে কোনও কোডের কোনও নির্দিষ্ট বিন্দুতে একটি সিঙ্গলটন অবজেক্টটি কী - এমনকি যদি সিঙ্গলটন দুটি, তিনটি পৃথক, পুরানো এমনকি স্প্যাগেটি কোডবাসে প্রবেশ করা হয়। অতএব, এটি উন্নয়নের উদ্দেশ্যগুলির ক্ষেত্রে এটি আরও সহজ করে তোলে - এমনকি যদি এই প্রকল্পে অনেক লোক কাজ করে থাকেন, আপনি যখন দেখেন যে কোনও সিঙ্গলটন কোনও নির্দিষ্ট কোডবেজে এক বিন্দুতে আরম্ভ করা হচ্ছে, আপনি জানেন যে এটি কী, এটি কী করে, কীভাবে এটি করে, এবং এটি যে অবস্থায় আছে তাতে। যদি এটি theতিহ্যবাহী শ্রেণি হত তবে আপনাকে প্রথমে সেই বস্তুটি কোথায় তৈরি হয়েছিল তা ট্র্যাক করে রাখতে হবে, কোডটিতে সেই বিন্দু না হওয়া পর্যন্ত এবং এর নির্দিষ্ট অবস্থা পর্যন্ত কী কী পদ্ধতিতে এটি চাওয়া হয়েছিল। তবে, সেখানে একটি সিঙ্গলটন ফেলে দিন এবং আপনি কোডিং করার সময় যদি সঠিক ডিবাগিং এবং তথ্য পদ্ধতি এবং সিঙ্গলটনে ট্র্যাকিং বাদ দেন তবে আপনি এটি ঠিক কী জানেন। সুতরাং, সেই ব্যক্তিদের পক্ষে যাদের আলাদা আলাদা কোডবেসের সাথে কাজ করতে হবে, কোডের সংহতকরণের প্রয়োজনীয়তার সাথে এটি আগে কাজ করেছিল যা আগে বিভিন্ন দর্শন দিয়ে করা হয়েছিল, বা যাদের সাথে আপনার কোনও যোগাযোগ নেই তাদের দ্বারা সম্পন্ন করা হয়েছে। (এটি হ'ল বিক্রেতা-প্রকল্প-সংস্থা-যা কিছু আছে তা নেই, কোনও সমর্থন নেই)। এটি এমন ব্যক্তির পক্ষে সহজতর হয়েছে যেগুলি আলাদা আলাদা কোডবেসের সাথে কাজ করতে হবে, কোড একীকরণের প্রয়োজনীয়তার সাথে যা আগে বিভিন্ন দর্শন দিয়ে করা হয়েছিল, বা যাদের সাথে আপনার কোনও যোগাযোগ নেই তাদের দ্বারা সম্পন্ন করা হয়েছিল। (এটি হ'ল বিক্রেতা-প্রকল্প-সংস্থা-যা কিছু আছে তা নেই, কোনও সমর্থন নেই)। এটি এমন ব্যক্তির পক্ষে সহজতর হয়েছে যেগুলি আলাদা আলাদা কোডবেসের সাথে কাজ করতে হবে, কোড একীকরণের প্রয়োজনীয়তার সাথে যা আগে বিভিন্ন দর্শন দিয়ে করা হয়েছিল, বা যাদের সাথে আপনার কোনও যোগাযোগ নেই তাদের দ্বারা সম্পন্ন করা হয়েছিল। (এটি হ'ল বিক্রেতা-প্রকল্প-সংস্থা-যা কিছু আছে তা নেই, কোনও সমর্থন নেই)।
- তৃতীয় পক্ষের এপিআই , পরিষেবা এবং ওয়েবসাইটগুলির সাথে কাজ করা লোকদের।
আপনি যদি ঘনিষ্ঠভাবে দেখেন তবে এটি পূর্ববর্তী কেসের চেয়ে খুব বেশি আলাদা নয় - তৃতীয় পক্ষের API, পরিষেবাদি, ওয়েবসাইটগুলি কেবল বাহ্যিক, বিচ্ছিন্ন কোডবেসের মতো, যার উপর আপনার কোনও নিয়ন্ত্রণ নেই। কিছু হতে পারে। সুতরাং, একটি সিঙ্গলটন সেশন / ব্যবহারকারী শ্রেণীর সাহায্যে, আপনি তৃতীয় পক্ষের সরবরাহকারী যেমন ওপেনআইডি , ফেসবুক , টুইটার এবং আরও অনেকগুলি থেকে যে কোনও ধরণের সেশন / অনুমোদন বাস্তবায়ন পরিচালনা করতে পারেন - এবং আপনি এই একই জিনিসগুলি একই সময়ে একই সিঙ্গলটন অবজেক্ট থেকে করতে পারেন - যা সহজেই অ্যাক্সেসযোগ্য, আপনি যে কোনও কোডে এটি প্লাগইন করে যা কোনও নির্দিষ্ট বিন্দুতে একটি পরিচিত অবস্থায় state এমনকি আপনি নিজের ওয়েবসাইটে / অ্যাপ্লিকেশনটিতে একই ব্যবহারকারীকে একাধিক বিভিন্ন, তৃতীয় পক্ষের API / পরিষেবাদিতে একাধিক সেশন তৈরি করতে পারেন এবং আপনি তাদের সাথে যা করতে চান তা করতে পারেন।
অবশ্যই, এই সমস্তগুলিও স্বাভাবিক বর্গ এবং অবজেক্টগুলি ব্যবহার করে traditionalতিহ্যবাহী পদ্ধতিগুলির সাথে সুরযুক্ত হতে পারে - এখানে ধরা হচ্ছে সিঙ্গলটন পরিপাটি, আরও সুন্দর এবং এই কারণে পরিস্থিতিতে traditionalতিহ্যগত শ্রেণি / অবজেক্টের ব্যবহারের তুলনায় সেই পরিচালনাযোগ্য / পরীক্ষামূলকভাবে সহজতর কারণ।
- যাদের দ্রুত বিকাশ করা দরকার People
সিঙ্গেলনের গ্লোবাল-জাতীয় আচরণের ফলে কাঠামোগত কোনও কাঠামো তৈরির জন্য যে কোনও ধরণের কোড তৈরি করা সহজ হয়, কারণ আপনি যখন নিজের সিঙ্গলটন ক্লাসগুলি ভালভাবে তৈরি করেন, তখন প্রতিষ্ঠিত, পরিপক্ক এবং সেট পদ্ধতিগুলি সহজেই উপলব্ধ হবে এবং সামঞ্জস্যপূর্ণ ফ্যাশনে যে কোনও জায়গায় যে কোনও সময় ব্যবহারযোগ্য। আপনার ক্লাসগুলি পরিপক্ক হতে কিছু সময় লাগে, তবে এর পরে এগুলি শক্ত এবং সামঞ্জস্যপূর্ণ এবং কার্যকর। সিঙ্গলটনে আপনি যা চান তার মতো অনেকগুলি পদ্ধতি আপনার থাকতে পারে, এবং এটি বস্তুর মেমরির পদচিহ্নটি বাড়িয়ে তুলতে পারে, এটি দ্রুত বিকাশের জন্য প্রয়োজনীয় সময়ে আরও অনেক বেশি সঞ্চয় এনে দেয় - একটি পদ্ধতি যা আপনি কোনও একটি উদাহরণ হিসাবে ব্যবহার করছেন না একটি অ্যাপ্লিকেশন অন্য সংহত একটিতে ব্যবহার করা যেতে পারে, এবং আপনি কেবল একটি নতুন বৈশিষ্ট্যটি চড় মারতে পারেন যা ক্লায়েন্ট / বস / প্রকল্প পরিচালক আপনাকে কিছু পরিবর্তন করে জিজ্ঞাসা করবেন।
আপনি ধারণা পেতে। এখন আসুন সিঙ্গলটনের আপত্তি এবং কার্যকর যে কোনও কিছুর বিরুদ্ধে অশুচি ক্রুসেড :
- সর্বাধিক আপত্তি এটি পরীক্ষা আরও কঠিন করে তোলে।
এবং সত্যই, এটি কিছুটা হলেও কার্যকর হয়, এমনকি যদি আপনার সিঙ্গেলনে ডিবিগিংয়ের রুটিনগুলি আপনার সিঙ্গেলটনের মধ্যে যথাযথ সতর্কতা অবলম্বন করে এবং ডিবাগিং রুটিনগুলি কোড করে সহজেই হ্রাস করা যায় তবে আপনি উপলব্ধি করতে পারেন যে আপনি একটি সিঙ্গলটন ডিবাগ করবেন। তবে দেখুন, এটি অন্য যে কোনও কোডিং দর্শন / পদ্ধতি / প্যাটার্নের চেয়ে খুব বেশি আলাদা নয় - এটি কেবলমাত্র, সিঙ্গলেটগুলি তুলনামূলকভাবে নতুন এবং বিস্তৃত নয়, সুতরাং বর্তমান পরীক্ষার পদ্ধতিগুলি তাদের সাথে তুলনামূলকভাবে বেমানান হিসাবে শেষ হচ্ছে। তবে প্রোগ্রামিং ভাষার কোনও ক্ষেত্রে এটি আলাদা নয় - বিভিন্ন শৈলীর জন্য পৃথক পদ্ধতির প্রয়োজন require
এক্ষেত্রে এই আপত্তিটি সমালোচিত হয়, এটি এড়িয়ে যায় যে অ্যাপ্লিকেশনগুলি যে কারণে বিকশিত হয়েছে সেগুলি 'পরীক্ষার' জন্য নয়, এবং পরীক্ষাগুলি একমাত্র পর্যায়ে / প্রক্রিয়া নয় যা কোনও অ্যাপ্লিকেশন বিকাশে যায়। অ্যাপ্লিকেশন উত্পাদন ব্যবহারের জন্য তৈরি করা হয়। এবং যেমনটি 'সিংলেটনের প্রয়োজন' বিভাগে আমি ব্যাখ্যা করেছি, সিঙ্গেলনগুলি কোডের কাজ করার জটিলতা থেকে অনেক বড় কোডবেস / অ্যাপ্লিকেশন / তৃতীয় পক্ষের পরিষেবা অন্তর্ভুক্ত করে একটি বৃহত্তর চুক্তিটি কেটে ফেলতে পারে। সময় যা পরীক্ষায় হারিয়ে যেতে পারে, সময়টি উন্নয়ন এবং স্থাপনায় সময় অর্জন করে। এটি তৃতীয় পক্ষের প্রমাণীকরণ / অ্যাপ্লিকেশন / ইন্টিগ্রেশন - ফেসবুক, টুইটার, ওপেনআইডি, এবং আরও অনেক কি এবং এরপরে কী জানে এই যুগে বিশেষত কার্যকর।
যদিও এটি বোধগম্য - প্রোগ্রামাররা তাদের কেরিয়ারের উপর নির্ভর করে খুব ভিন্ন পরিস্থিতিতে কাজ করে। এবং সংজ্ঞায়িত বিভাগগুলির সাথে একটি স্বাচ্ছন্দ্যময় ফ্যাশনে এবং বাজেটের কাট / ছাঁটাইয়ের আসন্ন কসরত ছাড়াই তুলনামূলকভাবে বড় সংস্থাগুলিতে কাজ করা লোকদের এবং প্রচুর বিভিন্ন স্টাফ সহ প্রচুর স্টাফ করার প্রয়োজনে একটি সস্তা / দ্রুত / নির্ভরযোগ্য ফ্যাশন, সিঙ্গলেটগুলি এত প্রয়োজনীয় বলে মনে হচ্ছে না। এবং এটি এমনকি তারা যা আছে তা থেকে উপদ্রব / প্রতিবন্ধক হতে পারে।
তবে যাদের 'চটচটে' বিকাশের নোংরা খাদে কাজ করা দরকার, তাদের ক্লায়েন্ট / ম্যানেজার / প্রকল্পের কাছ থেকে অনেকগুলি অনুরোধ (কখনও কখনও অযৌক্তিক) প্রয়োগ করতে হয়, তাদের জন্য সিঙ্গেলনগুলি পূর্বে বর্ণিত কারণগুলির কারণে সঞ্চয়ী অনুগ্রহ।
- আরেকটি আপত্তি হ'ল এর মেমরির পদচিহ্ন বেশি
যেহেতু প্রতিটি ক্লায়েন্টের প্রতিটি অনুরোধের জন্য একটি নতুন সিঙ্গলটন উপস্থিত থাকবে, এই পিএইচপি-র জন্য আপত্তি হতে পারে। খারাপভাবে নির্মিত এবং ব্যবহৃত সিলেটনের সাহায্যে অনেক ব্যবহারকারী যদি কোনও নির্দিষ্ট সময়ে অ্যাপ্লিকেশন দ্বারা পরিবেশন করা হয় তবে কোনও অ্যাপ্লিকেশনটির মেমরির পদচিহ্ন আরও বেশি হতে পারে।
যদিও, জিনিস কোডিংয়ের সময় আপনি যে কোনও ধরণের পদ্ধতির গ্রহণ করতে পারেন এর জন্য এটি বৈধ। যে প্রশ্নগুলি জিজ্ঞাসা করা উচিত তা হ'ল, এই সিঙ্গলটনের দ্বারা পরিচালিত এবং প্রক্রিয়াজাত পদ্ধতিগুলি, ডেটাগুলি কি অপ্রয়োজনীয়? কারণ, যদি অনুরোধগুলির অনেকগুলি জুড়ে তারা প্রয়োজনীয় হয় তবে আপনি যদি সিঙ্গেলন ব্যবহার না করেন, সেই পদ্ধতিগুলি এবং ডেটা কোডের মাধ্যমে কোনও ফর্ম বা অন্য কোনও ক্ষেত্রে আপনার আবেদনে উপস্থিত থাকবে। সুতরাং, আপনি কোড মেশিনে কোনও aতিহ্যবাহী শ্রেণীর বস্তু 1/3 আরম্ভ করবেন এবং এর মধ্যে এটি 3/4 নষ্ট করে দিলে আপনি কতটা মেমরি সঞ্চয় করবেন তা একটি প্রশ্ন হয়ে ওঠে।
দেখুন, এই ভাবে রাখলে, প্রশ্নটি বেশ অপ্রাসঙ্গিক হয়ে যায় - আপনার কোডে কোনওভাবেই অপ্রয়োজনীয় পদ্ধতি, ডেটা রাখা উচিত নয় - আপনি সিলেটলেট ব্যবহার করেন বা না করেন তা নির্বিশেষে। সুতরাং, সিঙ্গলেটের প্রতি এই আপত্তিটি সত্যিই হাসিখুশি হয়ে ওঠে, এটি বিশ্বাস করে যে আপনার ব্যবহৃত শ্রেণিগুলি থেকে তৈরি অবজেক্টগুলিতে অপ্রয়োজনীয় পদ্ধতি, ডেটা থাকবে।
- 'একাধিক ডাটাবেস সংযোগগুলি অসম্ভব / শক্ত করে তোলে' এর মতো কিছু অবৈধ আপত্তি
আমি এমনকি এই আপত্তিটি বোঝা শুরু করতে পারি না, যখন প্রত্যেকের একাধিক ডাটাবেস সংযোগ, একাধিক ডাটাবেস নির্বাচন, একাধিক ডাটাবেস প্রশ্ন, একাধিক ফলাফল সেট একটি সিঙ্গলটনে বজায় রাখার দরকার হয় কেবল তাদের দীর্ঘকাল ধরে সিঙ্গলটনে ভেরিয়েবল / অ্যারে রাখে as তারা প্রয়োজন হয়। এটি অ্যারে রাখার মতোই সহজ হতে পারে, যদিও আপনি এটি কার্যকর করতে যে কোনও পদ্ধতি ব্যবহার করতে চান তা আবিষ্কার করতে পারেন। তবে আসুন সবচেয়ে সহজ কেসটি, প্রদত্ত সিঙ্গলটনে ভেরিয়েবল এবং অ্যারে ব্যবহার পরীক্ষা করা যাক:
কল্পনা করুন যে নীচে একটি প্রদত্ত ডাটাবেস একক এর ভিতরে আছে:
$ এটি -> সংযোগগুলি = অ্যারে (); (ভুল বাক্য গঠন, আমি আপনাকে ছবিটি দেওয়ার জন্য ঠিক এটি টাইপ করেছি - ভেরিয়েবলের সঠিক ঘোষণাটি হ'ল সর্বজনীন $ সংযোগগুলি = অ্যারে (); এবং এর ব্যবহারটি $ এই-> সংযোগগুলি ['সংযোগকি'] প্রাকৃতিকভাবে)
আপনি সেট আপ করতে পারেন, এবং এই ফ্যাশনের একটি অ্যারেতে যে কোনও সময় একাধিক সংযোগ রাখতে পারেন। এবং একই ক্যোয়ারী, ফলাফল সেট এবং আরও জন্য।
$ এটি -> ক্যোয়ারী (QUERYSTRING, 'ক্যোয়ারাম নাম', $ এই-> সংযোগগুলি ['পার্টিকুলার কানেকশন']);
যা কেবলমাত্র একটি নির্বাচিত সংযোগের সাথে একটি নির্বাচিত ডাটাবেজে একটি ক্যোয়ারী করতে পারে এবং আপনার মধ্যে কেবল সঞ্চয় করতে পারে
$ এটি -> ফলাফল
কী 'প্রশ্নের নাম' দিয়ে অ্যারে। অবশ্যই, আপনার এর জন্য আপনার প্রশ্নের পদ্ধতি কোডিং করা দরকার - যা করা তুচ্ছ।
এটি আপনাকে কার্যত অসীম সংখ্যার (যেমন রিসোর্স সীমা যতটা অবশ্যই অনুমতি দেয়) বিভিন্ন ডাটাবেস সংযোগ এবং ফলাফলের যতটা প্রয়োজন সেগুলি বজায় রাখতে সক্ষম করে। এবং এগুলি যে কোনও সিঙ্গলটন শ্রেণিতে তাত্ক্ষণিকভাবে দেওয়া হয়েছে এমন কোনও নির্দিষ্ট কোডবেজে যে কোনও নির্দিষ্ট পয়েন্টে কোডের যে কোনও টুকরোতে উপলব্ধ are
অবশ্যই, আপনার প্রয়োজন নেই যখন ফলাফলের সেটগুলি এবং সংযোগগুলি মুক্ত করতে হবে - তবে এটি বলার অপেক্ষা রাখে না, এবং এটি সিলেটলেট বা অন্য কোনও কোডিং পদ্ধতি / স্টাইল / ধারণাটির সাথে নির্দিষ্ট নয়।
এই মুহুর্তে, আপনি দেখতে পাবেন যে কীভাবে আপনি একই সিঙ্গলটনে তৃতীয় পক্ষের অ্যাপ্লিকেশন বা পরিষেবাগুলিতে একাধিক সংযোগ / রাজ্য বজায় রাখতে পারেন। এত আলাদা নয়।
দীর্ঘ গল্প সংক্ষেপে, শেষ পর্যন্ত, সিঙ্গেলন নিদর্শনগুলি প্রোগ্রাম করার জন্য কেবল অন্য পদ্ধতি / শৈলী / দর্শন এবং এগুলি সঠিক জায়গায়, সঠিক ফ্যাশনে ব্যবহৃত হলে এগুলি অন্য যে কোনও হিসাবে কার্যকর। যা কোনও কিছুর থেকে আলাদা নয়।
আপনি লক্ষ্য করবেন যে বেশিরভাগ নিবন্ধগুলিতে সিলেটলেটগুলি ভিত্তিযুক্ত, আপনি 'গ্লোবালগুলি' 'দুষ্ট' হওয়ার উল্লেখ দেখতে পাবেন।
আসুন এটির মুখোমুখি হোন - এমন কোনও কিছুই যা সঠিকভাবে ব্যবহৃত হয় না, অপব্যবহার হয় না, অপব্যবহার হয় তা IS মন্দ। এটি কোনও ভাষা, কোনও কোডিং ধারণা, কোনও পদ্ধতিতেই সীমাবদ্ধ নয়। আপনি যখনই কাউকে 'এক্স ইজ ইজ ਬੁਰ' এর মতো কম্বল স্টেটমেন্ট ইস্যু করতে দেখেন তখন এই নিবন্ধটি থেকে দূরে চলে যান। সম্ভাবনাগুলি খুব বেশি যে এটি একটি সীমাবদ্ধ দৃষ্টিভঙ্গির পণ্য - এমনকি দৃষ্টিকোণ কোনও বিশেষ কিছু বছরের বছরের অভিজ্ঞতার ফলস্বরূপ - যা সাধারণত কোনও নির্দিষ্ট শৈলীতে / পদ্ধতিতে খুব বেশি কাজ করার ফলাফল হিসাবে শেষ হয় - সাধারণ বৌদ্ধিক রক্ষণশীলতা ism
এর জন্য অন্তহীন উদাহরণ দেওয়া যেতে পারে, 'গ্লোবালগুলি মন্দ হয়' থেকে শুরু করে 'আইফ্রেমেসটি মন্দ হয়' থেকে শুরু করে। প্রায় 10 বছর পূর্বে, এমনকি কোনও প্রদত্ত অ্যাপ্লিকেশনটিতে আইফ্রেম ব্যবহারের প্রস্তাব দেওয়া ছিল ধর্মবিরোধী। তারপরে ফেসবুক আসে, সর্বত্র iframes আসে এবং দেখুন কী ঘটেছিল - iframes আর তেমন মন্দ হয় না।
এখনও আছে এমন লোকেরা যারা জেদীভাবে দৃ'়ভাবে জোর দিয়েছিলেন যে তারা 'দুষ্ট' - এবং কখনও কখনও ভাল কারণেও হয় - তবে, আপনি দেখতে পাচ্ছেন, একটি প্রয়োজন আছে, যদি ইফ্রেমগুলি সেই প্রয়োজনটি পূরণ করে এবং ভালভাবে কাজ করে, এবং তাই পুরো পৃথিবী কেবল এগিয়ে চলেছে।
প্রোগ্রামার / কোডার / সফটওয়্যার ইঞ্জিনিয়ারের সর্বাধিক সম্পত্তি হ'ল একটি মুক্ত, উন্মুক্ত এবং নমনীয় মন।