জাভাতে বিকাশাধীন কোনও শ্রেণিকে কীভাবে পতাকাঙ্কিত করবেন


12

আমি ইন্টার্নশিপ প্রকল্পে কাজ করছি, তবে সবকিছু শেষ করার আগে আমাকে চলে যেতে হবে।

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

কোডটি এইভাবে সংগঠিত হয়:

[Package] | company.foo.bar.myproject
          |-- Class1.java
          |-- Class2.java
          |-- Class3.java <--(not stable)

যদি একটি একক কারখানা বর্গ পাবলিক পদ্ধতিতে ঐ শ্রেণীর আহ্বান ছিল, আমি পদ্ধতি নির্ধারণ করে থাকতে পারে class3যেমন private। তবে এপিআইটি সেভাবে প্রকাশিত হয়নি। ব্যবহারকারীরা সরাসরি সেই শ্রেণিগুলি ব্যবহার করবেন, উদাহরণস্বরূপ new Class1();, তবে আমি কোনও উচ্চ-স্তরের শ্রেণিকে ব্যক্তিগত করতে পারি না। এই পরিস্থিতি মোকাবেলার সেরা অনুশীলন কোনটি?


1
"এপিআই পদ্ধতিগুলির মাধ্যমে উন্মুক্ত হয় না" এর অর্থ কী? এই শ্রেণিটি কি প্রতিচ্ছবি এপিআইয়ের মাধ্যমে ব্যবহারের উদ্দেশ্যে রয়েছে?
টম জি

5
একটি সংকলক ত্রুটি? কেন কেবল কনস্ট্রাক্টরে একটি ব্যতিক্রম নিক্ষেপ করবেন না?
Mchl

বিভ্রান্তির জন্য দুঃখিত. আমি আমার পোস্ট সম্পাদনা করেছি।
ওয়ে শি শি


1
আপনি শ্রেণিটি ব্যক্তিগত করতে পারবেন না তবে আপনি এটির নির্মাণকারীকে ব্যক্তিগত করতে পারেন।
পিটার টেলর

উত্তর:


15

আপনার ভার্সন কন্ট্রোল সিস্টেমের সমস্ত অস্থির ক্লাসগুলি কেবল একটি ভিন্ন শাখায় কেন পরীক্ষা করবেন না?


2
আমার কাছে মনে হচ্ছে এটি কোডটি 'লুকিয়ে' রাখবে। কোডটি যদি অন্য কিছুকে কিছু ছোটখাট টুইটগুলি করার জন্য এটির প্রয়োজন হয় তবে কী করে। আপনি যদি এটি কোনও শাখায় রাখেন তবে তারা এটি কখনও না দেখবে এবং কেবল পুরো বিষয়টি পুনরায় প্রয়োগ করবে।
সি_মেকার

3
@ সি_মেকার: অন্যকে শাখাটি উপস্থিত থাকা এবং এর মধ্যে কী রয়েছে সে সম্পর্কে জানানো যখন সে চলে যায় তখন কী পাস হবে তার একটি অংশ হওয়া উচিত।
blrfl

2
@ বার্ল্ফ যদি তারা অন্যরা জাভাডক কোড ব্যবহার করছেন যা ব্যাখ্যা না দেখায় উদ্বিগ্ন হন তবে আমি সন্দেহ করি যে তিনি যে অন্যান্য ডকুমেন্টেশন তৈরি করেছেন তাতে তারা অনুসন্ধান করবে।
কিথবি

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

11

আপনি যদি ক্লাসটি সঠিকভাবে মন্তব্য করেছেন আপনি অসম্পূর্ণ কার্যকারিতার বিটগুলিকে "অবচিত" হিসাবে চিহ্নিত করতে পারেন বা পদ্ধতির সাহস নিয়ে মন্তব্য করতে পারেন এবং একটি লিখতে পারেন throw new UnsupportedOperationException();

জাভাতে .NET এর NotImplementedException এর মতো কিছু আছে কি দেখুন ? বিস্তারিত জানার জন্য.


2
জিনিসগুলি বোঝার সাথে সাথে
হিটকে ডিল করার এই ডিফাক্টো উপায়

4

আমি এই ধরনের সংকলক সতর্কতা জানি না।

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


2
আইডিই সমর্থন করে তবেই পদ্ধতি কলগুলি অতিক্রম করতে পারে।
হতাশ

