"একটি পদ্ধতির উত্সটি একটি মান ফিরিয়ে দেয় বা তার পার্শ্ব-প্রতিক্রিয়া থাকতে পারে, তবে উভয়ই নয়"


12

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

এই পরামর্শের উত্স কি? কোন ব্যক্তি বা সম্প্রদায়ের মধ্যে থেকে এটি উত্থিত হয়েছিল?

অতিরিক্ত creditণ: এই পরামর্শ অনুসরণ করে দাবী লাভ কি?


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

এই স্তূপের উত্তরগুলির মধ্যে কয়েকটি আমাকে অবাক করে দিয়েছিল যে আপনি এই পরামর্শের কোনও লেখক দাবি করেছেন এমন সুবিধা সম্পর্কে জিজ্ঞাসা করছেন বা আদৌ দাবি করা সম্ভব এমন সমস্ত সুযোগ-সুবিধার তালিকার জন্য?
gnat

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

"পাইল-অন কারণে" প্রশ্নটি খুব বিস্তৃত হিসাবে বন্ধ হতে পারে । যদি আপনি এটি "খোলা পাশে থাকতে" পছন্দ করেন তবে আমার মনে হয় যে এটির সুবিধার জন্য এটি সংকীর্ণ করা আরও নিরাপদ হবে যা লেখকের দ্বারা দাবি করা হয়েছে
gnat

একটি সুবিধা হ'ল যদি আপনি কোডের ভলিউম দ্বারা অর্থ প্রদান করেন তবে এটি অতিরিক্ত উত্পাদন করে। "doSomething; GetResultOfSomething; HandleErferencesFromSomething;"

উত্তর:


13

গ্রেগ ইয়ংয়ের মতে, এই ধারণাটির উদ্ভব বার্ট্র্যান্ড মেয়ার : কমান্ড-কোয়েরি বিচ্ছেদ থেকে

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

1: আইফেল: সফটওয়্যার ইঞ্জিনিয়ারিং স্লাইড 43-48 এর জন্য একটি ভাষা

ডোমেন চালিত ডিজাইনে, এটি গ্রেগ ইয়ংয়ের নাম অনুসারে কমান্ড-কোয়েরি-পঠন পৃথককরণ / পৃথককরণ (সিকিউআরএস) এর মতো।

গ্রেগ ইয়াং বার্ট্র্যান্ড থেকে সিকিউএসের ধারণা নিয়েছিলেন এই সিকিউআরএস নিবন্ধে মার্টিন ফাউলারের দ্বারা বর্ণিত সিকিউআরএসের নামকরণের জন্য

উপকারিতা

  • রিড (ক্যোয়ারী) অংশটি লিখন (কমান্ড) অংশ থেকে আলাদাভাবে ছোট / ছোট করা যায়। অপটিমাইজেশন / পারফরম্যান্স কী হ'ল দু'টিকে আলাদা করা একে অপরের পথে আসতে বাধা দেয়।

আরও জানতে মার্টিন ফোলার লিঙ্কে নিবন্ধটি পড়ুন ।


1
স্বাভাবিকভাবেই, অনেক পরিস্থিতিতে একটি কার্যকর ফলাফল উত্পন্ন করা এবং একই সাথে কিছু সংশোধন করা দু'জনের আলাদাভাবে আলাদা করার চেয়ে ব্যয়বহুল।
উত্সাহক

1
@ ডেডুপ্লিকেটর একটি ক্লিচ উদাহরণ ইন্টারলকডকম্পেরএক্সচেঞ্জ হচ্ছে?

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

4

কোথা থেকে এসেছে তা আমি জানি না, তবে এটি ভাল পরামর্শ এবং মোটামুটি সোজা-এগিয়ে বোঝার জন্য।

