ইউটিলিটি ক্লাস কি মন্দ? [বন্ধ]


97

আমি এই থ্রেড দেখেছি

যদি কোনও "ইউটিলিটিস" শ্রেণি খারাপ হয় তবে আমি আমার জেনেরিক কোডটি কোথায় রাখব?

এবং ভেবেছি ইউটিলিটি ক্লাসগুলি মন্দ কেন?

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


27
"দুষ্ট" শব্দটির অবমূল্যায়ন মন্দ!
ম্যাথু লক

4
@ মাত্তে আমি পোস্টটির শর্তাদি সংরক্ষণ করেছি যার উপরে আমার প্রশ্ন ভিত্তিক ...;)
hvgotcodes ২

ইউটিলিটি ক্লাসগুলি একই কারণে সিলেটলেটগুলি একটি খারাপ ধারণা।
কার্টেনডগ

4
একটি এক্সএক্সএমএল পদ্ধতি থাকা উচিত কিনা তা নিয়ে বিতর্কটি এমন একটি যা সমৃদ্ধ বনাম রক্তাল্পতা ডোমেন মডেলগুলির উপর নির্ভর করে। কোডফ্লো.ব্লগস্পট.com
জেমস পি

@ জেমস, টক্সএক্সএমএল একটি উদাহরণ মাত্র ... পুরো জায়গা জুড়ে ব্যবহৃত কিছু রেইগেক্স কার্যকারিতা সম্পর্কে কী বলা যায়? পছন্দ করুন, আপনার ডোমেন মডেল জুড়ে স্ট্রিংগুলি সহ আপনার কিছু স্টাফ করা দরকার তবে আপনি একটি সুপারক্লাস (জাভাতে) ব্যবহার করেছেন এমন একটি ওভাররাইডিং উদ্বেগের কারণে আপনি সাবক্লাসিং ব্যবহার করতে পারেন না
এইচভিগোটকোডস

উত্তর:


129

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

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

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


SOLID oo নীতির বিরুদ্ধে ইউটিলিটি / হেল্পার ক্লাস চেক করার বিষয়ে এই নিবন্ধটির সাথে ভাল সম্পর্ক রয়েছে পাশাপাশি পাঠযোগ্যতা.
com

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

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

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

4
ইউটিল এবং হেল্পার ক্লাসগুলি এই জাতীয় সীমাবদ্ধতার একটি দুর্ভাগ্যজনক নিদর্শন, এবং যারা ওওপি বুঝতে পারে না বা সমস্যা ডোমেন বোঝে না তারা প্রসেসিয়াল কোড লিখতে থাকে।
bilelovitch

57

আমি মনে করি যে সাধারণ sensকমত্য হল ইউটিলিটি শ্রেণিগুলি প্রতি সেজে মন্দ নয় । আপনার এগুলি কেবল ন্যায়বিচারের সাথে ব্যবহার করতে হবে:

  • সাধারণ এবং পুনরায় ব্যবহারযোগ্য হিসাবে স্ট্যাটিক ইউটিলিটি পদ্ধতিগুলি ডিজাইন করুন। তারা রাষ্ট্রবিহীন তা নিশ্চিত করুন; অর্থাত্ কোনও স্ট্যাটিক ভেরিয়েবল নেই।

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

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

  • জাভা 8 এর পরে, কোনও ইন্টারফেসে "ডিফল্ট পদ্ধতি" ইউটিলিটি ক্লাসের চেয়ে ভাল বিকল্প হতে পারে। ( উদাহরণস্বরূপ জাভা 8 এ ডিফল্ট পদ্ধতি বনাম অ্যাবস্ট্রাক্ট ক্লাস সহ ইন্টারফেস দেখুন ))


এই প্রশ্নটি দেখার অন্য উপায়টি অবলোকন করা উচিত যে উদ্ধৃত প্রশ্নে "যদি ইউটিলিটি ক্লাসগুলি" দুষ্ট " হয় তবে স্ট্রম্যান যুক্তি। এটি আমার জিজ্ঞাসার মতো:

"শূকরগুলি যদি উড়তে পারে তবে আমার একটি ছাতা রাখা উচিত?"।

উপরের প্রশ্নে আমি আসলে বলছি না যে শূকরগুলি উড়তে পারে ... বা তারা যে উড়তে পারে সেই প্রস্তাবের সাথে আমি একমত ।