5
সত্য, তবে বেশিরভাগ লোকেরা সম্ভবত এটি সমর্থন করে এমন আইডিইগুলির মধ্যে একটি ব্যবহার করবে।
সি_মেকার

3

আমি মনে করি না সেখানে যেমন কোড উপলক্ষে একটি আদর্শ উপায় হয় না WIP, Incompleteঅথবা এরকম কিছু একটা।

আপনি নামের সাথে একটি নতুন ব্যতিক্রম তৈরি করতে পারেন ClassUnstableExceptionএবং তারপরে এটিকে Class3একটি বার্তা দিয়ে কন্সট্রাক্টারে উত্থাপন করতে পারেন যা তাদের কীভাবে এটি ব্যবহার করা উচিত নয় তা ব্যাখ্যা করে। এটি যদিও খারাপ, কারণ এটি কেবল রান সময় তাদেরকে সতর্ক করে।

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

আপনি নামের একটি টীকা তৈরি করতে পারেন WIP(যেহেতু আমি সবচেয়ে কাছের হিসাবে ভাবতে পারি Deprecatedতবে এটি আসলে একই জিনিসটি বোঝায় না) এবং ক্লাসটি টিকিয়ে রাখতে এটি ব্যবহার করুন। এটি সম্ভবত কিছুটা বেশি কাজ হবে এবং টীকাটি কী সমর্থন করবে?

শেষ অবধি, আপনি এটি মন্তব্যগুলিতে রেখে যেতে পারেন, তবে এটি কেবল তখনই কাজ করবে যদি লোকেরা তাদের পড়তে পারে।

সম্পাদনা করুন:

এটি প্রাসঙ্গিক হতে পারে: কীভাবে ইচ্ছাকৃতভাবে একটি কাস্টম জাভা সংকলক সতর্কতা বার্তা তৈরি করতে পারে?


নিক্ষেপ ব্যতিক্রম গ্রহটিকে অ্যাক্সেসযোগ্য কোড সম্পর্কে অভিযোগ করে। কোন কাজ?
ওয়ে শি শি

@ উসাভিচ: নিশ্চিত যেহেতু আমি কোডটি দেখিনি, তবে সম্ভবত এটি ভবিষ্যতের বিকাশকারীদের কোডটি ব্যবহার থেকে বিরত রাখতে সহায়তা করতে পারে ?
হতাশিত

@ উসাভিচ: আমার পোস্টে ইডিআইটিতে আমি যে লিঙ্কটি যুক্ত করেছি তা একবার দেখুন, এটি ওপ একটি কাস্টম সংকলনের সতর্কতাটি যুক্ত করতে চেয়েছিল এমনই একটি প্রশ্ন। আপনাকে কাস্টম "আনস্টেবল কোড" টীকা যুক্ত করতে সহায়তা করতে পারে।
হতাশ

3

কেন সেখানে প্রথম স্থান আছে?

আপনি মূল লাইনে অস্থির কোডটি পরীক্ষা করেছেন? কেন?

অস্থির কোডটি ট্রাঙ্ক / প্রধান / মাস্টার বা মূল ট্রাঙ্কের নাম যাই হোক না কেন যাচাই করা উচিত নয়। এটি উচ্চ ঝুঁকির বিকাশ হিসাবে বিবেচিত হয় এবং এর পরিবর্তে মূল শাখার পরিবর্তে আপনি যে নিজস্ব কাজ করেছিলেন সেটিতে তার নিজস্ব শাখায় আলাদা করা উচিত ছিল।

উন্নত এসসিএম শাখা কৌশলগুলি পড়তে আমি আপনাকে (এবং আপনার দলের নেতৃত্ব) দৃ strongly়ভাবে উত্সাহিত করব । বিশেষত, উন্নয়নের ভূমিকার দিকে মনোনিবেশ করুন এবং এটি কী উচ্চ ঝুঁকিপূর্ণ উন্নয়ন হিসাবে বিবেচিত হবে সে সম্পর্কে কী বলে:

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

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

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

@Deprecated

প্রথম জিনিসটি @Deprecatedটীকাগুলি। এটি জাভাডোক ছাড়িয়ে যায় এবং সংকলক সতর্কবার্তা স্পিট করে। javacএমন একটি -deprecationপতাকা সরবরাহ করে যা বর্ণনা করা হয়েছে:

