সি # তে "স্ট্যাটিক" ব্যবহার করবেন না?


109

আমি কোড পর্যালোচনার জন্য আমি অন্য কিছু স্থপতিদের কাছে লিখেছি একটি আবেদন জমা দিয়েছি। তাদের মধ্যে একজন প্রায় তাত্ক্ষণিকভাবে আমাকে ফিরে লিখেছিলেন এবং বলেছিলেন "" স্ট্যাটিক "ব্যবহার করবেন না। আপনি স্ট্যাটিক ক্লাস এবং পদ্ধতি দিয়ে স্বয়ংক্রিয় পরীক্ষা লিখতে পারবেন না।" স্ট্যাটিক "এড়ানো উচিত" "

আমি পরীক্ষা করে দেখেছি এবং আমার ক্লাসগুলির সম্পূর্ণ 1/4 টি "স্থিতিশীল" হিসাবে চিহ্নিত আছে। আমি স্থিতিশীল ব্যবহার করি যখন আমি কোনও শ্রেণীর উদাহরণ তৈরি করতে যাব না কারণ ক্লাসটি কোড জুড়ে ব্যবহৃত একক বিশ্বব্যাপী শ্রেণি।

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

এই অন্য স্থপতি সঠিক?

আপডেট: এখানে একটি উদাহরণ:

এপিআইএমএঞ্জার - এই শ্রেণিটি তৃতীয় পক্ষের এপিআইয়ের অভিধান রাখে যা পরবর্তী অনুমতি প্রাপ্ত সময়ের সাথে আমি কল করছি। এটি অনেকগুলি তৃতীয় পক্ষের তাদের পরিষেবার শর্তাদি রয়েছে এমন API ব্যবহারের সীমাটি কার্যকর করে। আমি থ্রেড.স্লিপ (এপিআইএমএনএজিআর.গেটওয়েট ("প্রোভাইডার এক্সওয়াইজেড")) কে কল করে তৃতীয় পক্ষের পরিষেবাটিতে যে কোনও জায়গায় কল করছি আমি এটি ব্যবহার করি; কল করার আগে এখানে থাকা সমস্ত কিছুই থ্রেড নিরাপদ এবং এটি সি # তে টিপিএল সহ দুর্দান্ত কাজ করে।


37
staticভাল; static ক্ষেত্রগুলিকে খুব সাবধানে চিকিত্সা করা দরকার
মার্ক গ্র্যাভেল

2
কেন তিনি তৃতীয় পক্ষের লাইব্রেরির জন্য পরীক্ষা লিখবেন? তৃতীয় পক্ষের লাইব্রেরিটির নির্মাতারা কি তাদের পরীক্ষা করেছেন তা ধরে নিয়ে আপনি কি কেবল নিজের কোড পরীক্ষা করেন না?
নাহ

3
এই বিশেষ আপত্তিটি আমার পক্ষে কিছুটা সাধারণ। বেশিরভাগ ক্ষেত্রে আপনি স্ট্যাটিক ক্লাসকে মক্জ করবেন না, আপনি যুক্তিগুলিকে উপহাস করবেন। স্থিতিশীল ক্ষেত্র যেখানে এটি একটি সামগ্রিক শ্রেণি ছিল যার উপহাস করার দরকার ছিল, তবে হ্যাঁ।

8
স্পষ্টতই আপনার সহকর্মীদের একটি গুরুতর অবস্থা রয়েছে - একটি তীব্র সিস্টেমিক ওওপাস এরিথেথোসাস। তাদের তাত্পর্যপূর্ণ চিকিত্সা দরকার!
এসকে-যুক্তি

6
উত্তর সরবরাহ করার জন্য একটি উত্তর বিভাগ রয়েছে, আমি বুঝতে পারি না কেন লোকেরা কাউকে উত্তর / পরামর্শ দেওয়ার চেষ্টায় মন্তব্য করে ... এটি স্ট্যাক এক্সচেঞ্জের উদ্দেশ্যকে পরাভূত করে, অবশ্যই একটি মন্তব্য আরও তথ্যের জন্য অনুরোধ করা হবে।
পেটেস্কি

উত্তর:


121

এটি স্ট্যাটিক ক্লাসগুলি রাষ্ট্র বজায় রাখে বা না তার উপর নির্ভর করে। ব্যক্তিগতভাবে, স্ট্যাটিক ক্লাসে একসাথে ফেলে দেওয়া রাষ্ট্রহীন কার্যাবলী নিয়ে আমার কোনও সমস্যা নেই।