সাধারণত "জাইজ ইজ ইজ ইস্ট" বিবৃতিগুলি অলঙ্কৃত ডিভাইসগুলি যা আপনাকে চূড়ান্ত দৃষ্টিভঙ্গি পোষণ করে ভাবতে চায়। আক্ষরিক সত্যের বিবৃতি হিসাবে এগুলি খুব কমই (যদি কখনও হয়) হয়।


16

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

এগুলি তবে অত্যন্ত কার্যকর এবং আমি এগুলি সর্বদা স্থায়ী কাঠামো হিসাবে বা আরও পুঙ্খানুপুঙ্খ চুল্লী করার সময় পাথর হিসাবে তৈরি করি।

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


4
আমি এটিকে ব্যবহারিক সমস্যা বলব কারণ জাভাতে আপনি কোনও শ্রেণিটিতে পদ্ধতি নয় এমন কোনও ফাংশন তৈরি করতে পারবেন না। এই জাতীয় ভাষায় "কোন চলকবিহীন এবং কেবল স্থিতিশীল পদ্ধতিযুক্ত শ্রেণি" এমন একটি প্রতিমা যা ইউটিলিটি ফাংশনগুলির একটি নেমস্পেসের জন্য দাঁড়ায় ... জাভাতে যখন এই জাতীয় শ্রেণির মুখোমুখি হয়, তখন IMHO অবৈধ এবং শ্রেণীর কথা বলা অর্থহীন is , যদিও classকীওয়ার্ডটি ব্যবহৃত হয়। এটি একটি নেমস্পেসের মতো
ঝাঁকুনি

4
আমি ভোঁতা হওয়ার জন্য দুঃখিত, তবে "রাষ্ট্রবিহীন স্ট্যাটিক পদ্ধতিগুলি [...] একটি ওওপি সিস্টেমে বিজোড় [...] দার্শনিক সমস্যা" অত্যন্ত বিপথগামী। আপনি যদি রাষ্ট্র এড়াতে পারেন তবে এটি দুর্দান্ত because কারণ এটি সঠিক কোডটি লেখা সহজ করে। আমি যখন লিখতে হবে তখন এটি ভেঙে গেছে x.equals(y)কারণ 1) সত্য যে কোনও কিছু যা জানানো হয়নি তা কোনও অবস্থাতেই পরিবর্তন করা উচিত নয় (এবং আমি বাস্তবায়নের বিষয়টি জেনেও এর উপর নির্ভর করতে পারি না) 2) আমি কখনই x" y3 এর সাথে তুলনায় "পছন্দসই" বা "অভিনয় করা" অবস্থান ) আমি "পরিচয়" বিবেচনা করতে চাই না xবা yকেবল তাদের মানগুলিতে আগ্রহী।
জো সো

4
সত্যিকারের বিশ্বের সবচেয়ে কার্যকারিতা স্থিতিশীল, রাষ্ট্রহীন, গাণিতিক ক্রিয়াকলাপ হিসাবে সর্বোত্তমভাবে প্রকাশ করা হয় expressed ম্যাথ.পি.আই কি এমন একটি বস্তু যা রূপান্তরিত হওয়া উচিত? আমি কি আসলেই একটি সংখ্যার সাইন পেতে আইব্রেট্রাক্টরিলিওপ্রেশন প্রয়োগ করে এমন একটি অ্যাবস্ট্র্যাক্টসাইনক্যালকুলেটর ইনস্ট্যান্ট করতে হবে?
জো তাই

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

4
@ আলাইনো'ডিয়া: আমি বুঝতে পারি যে আমি আপনার মন্তব্যকে রাষ্ট্রবিহীন কার্যকারিতার বিরুদ্ধে দাঁড়িয়ে বলে ভুলভাবে লিখছি। আমি আমার সুরের জন্য ক্ষমা চাইছি - আমি বর্তমানে আমার প্রথম জাভা প্রকল্পের সাথে জড়িত আছি (আমি আমার 10 বছরের প্রোগ্রামিংয়ের বেশিরভাগ অংশের জন্য ওওপি এড়িয়ে যাওয়ার পরে) এবং অস্পষ্ট অবস্থা এবং অর্থগুলির সাথে বিমূর্ত জিনিসগুলির স্তরের নিচে সমাহিত হয়েছি। এবং আমার কেবল কিছু টাটকা বায়ু দরকার :-)।
জো তাই

9

আমি মনে করি এটি কখন খারাপ হতে শুরু করে

1) এটি খুব বড় হয়ে যায় (কেবলমাত্র এ ক্ষেত্রে তাদের অর্থপূর্ণ বিভাগে ভাগ করুন)।
2) স্থির পদ্ধতি না হওয়া পদ্ধতিগুলি উপস্থিত রয়েছে

