এই প্রতিরোধের নাম? স্থানীয় ভেরিয়েবল হিসাবে ক্ষেত্রগুলি [বন্ধ]


68

কয়েকটি কোডে আমি পর্যালোচনা করছি, আমি এমন জিনিসগুলি দেখছি যা নীচের নৈতিক সমতুল্য:

public class Foo
{
    private Bar bar;

    public MethodA()
    {
        bar = new Bar();
        bar.A();
        bar = null;
    }

    public MethodB()
    {
        bar = new Bar();
        bar.B();
        bar = null;
    }
}

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

  1. এটা স্পষ্টত খারাপ, তাই না?
  2. এই অ্যান্টিপ্যাটার্নটির কোনও নাম আছে?

60
ঠিক আছে, এটি একটি নতুন। আশা করি এই শ্রেণিটি বহুবিধ প্রসঙ্গে ব্যবহৃত হয়নি, বা আপনার সামনে আকর্ষণীয় সময় থাকবে!
টিএমএন

8
এটা কি সত্যিই অস্বাভাবিক? আমি আমার কেরিয়ারে এটি বহুবার দেখেছি।
জেএসবি ձոգչ

32
@ টিএমএন এটি থ্রেড নিরাপদ নয়, তবে এর চেয়ে খারাপ এটি, তবুও তাত্পর্যপূর্ণ নয়। যদি কোনও কোডে MethodAবা MethodBকারণ হিসাবে MethodAবা MethodBকোনওভাবে কল করা হয় (এবং barআবার ব্যবহার করা হয়, bar.{A,B}()অপরাধী হওয়ার ক্ষেত্রে ) আপনার কোনও সমঝোতা ছাড়াই একই রকম সমস্যা রয়েছে।

73
কেউ কেউ করতে পারে এমন প্রতিটি বোবা কাজের জন্য আমাদের কী নাম থাকতে হবে? একে একে খারাপ ধারণা বলুন।
কালেব

74
এটিকে ঝাঁকুনি বিরোধী প্যাটার্নকে ব্যক্তিগতভাবে না বলা শক্ত।
PSr

উত্তর:


86

এটা স্পষ্টত খারাপ, তাই না?

হ্যাঁ।

  • এটি পদ্ধতিগুলিকে অ-প্রত্যাবর্তক করে তোলে, যদি তাদের একই পরিস্থিতিতে পুনরাবৃত্তভাবে বা বহু-থ্রেড প্রসঙ্গে বলা হয় তবে এটি একটি সমস্যা।

  • এর অর্থ হ'ল এক কল থেকে অন্য কলটিতে অবস্থিত অবস্থা (যদি আপনি পুনরায় পুনরায় স্থাপন করতে ভুলে যান)।

  • কোডটি বোঝা শক্ত করে তোলে কারণ কোডটি আসলে কী করছে তা নিশ্চিত করার জন্য আপনাকে উপরেরটি যাচাই করতে হবে। (স্থানীয় ভেরিয়েবলগুলি ব্যবহার করে বৈসাদৃশ্য))

  • এটি প্রতিটি Fooদৃষ্টিকোণকে এটির চেয়ে বড় করে তোলে । (এবং এন ভেরিয়েবলের জন্য এটি করার কল্পনা করুন ...)

এই অ্যান্টিপ্যাটার্নটির কোনও নাম আছে?

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


রেকর্ডের জন্য, এটি লেখার সঠিক উপায় হ'ল:

public class Foo
{
    public methodA()
    {
        Bar bar = new Bar();  // Use a >>local<< variable!!
        bar.a();
    }

    // Or more concisely (in this case) ...
    public methodB()
    {
        new Bar().b();
    }
}

লক্ষ্য করুন যে আমি জাভা শনাক্তকারীদের জন্য গৃহীত শৈলীর নিয়ম মেনে চলার জন্য পদ্ধতি এবং পরিবর্তনশীল নামগুলিও স্থির করেছি।


11
আমি বলব "আপনি যদি এটি উত্পাদন কোডে দেখে থাকেন তবে এটি আপনার নিযুক্তি প্রক্রিয়াটির পুনর্বার পরীক্ষা করা উচিত a "
বিটা