111
সঠিক। স্ট্যাটিক ফাংশন যার কোনও পার্শ্ব প্রতিক্রিয়া নেই সেগুলি হ'ল সকলের পরীক্ষার ফাংশন।
রবার্ট হার্ভে

9
এটির জন্য +1 তবে সুরক্ষা দফার সাথে: প্রায় প্রতিটি বিমূর্ত অ্যালগরিদম রাষ্ট্রহীন, তবে এর অর্থ এই নয় যে আপনার এটিকে রাষ্ট্রবিহীন স্ট্যাটিক শ্রেণি বা পদ্ধতি হিসাবে প্রয়োগ করা উচিত। এটি এ জাতীয়ভাবে প্রয়োগ করে এটি ব্যবহার করে সমস্ত কোড এর সাথে খুব কম সংযুক্ত হয়ে যায়। উদাহরণস্বরূপ এটির অর্থ হ'ল যদি আপনি স্থির পদ্ধতি হিসাবে বাছাই অ্যালগরিদমকে প্রয়োগ করেন এবং প্রকল্পের মাধ্যমে ব্যবহার করেন - আপনি অস্থায়ীভাবে বাছাইটিকে অন্য অ্যালগরিদমের প্রতিস্থাপন করতে পারবেন না পরীক্ষার উদ্দেশ্যে এবং সমস্যার ক্ষেত্র সঙ্কুচিত করার জন্য। এটি অনেক ক্ষেত্রেই বিশাল বাধা। এর বাইরে, যদি যুক্তিসঙ্গতভাবে ব্যবহার করা হয় তবে স্ট্যাটিক পুরোপুরি ঠিক।

11
সংক্ষেপে: এগুলি সবচেয়ে পরীক্ষামূলক ফাংশন, তবে নেসসারিলি নয় তারা অন্যান্য কোডকে আরও পরীক্ষামূলক করে তোলে ! স্থপতি সম্ভবত এটি বোঝাতে চেয়েছিলেন।

4
@ তেরেখো: সি # ভাষার স্থিতিশীল পদ্ধতিগুলির প্রয়োজন একটি স্ট্যাটিক শ্রেণীর অংশ হতে, যদি আপনি পদ্ধতিটি কল করার জন্য শ্রেণীর কোনও উদাহরণ তৈরি করতে না চান। সম্ভবত আপনার অর্থ "উদাহরণ," এবং "শ্রেণি" নয়।
রবার্ট হার্ভে

8
@ কোয়েটজলকোয়াটল: একটি স্থির পদ্ধতিতে একটি প্রতিনিধি (অর্থাত্‍ একটি ভিন্ন অ্যালগরিদম) পাস করা পুরোপুরি আইনী; লিনকের এক্সটেনশন পদ্ধতিগুলি হ'ল সমস্ত অচল পদ্ধতি। উদাহরণ: এমএসডিএন.মাইক্রোসফটকম
রবার্ট হার্ভে

93

তিনি এ সম্পর্কে খুব সাধারণ। তিনি সঠিক, এটি পরীক্ষায় বাধা দেয়। যাইহোক, staticক্লাস এবং পদ্ধতিগুলির নিজস্ব স্থান রয়েছে এবং এটি সত্যই প্রসঙ্গে নির্ভর করে। কোড উদাহরণ ব্যতীত আপনি সত্যিই বলতে পারবেন না।

আমি স্থিতিশীল ব্যবহার করি যখন আমি কোনও শ্রেণীর উদাহরণ তৈরি করতে যাব না কারণ ক্লাসটি কোড জুড়ে ব্যবহৃত একক বিশ্বব্যাপী শ্রেণি।

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

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


3
+1 উল্লেখ করার জন্য যে বিবৃতিটি সাধারণ ছিল এবং এক্সটেনশন পদ্ধতিগুলি উল্লেখ করা হয়েছিল, এটিও পরীক্ষা করা যেতে পারে এবং নির্ভরতা এখনও আমার উপাসনা করা যায় I
নাহ

4
আয়ে স্থির একক শ্রেণীর উদাহরণ হিসাবে অন্তর্নিহিত সিঙ্গলটন হিসাবে, এটি অগোছালো হতে চলেছে ....

"একটি ডাটাবেস অ্যাক্সেস করতে?" কেন না ? যদি টেবিল অ্যাডাপ্টার স্থিতিশীল না থাকে তবে একটি স্ট্যাটিক ক্লাস তৈরি করুন @ জোরালোভাবে টাইপ করা ডেটাসেট, এতে কোনও দোষ নেই .... আপনি যদি রেফারেন্স বা উদাহরণ দিয়ে নিজের বক্তব্য প্রমাণ না করেন তবে?
গণিত