তবে যতক্ষণ না এই শর্তগুলি পূরণ করা হয় না, ততক্ষণ আমি সেগুলি খুব দরকারী বলে মনে করি।


"স্থিত পদ্ধতি না হওয়া পদ্ধতিগুলি উপস্থিত রয়েছে" " এটা কিভাবে সম্ভব?
Koray Tugay

@ KorayTugay স্থির Widget.compareTo(Widget widget)বনাম অ স্থির বিবেচনা করুন WidgetUtils.compare(Widget widgetOne, Widget widgetTwo)। তুলনা এমন কোনও কিছুর উদাহরণ যা স্থিরভাবে করা উচিত নয়।
এনডিএম 13

5

চলতি নিয়ম

আপনি দুটি দৃষ্টিকোণ থেকে এই সমস্যাটি দেখতে পারেন:

  • সামগ্রিক *Utilপদ্ধতিগুলি প্রায়শই খারাপ কোড ডিজাইন বা অলস নামকরণ কনভেনশনের পরামর্শ।
  • এটি পুনরায় ব্যবহারযোগ্য ক্রস-ডোমেন স্টেটলেস কার্যকারিতার বৈধ নকশা সমাধান। দয়া করে নোট করুন যে প্রায় সমস্ত সাধারণ সমস্যার জন্য বিদ্যমান সমাধান রয়েছে।

উদাহরণ 1. utilক্লাস / মডিউলগুলির সঠিক ব্যবহার । বাহ্যিক গ্রন্থাগারের উদাহরণ

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

এখানে চিত্র বর্ণনা লিখুন


উদাহরণ 2. utilক্লাস / মডিউলগুলির সঠিক ব্যবহার । utilঅন্যান্য দলের সদস্যদের অজুহাত ছাড়াই আপনার নিজের লেখা

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

এখানে ছোট, তবে গুরুত্বপূর্ণ বিস্তারিত। আপনি লিখেছেন ক্লাস / মডিউল বলা হয় না HolidayUtil, কিন্তু PolishHolidayCalculator। কার্যত এটি একটি utilশ্রেণি, তবে আমরা জেনেরিক শব্দটি এড়াতে সক্ষম হয়েছি।

এখানে চিত্র বর্ণনা লিখুন


4
আমি দেখতে পাই এমন একটি ইয়েড ফ্যান;) আশ্চর্যজনক অ্যাপ।
শ্রীধর সারনোবাত

3

ইউটিলিটি ক্লাসগুলি খারাপ কারণ তাদের অর্থ আপনি ক্লাসের জন্য আরও ভাল নামটি চিন্তা করতে খুব অলস ছিলেন :)

বলা হচ্ছে, আমি অলস। কখনও কখনও আপনার কেবল কাজটি করা দরকার এবং আপনার মনটি ফাঁকা হয়ে যায় .. তখন থেকেই "ইউটিলিটি" ক্লাসগুলি শুরু হয়।


3

এই প্রশ্নটি এখনই ফিরে দেখছি, আমি বলব যে সি # এক্সটেনশন পদ্ধতিগুলি ইউটিলিটি ক্লাসগুলির প্রয়োজনীয়তাকে সম্পূর্ণভাবে ধ্বংস করে দেয়। তবে সমস্ত ভাষায় এ জাতীয় প্রতিভা নির্মাণ নেই।

আপনার কাছে জাভাস্ক্রিপ্ট রয়েছে, যেখানে আপনি কেবলমাত্র বিদ্যমান অবজেক্টটিতে একটি নতুন ফাংশন যুক্ত করতে পারেন।

তবে আমি নিশ্চিত নই যে সি ++ এর মতো পুরানো ভাষায় এই সমস্যাটি সমাধান করার সত্যিই একটি দুর্দান্ত উপায় আছে ...

ভাল ওও কোডটি লিখতে খুব কষ্টকর এবং এটি খুঁজে পাওয়া শক্ত কারণ ভাল ওও লেখার জন্য শালীন কার্যকরী কোড লেখার চেয়ে অনেক বেশি সময় / জ্ঞান প্রয়োজন।

এবং আপনি যখন বাজেটে থাকবেন, আপনার বস সর্বদা ক্লাসের একগুচ্ছ লেখার জন্য কাটিয়েছেন তা দেখে সর্বদা খুশি হন না ...


3

আমি সম্পূর্ণরূপে একমত নই যে ইউটিলিটি ক্লাসগুলি খারাপ।

