এই কোডের টুকরোটিতে বেশ কয়েকটি সমস্যা রয়েছে, যা এই উপায়ে ছোট করা যেতে পারে:
public List<Money> getMoneyByPersons() {
return persons.size() == 1 ?
moneyService.getMoneyIfHasOnePerson() :
moneyService.getMoney();
}
কেন একজন ব্যক্তি বিশেষ মামলা তা স্পষ্ট নয়। আমি মনে করি যে এখানে একটি নির্দিষ্ট ব্যবসায়ের নিয়ম রয়েছে যা বলে যে একজন ব্যক্তির কাছ থেকে অর্থ প্রাপ্তি বেশ কয়েকটি ব্যক্তির কাছ থেকে অর্থ প্রাপ্তি থেকে সম্পূর্ণ আলাদা। যাইহোক, আমি গিয়ে ভেতরে সন্ধান আছে getMoneyIfHasOnePerson
এবং getMoney
বুঝতে কেন স্বতন্ত্র মামলা হয় প্রত্যাশী।
নামটি getMoneyIfHasOnePerson
ঠিক দেখাচ্ছে না। নাম থেকে, আমি পদ্ধতিটি একজন ব্যক্তি আছে কিনা তা যাচাই করার আশা করব এবং যদি এটি হয় তবে তার কাছ থেকে অর্থ গ্রহণ করুন; অন্যথায়, কিছুই করবেন না। আপনার কোড থেকে, এটি যা ঘটছে তা নয় (বা আপনি শর্তটি দু'বার করছেন)।
List<Money>
সংগ্রহের পরিবর্তে ফেরার কোনও কারণ আছে কি ?
আপনার প্রশ্নের পিছনে, কারণ কেন এটি স্পষ্ট নয় যে কেন একজন ব্যক্তির জন্য একটি বিশেষ চিকিত্সা রয়েছে, নিয়মগুলি সুস্পষ্ট করার জন্য অন্য কোনও উপায় না থাকলে , ডিজিটটি একটি ধ্রুবক দ্বারা প্রতিস্থাপন করা উচিত । এখানে, অন্য কোনও যাদু সংখ্যার থেকে খুব আলাদা নয়। আপনার ব্যবসায়ের নিয়ম থাকতে পারে যে বলছে যে বিশেষ চিকিত্সা এক, দুই বা তিন ব্যক্তি বা কেবল বারো জনেরও বেশি ব্যক্তির জন্য প্রযোজ্য।
আমি কীভাবে সেরা সমাধানটি বেছে নিতে প্রসঙ্গটি আলাদা করতে পারি?
আপনার কোডটি আরও স্পষ্ট করে তোলে তা আপনি করেন।
উদাহরণ 1
নিম্নলিখিত কোডের টুকরোটি কল্পনা করুন:
if (sequence.size() == 0) {
return null;
}
return this.processSequence(sequence);
এখানে কি শূন্য একটি যাদু মান? কোডটি বরং স্পষ্ট: যদি অনুক্রমের কোনও উপাদান না থাকে তবে আসুন এটি প্রক্রিয়া না করে একটি বিশেষ মান ফেরত দিন। তবে এই কোডটি এর মতো আবারও লেখা যায়:
if (sequence.isEmpty()) {
return null;
}
return this.processSequence(sequence);
এখানে, আর ধ্রুবক নেই এবং কোডটি আরও পরিষ্কার।
উদাহরণ 2
কোডের অন্য অংশটি নিন:
const result = Math.round(input * 1000) / 1000;
জাভাস্ক্রিপ্ট যেমন round(value, precision)
ওভারলোড নেই এমন ভাষাগুলিতে এটি কী করে তা বুঝতে খুব বেশি সময় লাগে না ।
এখন, আপনি যদি একটি ধ্রুবক পরিচয় করিয়ে দিতে চান, তবে এটি কীভাবে বলা হবে? আপনি পেতে পারেন নিকটতম শব্দটি Precision
। তাই:
const precision = 1000;
const result = Math.round(input * precision) / precision;
এটি পাঠযোগ্যতার উন্নতি করে? এটা হতে পারে. এখানে, একটি ধ্রুবকের মান বরং সীমাবদ্ধ এবং আপনি নিজেকে জিজ্ঞাসা করতে পারেন যদি আপনার সত্যিকারের রিফ্যাক্টরিং সঞ্চালনের প্রয়োজন হয় কিনা। এখানে সুন্দর জিনিসটি হ'ল এখন, নির্ভুলতা কেবল একবার ঘোষণা করা হয়েছে, সুতরাং যদি এটি পরিবর্তন হয় তবে আপনি কোনও ভুল করার ঝুঁকি রাখবেন না যেমন:
const result = Math.round(input * 100) / 1000;
এক জায়গায় মান পরিবর্তন করা, এবং অন্যটিতে এটি করতে ভুলে যাওয়া।
উদাহরণ 3
এই উদাহরণগুলি থেকে আপনার মনে হতে পারে যে প্রতিটি ক্ষেত্রে সংখ্যাগুলি প্রতিস্থাপন করা উচিত । এটি সত্য নয়। কিছু পরিস্থিতিতে, ধ্রুবক থাকার ফলে কোডের উন্নতি হয় না।
নিম্নলিখিত কোডের টুকরা নিন:
class Point
{
...
public void Reset()
{
x, y = (0, 0);
}
}
আপনি যদি কোনও ভেরিয়েবল দ্বারা শূন্যগুলি প্রতিস্থাপনের চেষ্টা করেন, তবে অর্থবোধক নামটি খুঁজে পেতে অসুবিধা হবে। কীভাবে নাম রাখবেন? ZeroPosition
? Base
? Default
? এখানে একটি ধ্রুবকের পরিচয় দেওয়া কোনওভাবেই কোডটিকে বাড়িয়ে তুলবে না। এটি এটি কিছুটা দীর্ঘ করে দেবে, এবং কেবল এটি।
এ জাতীয় ঘটনাগুলি বিরল। সুতরাং যে কোনও সময় আপনি কোডে একটি নম্বর পান, কোডটি কীভাবে পুনরায় সংশোধন করা যায় তা চেষ্টা করার চেষ্টা করুন। সংখ্যার কোনও ব্যবসায়িক অর্থ আছে কিনা তা নিজেকে জিজ্ঞাসা করুন। যদি হ্যাঁ, একটি ধ্রুবক বাধ্যতামূলক। যদি না হয় তবে নাম্বারটির নামকরণ করবেন কীভাবে? আপনি যদি কোনও অর্থবহ নাম খুঁজে পান তবে তা দুর্দান্ত। যদি তা না হয় তবে সম্ভাবনাগুলি এমন একটি ঘটনা খুঁজে পেয়েছে যেখানে ধ্রুবক অপ্রয়োজনীয় is
persons
থেকে আসে এবং এটি কী বর্ণনা করে? আপনার কোডটিতে কোনও মন্তব্য নেই তাই এটি কী করছে তা অনুমান করা শক্ত।