*** হেল্পার বা *** ইউটিলি ক্লাসের ব্যবহার যা কেবল স্থিতিশীল পদ্ধতিগুলিতে একটি অ্যান্টিপ্যাটার্ন থাকে


19

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

প্রায়শই এই ক্লাসগুলি কেবল স্থির পদ্ধতি ব্যবহার করেই সীমাবদ্ধ থাকে, যা অনেক কিছু করে। তবে বেশিরভাগ ক্ষেত্রে এটি প্রকৃতপক্ষে নির্ভরশীল এবং রাষ্ট্রীয় ull

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

এবং কোন ধরণের বিমূর্ত স্তরটিতে আপনি এই ধরণের ক্লাস ব্যবহার করা এড়াবেন?

আমার মতে "স্ট্যাটিক" কীওয়ার্ডটি কেবল কোনও ক্লাসের ঘোষণার মধ্যে (জাভা) অনুমোদিত হওয়া উচিত এবং পদ্ধতিগুলির জন্য নয়। আমার মতে এটি এটিকে ব্যবহার করে, জাভাতে প্রোকিউডুরাল- এবং ও-প্যারাডিজমগুলি একত্রিত করতে এবং কীওয়ার্ডটির অপব্যবহার এড়ানোর পক্ষে এটি একটি ভাল বিকল্প এবং মধ্যম পথ হতে পারে।

উত্তরের কারণে সংযোজন:

প্রথমে আমি মনে করি যে বিভিন্ন প্যারাডিজমগুলি একত্রিত করতে সক্ষম হওয়া এবং এমনকি মেশিন বা ভিএম সংকলিত কোডের মধ্যে রানটাইম ব্যাখ্যামূলক স্ক্রিপ্টিং ভাষা ব্যবহার করা সম্পূর্ণ বৈধ legal

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

আমি মনে করি staticজাভা থেকে অপসারণ করা উচিত। বিশেষত এখন যেখানে আরও পরিশীলিত কার্যকরী ভাষার উপাদান ব্যবহার করা সম্ভব।



আমি মনে করি যদি সহায়কটির কোনও শ্রেণি ইনস্ট্যান্ট করার দরকার না হয় তবে তা ঠিক আছে। সমস্যাটি হ'ল সহায়ক যখন কোনও শ্রেণীর একটি কংক্রিট বাস্তবায়ন ইনস্ট্যান্ট করে এবং তারপরে আপনি সেই ইন্টারফেসটিকে উপহাস করতে সক্ষম হন না। সহায়ক যদি কোনও ইন্টারফেস বা বিমূর্ত শ্রেণিতে পাস করে তবে আমি মনে করি এটি ঠিক আছে।
ববেক

যদি আপনি প্রসেসরিয়াল প্রোগ্রামিং করার দাবি করেন তবে ঠিক আছে। আপনি যদি অবজেক্ট (-রেন্ডেন্টেড) প্রোগ্রামিং করার দাবি করেন তবে তা নয়।
চিতল

1
@ স্পটেড: এবং দাবি করার কোনও ব্যবসায়ের মূল্য নেই যেহেতু আপনি কেবলমাত্র ওরিয়েন্টেড প্রোগ্রামিংকেই আপত্তি করেন, কেবল সর্বদা মিশ্র দৃষ্টান্তমূলক প্রোগ্রামিং করুন এবং বিষ্ঠা সম্পন্ন করুন।
রিমকো জারলিচ

নিখুঁতভাবে আমার বক্তব্যটি নোট করা ছিল যে উত্তরটি মূলত "দার্শনিক", যা সম্পর্কিত আপনি যে প্রোগ্রামিং দৃষ্টান্তটি বিবেচনা করে তা সম্পর্কিত।
চিতল

উত্তর:


20

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

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

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


2
@ টিমোথিট্রাকল হয় হয় তারা অচল, বা তাদের একটি অতিরিক্ত অতিরিক্ত thisপ্রয়োজন, এবং কোনও কিছু যথাযথভাবে ইনস্ট্যান্ট করা দরকার
কালেথ

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