যে কোনও বুদ্ধিমানভাবে নকশাকৃত প্রোগ্রাম বিভিন্ন ভাগে বিভক্ত হবে, একত্রিত হয়ে বিভিন্ন উপায়ে রচনা করা হবে। কোনও বিশেষ অংশ কী করে তা নিয়ে তর্ক করা যতই কঠিন, আপনার প্রোগ্রামটি অনুমানযোগ্য পদ্ধতিতে প্রতিক্রিয়া ব্যক্ত করবে তা নিশ্চিত করা তত কঠিন।

পার্শ্ব-প্রতিক্রিয়া তৈরি করে এমন অংশগুলি বিচ্ছিন্ন করা বাকী কারণগুলি, পরীক্ষা করা এবং ডিবাগ করা সহজ করে। পার্শ্ব-প্রতিক্রিয়া তৈরি করে এমন প্রতিটি অংশের পার্শ্ব-প্রতিক্রিয়াগুলির সংখ্যা হ্রাস করা সেই অংশটিকে একই পদ্ধতিতে কাজ করা সহজতর করবে।

আপনি যদি এটিকে আরও পচে ফেলেন তবে কোনও ফেরতের মান একটি প্রভাব। পার্শ্ব প্রতিক্রিয়া একটি প্রভাব। একটি ফাংশনটিতে কেবল 1 টি প্রভাব তৈরি করা উচিত (যদি সম্ভব হয়) কারণ কোনও ফাংশনে যে পরিমাণ সংখ্যক ইনপুট এবং প্রভাব রয়েছে, এটি আসলে কী করে তা নিয়ে তর্ক করতে তত বেশি অসুবিধা হয়।


এই doen't এমনকি প্রশ্ন জিজ্ঞাসা দেখুন মোকাবেলার প্রচেষ্টা উত্তর কিভাবে
মশা

@ জাগান আমার প্রশ্নটি দুটি ভাগে এসেছিল: মূল প্রশ্ন ("কে"), এবং অতিরিক্ত creditণ ("কেন) thisএটি অতিরিক্ত creditণের অংশকে সম্বোধন করে না?
ওয়েন কনরাড

আমার পাঠ্য অনুযায়ী (" দাবি করা সুবিধা"), কেন-অংশটি উদ্ধৃত লেখকের প্রস্তাবিত হবে বলে আশা করা হচ্ছে। প্রশ্নটি জন্য জিজ্ঞাসা করা বলে মনে হচ্ছে না তালিকা সব সম্ভব বেনিফিট
মশা

2
@gnat আমি এই পরামর্শটি বোঝার চেষ্টা হিসাবে প্রশ্নটি বুঝতে পেরেছিলাম, এর পেছনের কারণ পাশাপাশি এটি যে প্রসঙ্গে দেওয়া হয়েছিল তা উভয়ই। আমি বিশ্বাস করি না যে প্রশ্নের কেবলমাত্র অংশটিই ঠিক করা অনুচিত ছিল।
মরগেন

1

অতিরিক্ত creditণ: এই পরামর্শ অনুসরণ করে মূলত দাবী করা সুবিধাটি কী ?

পার্শ্ব প্রতিক্রিয়া থেকে রিটার্ন মান পৃথক করার একটি সুবিধা হ'ল এটি একটি সম্ভাব্য সমস্যাটি সরিয়ে দেয় যা শর্ট সার্কিট মূল্যায়নের ফলে হতে পারে ।

bool FooWithSideEffect() {
    // do query
    // do side effect
    return resultOfQuery;
}

bool BarWithSideEffect() {
    // do query
    // do side effect
    return resultOfQuery;
}

void BadShortCircuitEvaluation()
{
    // the programmer's intent is to have side effects of both functions
    if (FooWithSideEffect() && BarWithSideEffect() ) {
        // do something
    }

    // in case FooWithSideEffect() returns true, 
    // then BarWithSideEffect() is not called at all
    // because of short-circuit evaluation
}

এই পরামর্শের লেখক দ্বারা দাবি করা একটি সুবিধা কি?
gnat

আমি ভয় করি যে আমার কাছে historicalতিহাসিক ও ব্যবহারিক মিশ্রণ রয়েছে fear
নিক আলেক্সেভ

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