আমি কিছু উত্তর দেখেছি এবং গুগলে অনুসন্ধান করেছি, তবে আমি সহায়ক কিছু খুঁজে পেলাম না (যেমন, এর বিশ্রী পার্শ্ব প্রতিক্রিয়া হবে না)।
বিমূর্তভাবে আমার সমস্যাটি হ'ল আমার একটি অবজেক্ট রয়েছে এবং এটিতে অপারেশনগুলির দীর্ঘ ক্রম সম্পাদন করা দরকার ; আমি এটিকে এক ধরণের সমাবেশ লাইন, যেমন গাড়ি তৈরির মতো মনে করি।
আমি বিশ্বাস করি এই বস্তু বলে অভিহিত করা হবে পদ্ধতি অবজেক্টস ।
সুতরাং এই উদাহরণে আমি এক পর্যায়ে আমার কাছে একটি কার উইথআউটআউফ্লাস্ট্রি থাকব যার উপর আমার তখন ইনস্টলব্যাকসিট, ইনস্টলফ্রন্টসিট, ইনস্টলউইডইনসেন্টস চালানো দরকার (অপারেশনগুলি একে অপরের সাথে হস্তক্ষেপ করে না এবং এমনকি সমান্তরালেও করা যেতে পারে)। এই অপারেশনগুলি CarWithoutUpholstery.worker () দ্বারা সম্পাদিত হয় এবং একটি নতুন অবজেক্ট উত্পন্ন হয় যা একটি CarWithUpholstery হতে পারে, যার পরে আমি সম্ভবত ক্লিনইন্সিডস (), যাচাইকরণ নো-আপসোল্ট্রি ডিফেক্টস () ইত্যাদি চালাতাম।
একক পর্বে ক্রিয়াকলাপগুলি ইতিমধ্যে স্বতন্ত্র, অর্থাত্ আমি ইতিমধ্যে তাদের একটি সাবসেট নিয়ে ঝুঁকছি যা কোনও ক্রমে কার্যকর করা হতে পারে (সামনের এবং পিছনের আসনগুলি কোনও ক্রমে ইনস্টল করা যেতে পারে)।
আমার যুক্তি বর্তমানে বাস্তবায়নের সরলতার জন্য প্রতিবিম্ব ব্যবহার করে।
এটি হ'ল, একবার আমার যখন কার্বিথআউটফ্লাস্ট্রি হয়ে যায়, তখন অবজেক্টটি परফর্মসামিং () নামক পদ্ধতিগুলির জন্য নিজেকে পরীক্ষা করে। এই মুহুর্তে এটি এই সমস্ত পদ্ধতি কার্যকর করে:
myObject.perform001SomeOperation();
myObject.perform002SomeOtherOperation();
...
ত্রুটি এবং স্টাফ পরীক্ষা করার সময়। যদিও অপারেশন অর্ডার হয় গুরুত্বহীন, আমি ক্ষেত্রে আমি কখনো আবিষ্কার কিছু অর্ডার সব পরে গুরুত্বপূর্ণ একটি lexicographic অর্ডার নির্ধারিত হয়েছে। এটি YAGNI এর সাথে স্ববিরোধী , তবে এটি খুব সামান্য পরিমাণে উপস্থাপিত হয়েছিল - একটি সাধারণ সাজান () - এবং এটি লাইনের নীচে একটি বিশাল পদ্ধতিটির নাম পরিবর্তন করে (বা পরীক্ষাগার সম্পাদনের কিছু অন্যান্য পদ্ধতি, যেমন পদ্ধতিগুলির একটি অ্যারে প্রবর্তন) সংরক্ষণ করতে পারে।
একটি ভিন্ন উদাহরণ
আসুন আমরা বলি যে গাড়ি তৈরির পরিবর্তে আমাকে কারও উপরে একটি সিক্রেট পুলিশ প্রতিবেদন তৈরি করতে হবে এবং এটি আমার এভিল ওভারলর্ডের কাছে জমা দিতে হবে । আমার চূড়ান্ত অবজেক্টটি একটি রেডি রিপোর্ট হবে। এটি নির্মাণের জন্য আমি প্রাথমিক তথ্য (নাম, উপাধি, পত্নী ...) সংগ্রহ করে শুরু করি। এটি আমার ফেজ এ a স্ত্রী বা স্ত্রী আছে কিনা তার উপর নির্ভর করে আমাকে বি 1 বা বি 2 পর্যায়ক্রমে এগিয়ে যেতে হবে এবং একজন বা দু'জনের উপর যৌনতার ডেটা সংগ্রহ করতে হতে পারে। এটি নাইট লাইফ, স্ট্রিট ক্যাম, সেক্স শপের বিক্রয় প্রাপ্তিগুলি এবং কী নয় নিয়ন্ত্রণ করে এমন বিভিন্ন এভিল মাইনাসে বিভিন্ন প্রশ্নের মধ্যে তৈরি। এবং তাই এবং তাই ঘোষণা.
যদি ভুক্তভোগীর কোনও পরিবার না থাকে তবে আমি এমনকি গেটইনফরমেশনআউটআউটফ্যামিলি পর্যায়ে প্রবেশ করব না, তবে আমি যদি তা করি তবে এটি প্রথমে আমি বাবা বা মা বা ভাইবোনকে লক্ষ্য করি কিনা তা অপ্রাসঙ্গিক (যদি থাকে)। তবে আমি এটি করতে পারি না যদি আমি কোনও ফ্যামিলি স্ট্যাটাসচেক না করে নিই, যা অতীতের পূর্ববর্তী পর্যায়ে অন্তর্ভুক্ত।
এটি সমস্ত আশ্চর্যজনকভাবে কাজ করে ...
- আমার যদি কিছু অতিরিক্ত অপারেশন প্রয়োজন তবে আমাকে কেবল একটি ব্যক্তিগত পদ্ধতি যুক্ত করতে হবে,
- যদি অপারেশনটি বেশ কয়েকটি পর্যায়ে সাধারণ হয় তবে আমি এটি একটি সুপারক্লাস থেকে উত্তরাধিকার সূত্রে পেতে পারি,
- অপারেশনগুলি সহজ এবং স্বনির্ভর। এক অপারেশন থেকে কোন মান কি কখনো অন্যদের (অপারেশন যে কোনো দ্বারা প্রয়োজন বোধ করা হয় না , একটি ভিন্ন পর্যায়ে সম্পাদিত হয় না)
- লাইনের নিচে অবস্থিত অবজেক্টগুলিকে অনেকগুলি পরীক্ষা করার দরকার নেই কারণ তাদের স্রষ্টা বস্তুগুলি প্রথমে এই শর্তাদি যাচাই না করে থাকলেও তারা উপস্থিত থাকতে পারে না । যেমন, ড্যাশবোর্ডে সন্নিবেশ স্থাপন করার সময়, ড্যাশবোর্ড পরিষ্কার করে এবং ড্যাশবোর্ড যাচাই করার সময়, ড্যাশবোর্ড আসলে আছে কিনা তা যাচাই করার দরকার নেই ।
- এটি সহজ পরীক্ষার জন্য অনুমতি দেয়। আমি সহজেই একটি আংশিক বস্তুকে উপহাস করতে পারি এবং এটিতে কোনও পদ্ধতি চালাতে পারি এবং সমস্ত ক্রিয়াকলাপ হ'ল নির্বিচার ব্ল্যাক বাক্স।
... কিন্তু ...
সমস্যাটি দেখা দিল যখন আমি আমার পদ্ধতিগুলির একটিতে একটি শেষ অপারেশন যুক্ত করেছি, যার ফলে সামগ্রিক মডিউলটি একটি বাধ্যতামূলক জটিলতা সূচককে ছাড়িয়ে গেছে ("এন বেসরকারী পদ্ধতির চেয়ে কম")।
আমি ইতিমধ্যে বিষয়টি উপরে উপরে নিয়ে গিয়ে পরামর্শ দিয়েছি যে এক্ষেত্রে ব্যক্তিগত পদ্ধতির ধন বিপর্যয়ের কোনও বিবরণ নয়। জটিলতা হয় সেখানে, কিন্তু এটা আছে কারণ অপারেশন হয় জটিল, এবং আসলে এটা যে সব জটিল নয় - এটি শুধু দীর্ঘ ।
এভিল ওভারলর্ড উদাহরণটি ব্যবহার করে, আমার সমস্যাটি হ'ল এভিল ওভারলর্ড (ওরফে হু শল অস্বীকার করা হবে না ) সমস্ত ডায়েটারি সংক্রান্ত তথ্যের জন্য অনুরোধ করে , আমার ডায়েটরি মিনিশন আমাকে বলেছিল যে আমাকে রেস্তোঁরা, রান্নাঘর, রাস্তার বিক্রেতারা, লাইসেন্সবিহীন রাস্তার বিক্রেতাদের, গ্রিনহাউসের জিজ্ঞাসা করা দরকার মালিকগণ ইত্যাদি, এবং এভিল (সাব) ওভারলর্ড - তিনি হু হু ইজ শিওল নন অস্বীকার করা হিসাবে পরিচিত - অভিযোগ করে যে আমি গেটডিয়েটারি ইনফরমেশন পর্যায়ে অনেক বেশি প্রশ্ন করছি।
দ্রষ্টব্য : আমি সচেতন যে বিভিন্ন দৃষ্টিকোণ থেকে এটি মোটেও সমস্যা নয় (সম্ভাব্য পারফরম্যান্স সম্পর্কিত সমস্যাগুলি ইত্যাদি উপেক্ষা করে)। যা ঘটছে তা হ'ল একটি নির্দিষ্ট মেট্রিক অসন্তুষ্ট এবং এর পক্ষে ন্যায়সঙ্গততা রয়েছে।
কি আমি মনে করি আমি কাজ করতে পারে
প্রথমটি বাদে, এই সমস্ত বিকল্পগুলি করণীয় এবং আমি মনে করি, এটি ডিফেন্সেবল।
- আমি যাচাই করেছেন যে, আমি গোপন হতে হবে এবং আমার অর্ধেক পদ্ধতি ডিক্লেয়ার করতে পারেন
protected
। তবে আমি পরীক্ষার পদ্ধতিতে দুর্বলতা ব্যবহার করব এবং ধরা পড়ার সময় নিজেকে ন্যায্যতা জানানো ছাড়াও আমি এটি পছন্দ করি না। এছাড়াও, এটি একটি স্টপগ্যাপ পরিমাপ। প্রয়োজনীয় অপারেশনগুলির সংখ্যা দ্বিগুণ হলে কী হবে? অপছন্দনীয়, তবে কি তবে? - আমি এ ধাপটিকে অনানলেডবজেক্টআল্ফা, আনিল্লেডজেক্ট ব্রাভো এবং অ্যানিলিয়েডবজেক্টচর্লিগুলিতে যথেচ্ছভাবে বিভক্ত করতে পারি এবং প্রতিটি পর্যায়ে অপারেশনগুলি করা হচ্ছে এক তৃতীয়াংশ have আমি এইরকম যে আসলে এই বছরের কম বয়সী হই যোগ একটি পরীক্ষা পাশ করার ছাড়া কোন লাভ সঙ্গে, জটিলতা (এন-1 এর আরও বেশি শ্রেণীর)। আমি অবশ্যই ধরে রাখতে পারি যে একটি CarWithFrontSeatsInstalled এবং একটি CarWithAllSeatsInstalled যৌক্তিকভাবে ধারাবাহিক পর্যায়। পরে আলফার দ্বারা ব্র্যাভো পদ্ধতির প্রয়োজনীয়তা হওয়ার ঝুঁকি ছোট এবং আমি এটি ভাল খেললে আরও ছোট smaller কিন্তু এখনো.
- আমি একক মধ্যে দূরবর্তী অনুরূপ, বিভিন্ন অপারেশন গুচ্ছ করতে পারেন।
performAllSeatsInstallation()
। এটি কেবল স্টপগ্যাপ মাপ এবং এটি একক ক্রিয়াকলাপের জটিলতা বাড়িয়ে তোলে। আমার যদি কখনও অন্য ক্রমে A এবং B অপারেশন করার প্রয়োজন হয়, এবং আমি সেগুলি E = (A + C) এবং F (B + D) এর মধ্যে রেখেছি, আমাকে E এবং F আনবান্ডেল করতে হবে এবং চারপাশে কোডটি বদল করতে হবে । - আমি ল্যাম্বদা ফাংশনগুলির একটি অ্যারে ব্যবহার করতে পারি এবং পরিষ্কারভাবে পুরোপুরি চেকটি পার্শ্ববর্তী করে রাখতে পারি, তবে আমি সেই আড়ম্বরপূর্ণ দেখতে পাই। এটি এখন পর্যন্ত সেরা বিকল্প। এটি প্রতিবিম্ব থেকে মুক্তি পাবেন। আমার যে দুটি সমস্যা রয়েছে তা হ'ল আমাকে সম্ভবত সমস্ত পদ্ধতি অবজেক্টগুলি পুনরায় লেখার জন্য বলা হবে , কেবল অনুমানক নয়
CarWithEngineInstalled
, এবং এটি খুব ভাল কাজের সুরক্ষা হবে, এটি আসলে এতটা আবেদন করে না; এবং কোড কভারেজ চেকারের ল্যাম্বডাসের সাথে সমস্যা রয়েছে (যা দ্রবণযোগ্য তবে এখনও )।
তাই ...
- কোনটি, আপনি মনে করেন, আমার সেরা বিকল্প?
- আমি কি বিবেচনা না করে আছে এর চেয়ে ভাল উপায় আছে? ( সম্ভবত আমি আরও ভাল করে পরিষ্কার হয়ে এসে সরাসরি জিজ্ঞাসা করব এটি কী? )
- এই নকশাটি কি আশাহীনভাবে ত্রুটিযুক্ত, এবং আমি আরও ভালভাবে পরাজয় এবং খাদকে স্বীকার করব - এই আর্কিটেকচারটি পুরোপুরি? আমার ক্যারিয়ারের জন্য ভাল নয়, তবে দীর্ঘমেয়াদে খারাপ ডিজাইনের কোড লেখা আরও ভাল কিছু হতে পারে?
- আমার বর্তমান পছন্দটি কি আসলে ওয়ান ট্রু ওয়ে এবং আরও উন্নত মানের মেট্রিক্স (এবং / অথবা উপকরণ) ইনস্টল করার জন্য আমার লড়াই করা দরকার? এই শেষ বিকল্পের জন্য আমার রেফারেন্স দরকার ... বকবক করার সময় আমি কেবল @PHB- এর দিকে হাত তুলতে পারছি না এটি আপনার অনুসন্ধান করা ম্যাট্রিক নয় । আমি কতটা সক্ষম হতে চাই তা নয়