@ বেটা - এটিও, যদিও আপনার জোরালো কোড-পর্যালোচনা করে খারাপ কোডিং অভ্যাসগুলি সংশোধন করতে সক্ষম হওয়া উচিত।
স্টিফেন সি

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

@ স্টেফেনসি "এটি পদ্ধতিগুলিকে অ-প্রত্যাবর্তনকারী করে তোলে, যদি তাদের একই পরিস্থিতিতে পুনরাবৃত্তভাবে বা বহু-থ্রেড প্রসঙ্গে বলা হয় তবে এটি একটি সমস্যা।" । আমি জানি যে পুনঃপ্রবর্তন কী তবে পদ্ধতিগুলি কোনও লক ব্যবহার করছে না বলে এখানে একটি পয়েন্ট দেখতে পাচ্ছেন না? আপনি দয়া করে ব্যাখ্যা করতে পারেন?
গিক

@ গীক - আপনি সুনির্দিষ্ট উদাহরণটিতে খুব বেশি মনোযোগ দিচ্ছেন। আমি সেই সাধারণ ক্ষেত্রে বলছি যেখানে একাধিক থ্রেড থেকে পদ্ধতিটি পুনরুদ্ধার করা যেতে পারে বা পুনরাবৃত্তভাবে।
স্টিফেন সি

39

আমি এটিকে ভেরিয়েবলের জন্য অপ্রয়োজনীয় বৃহত স্কোপ বলব। যদি একাধিক থ্রেড মেথডা এবং মেথডবি অ্যাক্সেস করে তবে এই সেটিংটি জাতি শর্তগুলির জন্যও অনুমতি দেয়।


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

30

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

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

এই ক্ষেত্রে ডোরকনব কেবল একটি রেফারেন্স, তাই এটি সস্তা। যদি ডুরকনব একটি আসল অবজেক্ট (এবং তারা কেবলমাত্র রেফারেন্সের পরিবর্তে বস্তুটি পুনরায় ব্যবহার করছিল), তবে এটির জন্য এটি ব্যয়বহুল হতে পারে prudent global doorknob। যাইহোক, এটি সস্তা যখন, এটি হিসাবে পরিচিত cheapskate global doorknob

আপনার উদাহরণ cheapskateবৈচিত্র্যময়।


19

এখানে প্রাথমিক উদ্বেগ সম্মতিযুক্ত হবে - যদি ফু একাধিক থ্রেড ব্যবহার করে থাকে তবে আপনার সমস্যা আছে।

এর বাইরে এটি কেবল নির্বোধ - স্থানীয় ভেরিয়েবলগুলি তাদের নিজস্ব চক্রকে পুরোপুরিভাবে পরিচালনা করে। উদাহরণস্বরূপ ভেরিয়েবলগুলির সাথে প্রতিস্থাপন করা যখন সেগুলি আর কার্যকর না হয়ে বাতিল করতে হবে ত্রুটির আমন্ত্রণ is


15

এটি "ভেরিয়েবল পুনরায় ব্যবহারের" পক্ষের সাথে "অনুচিত স্কোপিং" এর একটি নির্দিষ্ট কেস।


7

এটি কোনও অ্যান্টি-প্যাটার্ন নয়। অ্যান্টি-প্যাটার্নগুলির এমন কিছু সম্পত্তি রয়েছে যা এটিকে একটি ভাল ধারণার মতো বলে মনে করে, যা লোকেদের উদ্দেশ্য করে তা করতে পরিচালিত করে; তারা নিদর্শন হিসাবে পরিকল্পনা করা হয় এবং তারপর এটি মারাত্মক ভুল হয়।

এটি কোনও বিষয় হ'ল কোনও প্যাটার্ন, একটি অ্যান্টি-প্যাটার্ন বা সাধারণভাবে ভুল-প্রয়োগকারী প্যাটার্ন যা এখনও কিছু জায়গায় ব্যবহার করে তা বিতর্ক তৈরি করে।

এটা ঠিক ভুল।

আরও কিছু যোগ করতে।

এই কোডটি কুসংস্কারজনক, বা সর্বোপরি একটি কার্গো-কাল্ট অনুশীলন।