27

আমি পরীক্ষা করে দেখেছি এবং আমার ক্লাসগুলির সম্পূর্ণ 1/4 টি "স্থিতিশীল" হিসাবে চিহ্নিত আছে। আমি স্থিতিশীল ব্যবহার করি যখন আমি কোনও শ্রেণীর উদাহরণ তৈরি করতে যাব না কারণ ক্লাসটি কোড জুড়ে ব্যবহৃত একক বিশ্বব্যাপী শ্রেণি।

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

যদি হ্যাঁ, এটি আপনার কোড রক্ষার জন্য একটি বৈধ পয়েন্ট। তবে, যদি আপনার সমস্যা হয়, তবে সম্ভবত আপনার উদাহরণ-ভিত্তিক পদ্ধতিতে যাওয়া উচিত।


7
এটিই আমার পক্ষে আঘাত পেয়েছিল। কয়েকটি স্থিতিশীল এবং রাষ্ট্রহীন 'সহায়ক' শৈলীর ক্লাস ভাল, তবে আপনি যদি আপনার সমস্ত ক্লাসের 25% স্থির হিসাবে পেয়ে থাকেন তবে আপনার প্রচেষ্টা সেই ক্ষেত্রে সীমাবদ্ধ হওয়ার সম্ভাবনা কম।
ম্যাথু শার্লে

2
@ ম্যাটহেসার্লি - তিনি সম্ভবত 4 টি ক্লাস পেয়েছিলেন এবং তাদের মধ্যে 1 টি স্ট্যাটিক :)
অ্যালেক্সাস

1
দেখুন যে আপনি যদি এই জাতীয় স্টিবিসি ব্যবহার করেন (যেমন সিলেটলেটস), তবে পরে আরও উদাহরণ তৈরি করা খুব কঠিন কাজ হতে পারে। যেমন কোনও নথিকে পরিচালনা করে এমন কোনও অ্যাপ্লিকেশন তৈরি করা, আপনি যখন একাধিক ডকুমেন্ট পরিচালনা করতে চান তখন আপনি সমস্যার মধ্যে পরে যান।
মিশেল কেইজার্স

11

ইতিমধ্যে পোস্ট করা উত্তরগুলিতে অনেকগুলি ভাল পয়েন্ট রয়েছে তবে এটির একটি রয়েছে যা অনুপস্থিত বলে মনে হচ্ছে:

স্থির ক্ষেত্র কখনও আবর্জনা সংগ্রহ করা হয় না

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

স্ট্যাটিক ফাংশনগুলি প্রায় ততটা খারাপ নয়, তবে অন্য প্রত্যেকে ইতিমধ্যে এটিকে যথেষ্ট বিশদে আবরণ করেছে।


10

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

সি # এর মেটাক্লাস নেই বলে কোনও শ্রেণি স্থির বৈশিষ্ট্যগুলি ব্যবহার করে কোনও ইন্টারফেস প্রয়োগ করতে পারে না, সুতরাং ক্লাসগুলির স্থির বৈশিষ্ট্যগুলি খাঁটি আইওসি / ডিআই আইজেক্ট মডেল বাস্তবায়নের জন্য কোনও প্রচেষ্টা চালিয়ে যায়। এর অর্থ হল, আপনি এগুলি পরীক্ষা করার জন্য কোনও মক তৈরি করতে পারবেন না এবং আপনাকে প্রকৃত নির্ভরতা তৈরি করতে হবে।

যদি আপনার সংস্থা / প্রকল্পটি আইওসি করার ক্ষেত্রে প্রচুর পরিমাণে বিনিয়োগ করা হয় তবে অবশ্যই এটি একটি যুক্তিসঙ্গত উদ্বেগ এবং আপনি যে ব্যথাটি নিয়ে যাচ্ছেন তা হ'ল সকলের লাভ। কোনও স্থাপত্য দৃষ্টিকোণ থেকে, তবে আমি ব্যক্তিগতভাবে মনে করি না যে কোনও মডেল কবরের দিকে চলে যেতে হবে। কিছু জিনিস রয়েছে যা স্থির পদ্ধতি ব্যবহার করে বাস্তবায়নের জন্য অর্থ দেয় - উদাহরণস্বরূপ, সিঙ্গলটন ডিজাইন কৌশল। আমি স্ট্যাটিক ক্লাসের দিকে আমার খুব কম ঝোঁক কারণ আমার মনে হয় তারা ওও এর সুবিধাগুলি হারাতে শুরু করে, তবে এমন সময় আসে যখন একটি লাইব্রেরি ক্লাস সম্ভবত ইঞ্জিনের চেয়ে কোনও কিছুর আরও বেশি প্রাকৃতিক অভিব্যক্তি হয়।


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


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

