সাহায্যকারী কী? এটি কি ডিজাইনের ধরণ? এটি কি একটি অ্যালগরিদম?


40

কিছুটা জিহ্বা-ইন-গাল হতে পারে তবে গুগলের মাধ্যমে আমি এই উত্তরটি কোথাও পাই না, সুতরাং সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ের উত্তর রয়েছে তা নিশ্চিত করার জন্য:

সাহায্যকারী কী?

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

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


9
সাহায্যকারী হ'ল আপনি যাকে কিছু কল করবেন যখন আপনি কী কল করবেন তা জানেন না তবে আপনি এর একটি বন্ধুকে জানেন। হারুনের পরিবর্তে আপনাকে 'জ্যাকের বন্ধু' বলা ভালো। ডাবল প্লাস ওঙ্গুড।
ডেভিড.পিএফএফএক্স

আইসোমরফিজম অবধি কোনও সহায়ক কোনও ব্যক্তিগত সদস্য।
টমাস এডিং

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

উত্তর:


63

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

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

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


9
খুব নিশ্চিত যে SomethingSomethingHelperএটি ক্লাসের আসল নাম নয়। এটি কোনও কোডের গন্ধ হোক বা না থাকুক নির্ভরকারী সহায়ক শ্রেণি কতটা সুনির্দিষ্ট তার উপর নির্ভর করবে , যেমন সহায়ক সহায়ক শ্রেণিগুলি Mathকোনও কোডের গন্ধ নয়।
রবার্ট হার্ভে

10
@ রবার্টহারভে - এঁহ, আমি যে বেশিরভাগ লোক দেখেছি তাদের বেশিরভাগের নামকরণ করা হয়েছে SomethingSomethingHelper। জাহান্নামের, আমি একটি বর্গ ডান এখন নামে দিকে তাকিয়ে আছি HelperMethodsমধ্যে <company>.Helpersনামস্থান। আমার কাছে, একটি Helperবর্গ একই বালতিতে রয়েছে *Manager
টেলাস্টিন

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

4
@ রবার্টহারভে - আপনি সম্ভবত সঠিক আমার সমস্ত ক্যারিয়ার আধুনিক ভাষা ব্যবহার করে ট্রেনের ধ্বংসস্তূপগুলি পরিষ্কার করা হয়েছে।
টেলাস্টিন

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

5

সাহায্যকারী হ'ল ক্ষতিকারক অতিরিক্ত শ্রেণি বা পদ্ধতি, যতক্ষণ না এটি বাহ্যিক উপাদানকে পরিপূর্ণ করে। যখন এটি বিপরীত হয়, তখন এটি খারাপ নকশাকে নির্দেশ করে কারণ কোডটি তার কর্তৃত্ব থেকে বাদ দেওয়া হয়েছে, যদি কোনও কর্তৃত্ব থাকে তবে।

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

digits = digits.Remove(0, TextHelper.FindRep('0', digits, 0, digits.Length - 2));

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

public static int FindRep(char chr, string str, int beginPos, int endPos)
{
    int pos;

    for (pos = beginPos; pos <= endPos; pos++)
    {
        if (str[pos] != chr)
        {
            break;
        }
    }

    return pos - beginPos;
}

এবং এখানে একটি খারাপ সহায়তার উদাহরণ রয়েছে:

public static class DutchZipcodeHelper
{
    public static bool Validate(string s)
    {
        return Regex.IsMatch(s, @"^[1-9][0-9]{3}[A-Z]{2}$", RegexOptions.IgnoreCase);
    }
}

public class DutchZipcode
{
    private string value;

    public DutchZipcode(string value)
    {
        if (!DutchZipcodeHelper.Validate(value))
        {
            throw new ArgumentException();
        }

        this.value = value;
    }

    public string Value
    {
        get { return value; }
    }
}

-1

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

আমরা এরপরে চলে এসেছি এবং এখন ব্যক্তি / বেস শ্রেণিতে সমস্ত কিছু রেখেছি। আমরা হেল্পার নামকরণ কনভেনশন ব্যবহার করা ছেড়ে দিলাম কারণ আমরা আমাদের প্রকল্পগুলিতে কম ফাইল রাখতে চাইতাম। এছাড়াও, কিছু শ্রেণীর নামের দৈর্ঘ্য নিয়ন্ত্রণের বাইরে চলে যাচ্ছিল। হাঃ হাঃ হাঃ.

একটি দুর্দান্ত উদাহরণ নয় তবে আপনি ধারণাটি পাবেন।

s = CompanyName.PersonHelper.GetPerson()
s = CompanyName.Person.GetPerson()

আমি বলছি না যে সহায়তার নামকরণ কনভেনশনটি হ'ল সঠিক সমাধান তবে এটি আমাদের জন্য কয়েক বছরের জন্য কার্যকর হয়েছিল।


2
কেন আপনি ব্যাখ্যা করেন নি।
রবার্ট হার্ভে

2
হ্যাঁ, আমি সেই ব্যাখ্যাটিও চাই।
অ্যারন হল

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