একটি কুসংস্কার একটি সুস্পষ্ট সমর্থন ছাড়াই কিছু করা হয়। এটি বাস্তবের সাথে সম্পর্কিত হতে পারে তবে সংযোগটি যৌক্তিক নয়।

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

এই উভয় ক্ষেত্রেই আসল কোনও মামলা হওয়ার দরকার নেই।

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

যেমন একটি অ্যান্টি-প্যাটার্ন হ'ল এমন একটি স্মার্ট ব্যক্তি যিনি ভাষা, সমস্যা ডোমেন এবং উপলব্ধ গ্রন্থাগারগুলি ভালভাবে জানেন, এটি এখনও একটি খারাপ দিক রয়েছে যা (বা তার পক্ষে যুক্তিযুক্ত) একটি উত্সাহকে পরাভূত করে।

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


1
কিন্তু মানুষ না যে এই একটি ভাল ধারণা মনে করি, সম্ভবত, কারণ তারা মনে করে যে এটি কোড পুনঃব্যবহারের একটি ফর্ম আছে।
জেএসবি ձոգչ

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

এটি এন্টিপ্যাটার্ন নয়, এটি একটি কুসংস্কার করে তোলে।
জন হান্না

3

(1) আমি বলব এটি ভাল নয়।

এটি স্ট্যাক স্থানীয় ভেরিয়েবলগুলির সাথে স্বয়ংক্রিয়ভাবে করতে পারে তা বজায় রেখে ম্যানুয়াল হাউস সম্পাদন করছে।

"নতুন" কে প্রতিটি পদ্ধতির আমন্ত্রণ বলা হয় বলে কোনও পারফরম্যান্স সুবিধা নেই।

সম্পাদনা: ক্লাসের মেমরির পদচিহ্নটি বড় কারণ বার পয়েন্টারটি সর্বদা শ্রেণীর আজীবন স্মৃতি গ্রহণ করে। যদি বার পয়েন্টারটি স্থানীয় হয়, তবে এটি কেবল পদ্ধতি কলটির আজীবন স্মৃতি ব্যবহার করবে। পয়েন্টারের স্মৃতি সমুদ্রের মাত্র একটি ড্রপ, তবে এটি এখনও একটি অপ্রয়োজনীয় ড্রপ।

ক্লাসে অন্যান্য পদ্ধতিতে বারটি দৃশ্যমান। যে পদ্ধতিগুলি বার ব্যবহার করে না সেগুলি এটি দেখতে সক্ষম হয় না।

রাজ্য-ভিত্তিক ত্রুটি। এই বিশেষ ক্ষেত্রে রাষ্ট্রীয় বেস ত্রুটিগুলি কেবলমাত্র বহু-থ্রেডিংয়ের মধ্যে দেখা উচিত যেহেতু প্রতিবার "নতুন" বলা হয়।

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


2

আমি এটিকে "ঘুরে বেড়ানো জেনোফোবি" বলব। এটি একা থাকতে চায় তবে কোথায় বা কী তা বেশিরভাগ ক্ষেত্রেই জানে না। অন্যরা যেমন বলেছে তেমনি এটি একটি খারাপ জিনিস।


2

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

ইউনিট টেস্টিং করার এই মোটামুটি মানক উপায়

public class BarTester
{
    private Bar bar;

    public Setup() { bar = new Bar(); }
    public Teardown() { bar = null; }

    public TestMethodA()
    {
        bar.A();        
    }

    public TestMethodB()
    {
        bar.B();
    }
}

ওপির কোডের এই সমতুল্যের কেবল একটি রিফ্যাক্টরিং

public class BarTester
{
    private Bar bar;

    public TestMethodA()
    {
        bar = new Bar();
        bar.A();
        bar = null;
    }

    public TestMethodB()
    {
        bar = new Bar();
        bar.B();
        bar = null;
    }
}

ওপি উদাহরণ দেওয়া হিসাবে আমি কোড কখনো লিখতে হবে, এটা refactoring screams, কিন্তু আমি বিবেচনা প্যাটার্ন তন্ন তন্ন হতে অবৈধ কিংবা একটি antipattern