অবহিত সদস্য বা শ্রেণীর প্রতিটি ব্যবহারের বিবরণ বা ওভাররাইড দেখান। ছাড়াই -deprecation, javacউত্স ফাইলগুলির একটি সংক্ষিপ্তসার দেখায় যা অবহেলিত সদস্য বা শ্রেণিগুলি ব্যবহার করে বা ওভাররাইড করে। -প্রশংসনের জন্য সংক্ষিপ্ত -Xlint:deprecation

যেমনটি উল্লেখ করা হয়েছে, এটি স্ট্যান্ডার্ড সংকলক সতর্কতাগুলির উপরে এবং অতিক্রম করে।

অনেক আইডিইতে, অবহেলিত পদ্ধতি এবং মানগুলি স্ট্রাইকথ্রু সহ প্রদর্শিত হয়:

foo.bar();

এবং আউটপুট উত্পাদন করতে হবে:

$ javac -Xlint:all Foo.java Bar.java
Bar.java:2: warning: [deprecation] Foo in unnamed package has been deprecated
interface Bar extends Foo { }
                      ^

আপনার বিল্ড কাঠামোর উপর নির্ভর করে আপনার সতর্কতাগুলি বিল্ডটি ভেঙে দিতে পারে। এটি কেবল তখনই বিল্ডটি ভেঙে ফেলবে যদি আপনার ক্লাসগুলির একটি ব্যবহার করা হয় (এটি কেবল কেবল সংকলন করা না থাকলে)।

@CustomAnnotation

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

ওরাকল এমনকি জাভার মেটাডেটা, পার্ট 2: কাস্টম টীকাগুলির সর্বাধিক@Unfinished উপার্জনে একটি টীকাটির জন্য কাস্টম টীকাগুলি ব্যবহার করার একটি উদাহরণও বর্ণনা করে ।

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

মনে রাখবেন যে এগুলি সমস্তই প্রকৃতপক্ষে টীকা প্রসেসরটি ব্যবহারের জন্য বিল্ডগুলি পরিবর্তন করে।


2

আপনি সংকলন সময় টীকা প্রক্রিয়াকরণ প্রবর্তন করতে পারেন তবে এটি দলের সমস্ত সদস্যদের তাদের সংকলন প্রক্রিয়াটি সামঞ্জস্য করতে কার্যকর করবে।

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

সুতরাং আমার সুপারিশটি হ'ল: যদি আপনি কোডটি বেসগুলিকে বিভিন্ন শাখায় স্থাপন করে আলাদা করতে না পারেন তবে লোকের সাথে কথা বলুন এবং তাদের অবশ্যই ব্যাখ্যা করুন কেন তারা এপিআই ব্যবহার করবেন না।


0

আপনি কি সমস্ত অসম্পূর্ণ ক্লাসগুলিকে একটি সাবপ্যাকেজে "নটকমপ্লিট" এর মতো স্পষ্ট কিছু নামে স্থানান্তর করতে পারেন? এটি কিছুটা হ্যাক তবে যথেষ্ট পরিমাণে দৃশ্যমান হতে পারে।

(যদি সেগুলি একই প্যাকেজে না থাকে তবে আপনি সেখানে প্যাকেজ কাঠামোটি পুনরায় তৈরি করতে পারেন))


0

আমি জানি না যে কোডটিতে এটি করার একটি ভাল উপায় আছে। এক ধাপ পেছনে যান:

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

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


0

আমি ক্লাসটিকে বিমূর্ত করে তুলতে এবং যথাযথভাবে মন্তব্য করার পক্ষে বেছে নেব - এইভাবে কোডটি এখনও রেফারেন্সের জন্য রয়েছে তবে যে কেউ এটি ইনস্ট্যান্ট করার চেষ্টা করে তাদের জন্য শুভকামনা :)


-1

এমন একটি নির্ভরতা তৈরি সম্পর্কে কী যা সংকলক সমাধান করতে পারে না? শুধু যোগ কর:

this.is.not.done.yet.do.not.use.it আমদানি করুন;

শীর্ষে ব্যবহারকারীরা এটির সাথে সংকলন করতে সক্ষম হবেন না।

আপনি যদি ক্লাসটি পরীক্ষা করতে চান তবে কেবল সেই নামটি দিয়ে একটি প্যাকেজ / শ্রেণি তৈরি করুন (বা "পরীক্ষামূলক.ডেনজার" এর মতো সহজ একটি ব্যবহার করুন) এবং আপনি নতুন কোডটি পরীক্ষা করতে পারেন।


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