5
@ টিমোথিট্রাকল একেবারে, রাষ্ট্রকে বজায় রাখা "ভাল নয়" হওয়ার মূল কারণ হবে।
নভেম্বর

2
@ উত্তর, আমি মনে করি এই উত্তরটি সুস্পষ্টভাবে উল্লেখ করে এই উত্তরটি আরও উন্নত হবে। রাষ্ট্রীয় স্ট্যাটিকস খারাপ; রাষ্ট্রহীন ভাল হয়। সত্যিই বেশ সহজ।
ডেভিড আরনো

3
পছন্দ করুন আপনি আলগা সংযোগ বর্ণনা করছেন। এই প্রসঙ্গে কঠোর মিলন কিছুটা আন্তঃনির্ভরশীলতা বোঝায়। একমুখী নির্ভরতা সেই প্রয়োজনীয়তা পূরণ করে না।
জিমি জেমস

18

স্ট্যাটিক ইউটিলিটি বা সহায়তা সহায়ক যদি কোনও গাইডলাইন মেনে চলেন তবে এটি কোনও বিরোধী নিদর্শন নয়:

  1. এগুলি পার্শ্ব প্রতিক্রিয়া থেকে মুক্ত হওয়া উচিত

  2. এগুলি অ্যাপ্লিকেশন নির্দিষ্ট আচরণের জন্য ব্যবহৃত হয় যা ক্লাস বা ক্লাসগুলির সাথে সম্পর্কিত নয় যেখানে এই ফাংশনগুলি পরিচালনা করে

  3. তাদের কোনও ভাগ করা রাষ্ট্রের প্রয়োজন হয় না

সাধারণ ব্যবহারের ক্ষেত্রে:

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

উদাহরণস্বরূপ আমি যে অ্যাপ্লিকেশনটিতে কাজ করেছি তারা তাদের ক্রিয়াকলাপের জন্য জার্নাল এন্ট্রি রাখে। তারা একটি ফলো-আপ তারিখ নির্দিষ্ট করতে পারে এবং ইভেন্টের অনুস্মারকটি ডাউনলোড করতে পারে। একটি জার্নাল এন্ট্রি নিতে এবং .ics ফাইলের জন্য কাঁচা পাঠ্য ফেরত দেওয়ার জন্য আমরা একটি স্ট্যাটিক ইউটিলিটি ক্লাস তৈরি করেছি।

এটির জন্য কোনও ভাগ করা রাষ্ট্রের প্রয়োজন হয়নি। এটি কোনও রাজ্যে রূপান্তরিত করে নি এবং আইকল ইভেন্ট তৈরি করা অবশ্যই অ্যাপ্লিকেশন নির্দিষ্ট ছিল এবং জার্নাল এন্ট্রি ক্লাসের অন্তর্ভুক্ত ছিল না।

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


4

এটি আপনার পদ্ধতির উপর নির্ভর করবে। শাস্ত্রীয় মানসিকতার বিপরীতে (আপনি যে সাইটগুলির স্যুটের স্যুটে প্রচুর পরিমাণে অন্তর্ভুক্ত) অনেকগুলি অ্যাপ্লিকেশনগুলি আরও কার্যকরী দিয়ে লেখা হয়।

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

এটি একটি বৈধ পদ্ধতির এবং খুব ভাল কাজ করতে পারে, বিশেষত স্কেল এ।


"খুব ভাল কাজ করতে পারে, বিশেষত স্কেলে" না। স্ট্যাটিক অ্যাক্সেসের সাথে সংঘবদ্ধ সংযোগের কারণটি শীঘ্রই আপনার প্রকল্পে বৃদ্ধি পাবে।
টিমোথি ট্রাকল