1
আপনি এবং আমি সাধারণ বিষয়টিতে একমত যে আপনার সঠিক কাজের জন্য সঠিক সরঞ্জামটি বেছে নেওয়া উচিত এবং দর্শনের দ্বারা হাতকড়া না দেওয়া উচিত। তবে, যদি আপনার খাঁটি আইওসি / ডিআই-র প্রকল্পে একটি সুপ্রতিষ্ঠিত সংস্কৃতি থাকে তবে এটি আইওসি / ডিআই-তে একটি traditionতিহ্যগতভাবে শীর্ষ-ডাউন সমাধানকে রূপান্তর করার মতোই ক্ষতিগ্রস্থ করবে। ইঞ্জিনিয়ারিংয়ের অন্তর্বর্তী ব্যয় বিবেচনা করা দরকার। বাই বাই, আমি মনে করি না এক্সটেনশন পদ্ধতিগুলি আপনাকে সেখানে যথেষ্টভাবে পেয়ে যায়। আমি মনে করি স্ট্যাটিক শ্রেণীর সাথে IoCish আচরণের জন্য ভাল সমাধান প্রাক প্রসেসর নির্দেশনা কম্পাইল সময়ে মধ্যে মনোনীত একাধিক ক্লাস আছে হবে, সি শৈলী
jwrush

1
Er। আমি বকা. আপনি হোল্ডিং এক্সটেনশন পদ্ধতিগুলির জন্য একটি স্ট্যাটিক ক্লাস বোঝাতে চেয়েছিলেন, অবশ্যই এটি আপনাকে কীভাবে করতে হবে। হ্যাঁ, অবশ্যই, আপনি সেই উদ্দেশ্যে একটি স্ট্যাটিক ক্লাস চান। এটি আমার মনকে পিছলে ফেলেছিল: এবং এটি দেখায় যে সি # আইওসির উদ্দেশ্যে নয়। :)
jwrush

হ্যাঁ, আপনি ঠিক বলেছেন, কোনও বিদ্যমান প্রকল্পে যদি কোনও বিদ্যমান সংস্কৃতি বিদ্যমান থাকে তবে জিনিসগুলি যেভাবে করা হচ্ছে তা পরিবর্তন করতে সহায়তা করার চেয়ে ক্ষতি করা আরও বেশি।
নাঃ

5