যদিও কোনও ইউটিলিটি শ্রেণি OO অধ্যক্ষদের কিছু উপায়ে লঙ্ঘন করতে পারে তবে সেগুলি সবসময় খারাপ হয় না।

উদাহরণস্বরূপ, কল্পনা করুন আপনি এমন একটি ফাংশন চান যা সমস্ত সাবস্ট্রিংয়ের সাথে মিলে যাওয়া মানটির একটি স্ট্রিং পরিষ্কার করবে x

stl c ++ (এখন হিসাবে) সরাসরি এটি সমর্থন করে না।

আপনি এর একটি বহুতল এক্সটেনশন তৈরি করতে পারেন std::string

তবে সমস্যাটি হ'ল, আপনি কি সত্যই চান যে আপনি আপনার প্রকল্পের প্রতিটি স্ট্রিং আপনার বর্ধিত স্ট্রিং ক্লাস হিসাবে ব্যবহার করেন?

এমন সময় রয়েছে যখন ওও সত্যিকার অর্থে বোঝায় না এবং এটি তাদের মধ্যে একটি। আমরা চাই যে আমাদের প্রোগ্রামটি অন্যান্য প্রোগ্রামগুলির সাথে সামঞ্জস্যপূর্ণ হোক, তাই আমরা std::stringএকটি ক্লাস StringUtil_(বা কিছু) তৈরি করবো এবং তৈরি করব ।

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


2

কোনও ইউটিলিটির ব্র্যান্ড করা খুব সহজ কারণ কেবল ডিজাইনার কোড রাখার জন্য কোনও উপযুক্ত জায়গা ভাবতে পারেননি। প্রায়শই কয়েকটি সত্য "ইউটিলিটি" থাকে।

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


2

স্টেটলেস স্ট্যাটিক পদ্ধতিযুক্ত ইউটিলিটি ক্লাসগুলি কার্যকর হতে পারে। এগুলি ইউনিট পরীক্ষার জন্য প্রায়শই খুব সহজ।


1

জাভা 8 এর সাহায্যে আপনি ইন্টারফেসে স্থির পদ্ধতি ব্যবহার করতে পারেন ... সমস্যা সমাধান হয়েছে solved


এটা তোলে সমস্যার বিবৃত করে না stackoverflow.com/a/3340037/2859065
Luchostein

কীভাবে এগুলি কোনও শ্রেণিতে স্থাপন এবং আমদানির চেয়ে আলাদা?
উইলমল

1

বেশিরভাগ ইউটিলি ক্লাস খারাপ কারণ:

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

স্ট্যাটিক বনাম গতিশীল লাইব্রেরিগুলির জন্য কিছু উপমা রয়েছে।


0

আমি যখন ক্লাসে কোনও পদ্ধতি যুক্ত করতে না পারি (বলুন, Accountজুনিয়র বিকাশকারীদের পরিবর্তনের বিরুদ্ধে লক করা আছে) তখন আমি আমার ইউটিলিটি ক্লাসে কয়েকটি স্থিতিশীল পদ্ধতি যুক্ত করি:

public static int method01_Account(Object o, String... args) {
    Account acc = (Account)o;
    ...
    return acc.getInt();
}  

4
দেখে মনে হচ্ছে আপনি আমার কাছে জুনিয়র একজন ..: P এটি করার অ-দুষ্ট উপায় হ'ল বিনীতভাবে আপনার "জুনিয়র বিকাশকারী" Accountফাইলটি আনলক করতে বলুন । বা আরও ভাল, নন-লকিং উত্স নিয়ন্ত্রণ সিস্টেমের সাথে যান।
সুদীপ

4
আমি ধরে নিয়েছি তার অর্থ হ'ল Accountফাইলটি এমনভাবে লক করা হয়েছিল যে জুনিয়র বিকাশকারীরা এতে পরিবর্তন করতে পারে না। জুনিয়র বিকাশকারী হিসাবে, এটি ঘটার জন্য, তিনি উপরের মতো করেছেন। এটি বলেছিল, কেবলমাত্র ফাইলটিতে লেখার অ্যাক্সেস পাওয়া এবং এটি সঠিকভাবে করা আরও ভাল।
ডক

এতে +1 যুক্ত করা হচ্ছে কারণ নিম্নাঞ্চলগুলি কঠোর বলে মনে হচ্ছে যখন আপনি এই উত্তরটি সরবরাহ করেছেন কেন
কোনওরই

0

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

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