@ টিমোথিট্রাকল কীভাবে আপনি ব্যাখ্যা করতে পারবেন যে এজেন্ট.স্যাভ (ওজেক্ট) কতটা দৃly়ভাবে অবজেক্টের চেয়ে মিলিত হয়েছে? সেভ ()? এজেন্ট যেমন ডি এ / আইওসি রেফারেন্স পেতে সক্ষম, এমনকি এএ ক্লাস উদাহরণ হিসাবে স্থির পদ্ধতির জন্যও। রেফারেন্সের জন্য স্ট্যাক এক্সচেঞ্জ নিজেই এই ধরণের মানসিকতায় লিখিত এবং আমি সচেতন অন্য যে কোনও সংস্থার চেয়ে কম সংস্থান সহ অন্য যে কোনও এএসপি. নেট অ্যাপ্লিকেশনটির চেয়ে ভাল স্কেল করেছে।
ট্র্যাকার 1

"আপনি কী ব্যাখ্যা করতে পারেন যে এজেন্ট। সেভ (আপত্তি) কীভাবে অনেক বেশি দৃly়তার সাথে যুক্ত করা হয়েছে ওজেক্টের চেয়ে। সেভ ()?" এটি ভুল উদাহরণ। একটি সঠিক উদাহরণ Agent.Save(obj)বনাম হতে হবে agentInstance.Save(obj)। পরবর্তীটির সাথে আপনার ব্যবহার কোডটি ইনজেক্ট করার সম্ভাবনা রয়েছে agentInstance। ফল আপনি উদ্বুদ্ধ করতে পারেন কোন সন্তান বর্গ এর Agentখুব যা বিভিন্ন এর "ধরনের" সঙ্গে কোড ব্যবহার আরো og পুনঃব্যবহারের পারবেন Agentrecompiling ছাড়া। এটি কম সংযোগ
টিমোথি ট্রকল

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

2

আমি ব্যক্তিগতভাবে মনে করি যে এই ধরনের সহায়ক ক্লাসগুলি সম্পর্কে একমাত্র গুরুত্বপূর্ণ অংশটি তাদের ব্যক্তিগত করা উচিত। তা ছাড়া - এগুলি কঠোরভাবে একটি ভাল ধারণা (খুব কম প্রয়োগ করা হয়)।

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

এটি 'সহায়ক' হিসাবে লেবেল দেওয়া ব্যক্তিগত স্বাদের একটি ছোট বিষয়, তবে এটি বোঝায় যে এটি বাস্তবায়নে সহায়তা করে এবং এর বিস্তৃত দর্শকদের কোনও আগ্রহ / ব্যবহার নেই। যদি এটি বোধগম্য হয় - এটির জন্য যান!


1
পাবলিক ইউটিলিটি ক্লাসগুলি এখনও সহায়ক হতে পারে। প্রধানমন্ত্রী উদাহরণ: java.lang.Math
আমন

1

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

static সহায়ক শ্রেণিগুলি তিনটি কারণে বিরোধী প্যাটার্ন:

  1. এই সহায়ক পদ্ধতির স্থির অ্যাক্সেস নির্ভরতাগুলি গোপন করে । এই "ইউটিলিটি ক্লাস" যদি POJO হত তবে আপনি তাদেরকে নির্ভরশীল শ্রেণীর কাছে নির্মাণ প্যারামিটার হিসাবে ইনজেক্ট করতে পারবেন যা নির্ভরশীল শ্রেণীর কোনও ব্যবহারকারীর জন্য নির্ভরতা সুস্পষ্ট করে তুলবে।

  2. এই সহায়ক পদ্ধতির স্থির অ্যাক্সেসের কারণে দৃ tight় সংযোগ ঘটে । এর অর্থ হেল্পার পদ্ধতিগুলি ব্যবহার করে কোডটি পুনরায় ব্যবহার করা শক্ত এবং (পার্শ্ব প্রতিক্রিয়া হিসাবে) হার্ট পরীক্ষা করা।

  3. বিশেষত যদি তারা রাষ্ট্র বজায় রাখে তবে এগুলি কেবলমাত্র বৈশ্বিক চলক । এবং আশা করি কেউই তর্ক করেনি যে বৈশ্বিক পরিবর্তনগুলি কোনও ভাল ...