স্ট্যাটিক ক্লাসগুলি কখনও কখনও অপব্যবহার করা হয় এবং এটি হওয়া উচিত:

  • একটি সিঙ্গলটন (যেখানে অ স্থির শ্রেণীর স্থির সদস্য এবং একটি পাবলিক স্ট্যাটিক ইনস্ট্যান্স ভেরিয়েবল কেবল এটি পুনরুদ্ধার / তৈরি করার জন্য রয়েছে once
  • অন্য শ্রেণিতে একটি পদ্ধতি (যেখানে রাষ্ট্র গুরুত্বপূর্ণ)। আপনার যদি এমন কোনও সদস্য রয়েছেন যা class শ্রেণীর কোনও ডেটা ব্যবহার করছে না, সম্ভবত এটি class শ্রেণীর অংশ হওয়া উচিত নয়।

এটি একটি তথাকথিত 'ইউটিলিটি' ফাংশন এবং কোনও ইউটিলিটি শ্রেণীর অংশও হতে পারে। ইউটিলিটি ক্লাসগুলি এমন ক্লাস যা কেবল স্থিতিশীল পদ্ধতি ধারণ করে এবং কোনও প্রসঙ্গ ছাড়াই সহায়ক ফাংশন হিসাবে পরিবেশন করে।


@ টমপোর্টো কারণ শ্রেণিটি তার নির্মাণকারীর দ্বারা একাধিক অবজেক্ট / দৃষ্টান্তগুলির ফলে ইনস্ট্যান্ট করা উচিত নয়, তবে একটি বিশেষ পদ্ধতি দ্বারা (সাধারণত উদাহরণ ()) <যা সর্বদা একই দৃষ্টিতে ফিরে আসে, প্রথম কল করার পরে ইনস্ট্যান্ট করে ()।
মিশেল কেইজার্স

@ টমপোর্টো আমি সবেমাত্র যাচাই করেছি এবং আপনি সম্পূর্ণ সঠিক, কেবলমাত্র কিছু সদস্য স্থিতিশীল (উদাহরণ পরিবর্তনশীল এবং উদাহরণ ফাংশন)। আমি আমার উত্তর অনুসারে পরিবর্তন করব; উল্লেখ করার জন্য ধন্যবাদ
মিশেল কেইজার্স 21

4

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


1

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

পিএইচপি উদাহরণ:

class vendorData {
  private static $data_table = 'vendor_data'; // static property
  private $id; // instance property
  private $name; // instance property

  public function __construct($vendor_id) {
    if(!self::validId($vendor_id) ) { // static method
      return false; // id doesn't exist
    }
    $this->id = $vendor_id; // id has been validated
    $this->getProperties(); // object method
  }

  private static function validId($vendor_id) {
    // send db query to find if the id exists
    // return true/false;
  }

  private function getProperties() { // object method
    $sql = "SELECT * FROM `{self::$data_table}` // using static property
        WHERE `id` = {$this->id}"; // using object instance property
    // get resultset
    foreach($result as $property => $value) {
      $this->$property = $value; // object instance properties all set
    }
  }

  // and here
  public static function getBy($property,$value) { // static method to return object array
    $sql = "SELECT `id` FROM `{self::$data_table}` // using static property
      WHERE `$property` = '$value'";
    // send query, get $ids array
    $obj_array = array();
    foreach($ids as $id) {
      // create array of current class objects using special static keyword
      // meaning of static here is different than in property/method declarations
      $obj_array[$id] = new static($id);
    }
    return $obj_array;
  }
}

1

আমি বলব তাদের নীতিমালা ঠিক আছে তবে বিবৃতি (স্ট্যাটিক্স ব্যবহার করবেন না) ভুল হতে পারে। আপনার কোড কভারেজ কত? যদি নম্বরটি বেশি হয় এবং আপনি আপনার অ্যাপ্লিকেশনটির ইউনিট পরীক্ষায় আরামদায়ক হন তবে আপনি ঠিক আছেন you যদি তা না হয় তবে আমি কোডটি পর্যালোচনা করার পরামর্শ দেব। আপনি দেখতে পাচ্ছেন স্থির ক্লাসগুলি কারণ বা না কারণ এটি অনেক কিছুর উপর নির্ভর করবে।


-3

স্থির পদ্ধতি সহ ক্লাসগুলি ওওপির নীতিগুলিকে অপব্যবহার করে। এটি ইতিমধ্যে কোনও ওওপি নয়, এটি সিওপি - শ্রেণিকেন্দ্রিক প্রোগ্রামিং।

তাদের খুব কমই স্পষ্ট "ব্যক্তিত্ব" রয়েছে (আমি এখানে আমার প্রিয় মানব রূপক ব্যবহার করি ) বা পরিচয়। সুতরাং তারা কে তা তারা জানে না। ওওপি-তে এই ধারণাটি থেকে মুক্তি পাওয়ার জন্য এই পয়েন্টটি একাই যথেষ্ট, তবে এর মধ্যে আরও কিছু রয়েছে।

পরেরটি প্রথম পয়েন্টের পরিণতি। যেহেতু এই ধরণের শ্রেণিগুলি তারা না তা তারা জানে না, তাই তাদের প্রবণতা বড় থেকে বিশাল হতে থাকে।

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

আস্তে আস্তে, তবে অনিবার্যভাবে আপনার কোডটি কম এবং কম সমন্বিত হয়ে উঠছে, যেহেতু লুকানো নির্ভরতা খুব কম নিয়ন্ত্রিত। তারা অদৃশ্য বলে মনে হচ্ছে। এবং এটি অন্য একটি যুক্ত করা এত সহজ! আপনাকে কোনও পদ্ধতির স্বাক্ষর সংশোধন করতে হবে না। আপনাকে যা করতে হবে তা হ'ল স্থির পদ্ধতিতে কল করা। এবং কি একটি কুৎসিত কোড অনুসরণ করে ...

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

স্থির পদ্ধতির পরিবর্তে কী ব্যবহার করবেন? ঠিক আছে, আমার পরামর্শটি ওওপি। কেন চেষ্টা করে দিচ্ছেন না?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.