যখন আমরা পার্শ্ব প্রতিক্রিয়া থেকে গণনা পৃথক করি তখন আমরা "বিশ্বের জিজ্ঞাসা" কোডটি কোথায় রাখি?


10

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

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


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

1
@ মারজানভেনেমা, এটিই কেবল আমার মনে আসে option তাত্ত্বিক দিক থেকে দেখুন: পদ্ধতিটি যদি অন্যথায় পার্শ্ব-প্রভাব-মুক্ত হয়, তবে পার্শ্ব-কার্যকরী কলব্যাকটি প্রার্থনা করে এটি পার্শ্ব-কার্যকরী হয়ে ওঠে। সম্ভবত এখানে আমার সমস্যাটি হ'ল আমি ধরে নিচ্ছি যে পার্শ্ব প্রতিক্রিয়া থেকে পৃথকীকরণের গণনার জন্য গণনাটি অবশ্যই স্বচ্ছ হওয়া দরকার। যদিও এটি প্রয়োজনীয় সত্য নয়।
আলেক্সি

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

উত্তর:


1

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

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

একটি উচ্চ-অর্ডার ফাংশন যার দেহ বিশুদ্ধ শুদ্ধ রয়েছে: http://books.google.com/books?id=Yb8azEfnDYgC&pg=PA143#v=onepage&q&f=false

আমি এই সম্পর্কে লিখেছি, এই ধরণের ফাংশনটিকে সম্ভাব্য-খাঁটি ফাংশন বলে: http://adamjonrichardson.com/2014/01/13/potentially-pure-funifications/

যদি আপনি ফলস-থ্রি ফাংশনগুলির সাথে একটি সম্ভাব্য-খাঁটি ফাংশন একত্রিত করেন (যার শাখা প্রশাখাগুলির অভাব রয়েছে এবং যতটা সম্ভব সম্ভব করুন), যে সংমিশ্রণকে আমি বিচ্ছিন্নতা সেটগুলি বলি, আপনি পার্শ্ব প্রতিক্রিয়াগুলি বেশ কার্যকরভাবে বিচ্ছিন্ন করতে পারেন এবং খুব পরীক্ষামূলক কোড তৈরি করতে পারেন: http: // adamjonrichardson.com/2014/01/15/isolating-side-effects-using-isolation-sets/


0

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

class database_querier
    feature -- queries
        was_previous_query_ok : boolean is
            do
                Result = …
            end

        previous_query_result : string is 
            requires
                was_previous_query_ok
            do
                Result = query_result
            end

    feature -- commands
        query_db (…) is
            do
                …
                query_result = bla
            end

    feature {none} --data
        query_result : string

1
আইফেলটিকে বুনোতে দেখতে ভালোবাসি।
এসবিআই

@ এসবিআই এটি কেবল ছদ্ম কোড। :-)
ctrl-alt-delor 21

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