স্ট্যাটিক সহায়ক ক্লাসগুলি স্টুপিড কোড অ্যান্টি প্যাটার্নের অংশ।


গ্লোবাল স্টেট প্রশ্নটির সাথে সম্পর্কিত নয় - সর্বোচ্চ 30৩০

ওপি লিখেছিল:

তবে বেশিরভাগ ক্ষেত্রে এটি প্রকৃতপক্ষে নির্ভরশীল এবং রাষ্ট্রীয় ull

স্ট্যাটিক statefull নির্মান হয় বিশ্বব্যাপী যুক্তরাষ্ট্র।

যে কোনও ধরণের কোড এটি ব্যবহার করতে পারে। - সর্বাধিক 630

হ্যাঁ, কারণ। এবং প্রায় সমস্ত অ্যাপ্লিকেশনগুলির জন্য একরকম বৈশ্বিক রাষ্ট্রের প্রয়োজন

তবে গ্লোবাল স্টেট ! = গ্লোবাল ভেরিয়েবল

আপনি নির্ভরতা ইনজেকশনের মাধ্যমে ওও কৌশলগুলি দিয়ে গ্লোবাল স্টেট তৈরি করতে পারেন তবে আপনি স্টেটফুল স্ট্যাটিক স্ট্রাকচার সহ গ্লোবাল স্টেটকে এড়াতে পারবেন না যা নীচে বৈশ্বিক পরিবর্তনশীল


2
গ্লোবাল স্টেট এই প্রশ্নের সাথে সম্পর্কিত নয়, যে কোনও ধরনের কোড এটি ব্যবহার করতে পারে।
সর্বাধিক 630

@ সর্বোচ্চ 30৩০ দয়া করে আমার আপডেটটি দেখুন
টিমোথি ট্রাকল

1
আপনি সংযুক্ত না করে স্থির ফ্রি ফাংশন ব্যবহার করতে পারেন। আপনি Func<Result, Args>অবজেক্টগুলি কাছাকাছি চলে যান , যা অন্য কোথাও তাত্ক্ষণিকভাবে রয়েছে।
কালেথ

1
1) আমি সাধারণত মনে করি যে বাস্তবায়ন গোপন করা একটি ভাল জিনিস, যেখানে এটি উপযুক্ত। ২) আর্গুমেন্ট / নির্ভরতা-ইনজেকশনের মতো সবকিছু থাকাও এক ধরণের ডিজাইন-টাইম কাপলিং তৈরি করে, আপনি যখন নিজেকে দীর্ঘ নির্ভরতার শৃঙ্খলে স্বাক্ষর পরিবর্তন করতে অনেক সময় ব্যয় করতে দেখেন তখন আপনি এটি অনুভব করতে পারেন। এবং যুক্তি হিসাবে আপনার লগার, বা অন্যান্য ক্রস-কাটিং উদ্বেগগুলির জন্য প্রয়োজনীয় প্রতিটি একক ক্রিয়াকলাপ থাকার মতো ... (তবে হ্যাঁ, এটি নিম্ন-স্তরের পরীক্ষা আরও শক্ত করে তুলতে পারে) 3) অবশ্যই স্থির কাজগুলি রাষ্ট্রহীন হতে হবে।
অ্যালেক্স

1
@ অ্যালেক্স তারপরে আমাকে এটিকে অন্য উপায়ে বলতে দিন: ইউনিট এমন কোনও গুচ্ছ কোড যা স্থির রেফারেন্সযুক্ত "ইউটিলিটি" পদ্ধতি সহ) পরিবর্তিত হওয়ার একই কারণ রয়েছে । এই ইউনিট ভিতরে কিছু আছে বাস্তবায়ন বিস্তারিত । অন্য যে কোনও কিছুই নির্ভরতা এবং ইউনিটটির এটিতে স্থির অ্যাক্সেস থাকা উচিত নয়।
টিমোথি ট্রাকল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.