যদি আপনার কাছে এমন কিছু যুক্তি থাকে যা দুটি নিয়ামকের মধ্যে ভাগ করে নেওয়া দরকার তবে আপনি এটি কোথায় রাখছেন?


10

আমার একক উদ্দেশ্য ফাংশনের একটি সেট রয়েছে যা আমার দুটি পৃথক নিয়ামক প্রয়োজন in এই মুহূর্তে আমার কাছে কেবল সদৃশ কোড রয়েছে এবং আমি এটি থেকে মুক্তি পেতে চাই। এই কোডটি নিয়ামকের অংশ এবং এটি আমার পরিষেবা স্তরের সাথে সম্পর্কিত নয়। কোথায় রাখবে?


কেকপিএইচপি তাদের উপাদানগুলি বলে: book.cakephp.org/2.0/en/controllers/compferences.html সম্ভবত এটি কিছু অনুপ্রেরণা।
লুৎস ফ্রাঙ্কেন

উত্তর:


12

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

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

// NOTE: group similar functions
static class LoginUtility
{
    static bool IsLoggedIn(Request request) { /* ... */ }
}

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

উভয় ক্ষেত্রেই, আপনি নিজের কন্ট্রোলারগুলির প্রতিটিতে এটির মতো প্রবেশ করতে পারবেন:

void MyAction()
{
    if (LoginUtiltiy.IsLoggedIn(Request))
    {
        // Do something ...
    }
}

আসল উত্তর

আপনার প্ল্যাটফর্মটি কী ছিল তা আপনি বলেননি, কারণ এটি উত্তরে প্রভাব ফেলতে পারে। এটি একটি অবজেক্ট ওরিয়েন্টেড ল্যাঙ্গুয়েজ বলে ধরে নিলে , সবচেয়ে সাধারণ পন্থাটি এমন একটি বেস ক্লাস তৈরি করা হয় যা উভয় নিয়ামকই প্রসারিত করে। উদাহরণস্বরূপ, রুবি অন রেলে আপনার থাকতে পারে:

class BaseController < ApplicationController
    def my_special_function
        # ...
    end
end

class Controller1 < BaseController
    # ...
end

class Controller2 < BaseController
    # ...
end

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


3
বিকল্পটি হ'ল যুক্তিটিকে একটি পৃথক শ্রেণিতে অন্তর্ভুক্ত করা, তারপরে সেই শ্রেণিটি ইনস্ট্যান্ট করে এবং উভয় নিয়ামক থেকেই যুক্তি কল করা।
ক্রমিই

5
হ্যাঁ, আমি সবসময়ে উত্তরাধিকারের চেয়ে রচনাটির পক্ষে চাই
রেনো

1
উত্তরাধিকারের অতিরিক্ত স্তর যুক্ত করার পরিবর্তে ক্রামির পরামর্শটি করুন। তবে আমি মনে করি যে তাঁর আসল প্রশ্নটি ছিল সেই ক্লাসটি কোথায় সমাধান করবে?
কেউ নেই

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

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