সেক্ষেত্রে ফিক্সচারটি প্রতিটি পরীক্ষার জন্য স্বাধীনভাবে ইনস্ট্যান্ট করা হয় এবং পরিবর্তনশীল পুনরায় ব্যবহার বা সমাবর্তন সম্পর্কিত সমস্যাগুলি ঘটে না। সাধারণ ক্ষেত্রে (ইউনিট পরীক্ষার বাইরে) প্রতিটি বস্তুর উপর একটি পদ্ধতি প্রয়োগ করা হয় কিনা তা জানা যায়নি।
ফিলিপ

1
@ ফিলিপ - আমি পুনরায় ব্যবহার বা সমঝোতা সমস্যার বিষয়ে বিতর্ক করি না তবে ওপির প্রশ্নটি সেই ইউনিয়ন-পরীক্ষায় সাধারণত ব্যবহৃত হয় এমন প্যাটার্ন সম্পর্কে। প্রতিটি পরীক্ষার জন্য স্থিতিশীলতা ইনস্ট্যান্ট করা হয় তা হ'ল পরীক্ষার কাঠামোর একটি বাস্তবায়ন বিশদ। এমনকি ইউনিট-টেস্টিংয়েও, প্যাটার্নটি কেবল তখনই নিরাপদ থাকে যখন পরীক্ষার কাঠামোটি ব্যবহার করা হয় বলে ধারণা করা হয়। উত্পাদন কোডে এই প্যাটার্নটি ব্যবহার করার সময় একই যুক্তি প্রযোজ্য।
লিভেন কের্মসেকারস

সেট barকরার দরকার নেই null, জুনিয়ট যাইহোক যাইহোক প্রতিটি পরীক্ষা পদ্ধতির জন্য একটি নতুন পরীক্ষার উদাহরণ তৈরি করে।
ওবলিস

2

এই কোড গন্ধটিকে বেক / ফওলারের দ্বারা রিফ্যাক্টরিংয়ের মধ্যে অস্থায়ী ক্ষেত্র হিসাবে উল্লেখ করা হয়।

http://sourcemaking.com/refactoring/temporary-field

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

যদি এটি ব্যক্তিগতভাবে প্রচারমূলক না হয়, তবে আমি আমার আসন্ন বহুবস্তি কোর্স, রিফ্যাক্টরিং ফান্ডামেন্টালগুলিতে এই নির্দিষ্ট কোড গন্ধকেও উল্লেখ এবং ব্যাখ্যা করি, যা আমি আশা করি আগস্ট ২০১৩ এ প্রকাশিত হবে।

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


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

1

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

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


1

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


1

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


-1

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

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

এটি যদিও "অ্যান্টিপ্যাটার্ন" ট্যাগটির প্রাপ্য নয় - তবে কীভাবে ওপি পুনরায় সংশোধন করা যায় তার পরামর্শগুলি দেখতে ভাল হয়েছে।


1
স্ট্যাক এক্সচেঞ্জ প্রোগ্রামারগুলিতে আপনাকে স্বাগতম, আপনার প্রথম উত্তরটি প্রবেশ করার জন্য ধন্যবাদ। দেখে মনে হচ্ছে আপনার খুব কম ভোট হয়েছে, সম্ভবত এফএকিউ প্রোগ্রামারস.স্ট্যাকেক্সেঞ্জঞ্জ / ফ্যাকের তালিকাভুক্ত কারণগুলির কারণে । প্রায়শই জিজ্ঞাসিত প্রশ্নাগুলি কার্যকর (এবং ভোট দিয়ে দেওয়া) উত্তরগুলি দেওয়ার বিষয়ে দুর্দান্ত পরামর্শ দেয়। কখনও কখনও লোকেরা ডাউন ভোট সম্পর্কে একটি নোট যুক্ত করার পক্ষে যথেষ্ট পরিমাণে তা নির্দেশ করে যাতে এটি কোনওভাবে ভুল হয়, নকল, প্রমাণ ছাড়াই মতামত, বা আমারও যা পূর্বের উত্তরটি পুনরাবৃত্তি করে। আমাদের বেশিরভাগই ভোট দিয়েছেন, বন্ধ করেছেন বা উত্তরগুলি সরিয়ে দিয়েছেন, তাই উদ্বিগ্ন হবেন না। এটি শুরু করার অংশ মাত্র। স্বাগত.
বিকাশকারী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.