তাই আমি সম্প্রতি আমার কোডটিতে কিছু বড় রিফ্যাক্টরিং করেছি। আমি যে প্রধান জিনিসটি করার চেষ্টা করেছি তার মধ্যে একটি ছিল আমার ক্লাসগুলি ডেটা অবজেক্ট এবং কর্মী অবজেক্টগুলিতে বিভক্ত করা। ক্লিন কোডের এই বিভাগটি দ্বারা এটি অন্যান্য বিষয়ের সাথে অনুপ্রাণিত হয়েছিল :
হাইব্রিড
এই বিভ্রান্তি কখনও কখনও দুর্ভাগ্যজনক সংকর ডেটা স্ট্রাকচারের দিকে নিয়ে যায় যা অর্ধেক অবজেক্ট এবং অর্ধেক ডেটা স্ট্রাকচার। তাদের ফাংশন রয়েছে যা তাৎপর্যপূর্ণ কাজ করে, এবং তাদের পাবলিক ভেরিয়েবল বা পাবলিক অ্যাকসেসর এবং মিউটরগুলিও রয়েছে যা সমস্ত উদ্দেশ্য এবং উদ্দেশ্যে ব্যক্তিগত ভেরিয়েবলগুলিকে জনসাধারণ করে তোলে, অন্যান্য বহিরাগত ক্রিয়াকলাপগুলিকে প্রক্রিয়াকরণের প্রোগ্রামটি যেভাবে ব্যবহার করবে সেভাবে ব্যবহার করতে প্ররোচিত করে external তথ্য কাঠামো.
এই জাতীয় সংকরগুলি নতুন ফাংশন যুক্ত করা শক্ত করে তোলে তবে নতুন ডেটা স্ট্রাকচার যুক্ত করতে এটি শক্ত করে তোলে। তারা উভয় বিশ্বের সবচেয়ে খারাপ। এগুলি তৈরি করা এড়িয়ে চলুন। এগুলি এমন একটি আবদ্ধ নকশার সূচক যাঁর লেখকরা - বা আরও খারাপ, অজ্ঞ - তাদের ফাংশন বা প্রকার থেকে সুরক্ষা প্রয়োজন কিনা।
সম্প্রতি আমি আমার এক কর্মী বস্তুর কোডটির দিকে তাকিয়ে ছিলাম (যা দর্শকের প্যাটার্নটি বাস্তবায়নের জন্য ঘটে ) এটি দেখেছি:
@Override
public void visit(MarketTrade trade) {
this.data.handleTrade(trade);
updateRun(trade);
}
private void updateRun(MarketTrade newTrade) {
if(this.data.getLastAggressor() != newTrade.getAggressor()) {
this.data.setRunLength(0);
this.data.setLastAggressor(newTrade.getAggressor());
}
this.data.setRunLength(this.data.getRunLength() + newTrade.getLots());
}
আমি তাত্ক্ষণিক নিজেকে বলেছিলাম "বৈশিষ্ট্য হিংসা! এই যুক্তিটি Data
ক্লাসে হওয়া উচিত - বিশেষত handleTrade
পদ্ধতিতে handleTrade
এবং এবং সর্বদা একসাথে updateRun
হওয়া উচিত "। তবে আমি ভেবেছিলাম "ডেটা ক্লাসটি কেবল একটি ডেটা স্ট্রাকচার, যদি আমি এটি করা শুরু করি, তবে এটি একটি হাইব্রিড অবজেক্ট আসবে!"public
কি ভাল এবং কেন? আপনি কীভাবে সিদ্ধান্ত নেবেন?