আমি কীভাবে একটি মোড়কে বেশিরভাগ পাস-থ্রু ফাংশন লিখতে পারি?


13

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

আসুন একটি উদাহরণ তৈরি করুন:

      Car
     /   \
Volvo     VolvoWithTrailer

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

int VolvoWithTrailer::GetNumSeats() {
  return mVolvo.GetNumSeats()
}

এটি সমাধানের একটি সুস্পষ্ট উপায় হ'ল ভলভো উইথট্রেলারকে ভলভোর একটি সাবক্লাস করা

    Car
     |
   Volvo
     |
VolvoWithTrailer

তবে এটি উত্তরাধিকারের চেয়ে কমপোজিশনের পক্ষে নীতি লঙ্ঘন করে বলে মনে হচ্ছে।

কীভাবে আমি এই সমস্ত মোড়ক (ভাষাটি সি ++) লেখা এড়াতে পারি? বা - যদি তা আপনার অবস্থান হয় - তবে আমি কেন কেবল তাদের লিখতে / কেবল উত্তরাধিকার ব্যবহার করব? এমন কোনও টেম্পলেট যাদু আছে যা এর সাথে সহায়তা করতে পারে?


2
যদিও এটি খুব বেশি, এবং জাভাতে চিন্তা করে না thinking একটি 'ট্রেলার' ইন্টারফেস সম্পর্কে কি? ভলভো উইথট্রেলারটি ভলভো বাড়িয়ে ট্রেলার ইন্টারফেসটি প্রয়োগ করবে?

7
উত্তরাধিকারের উপর পছন্দসই রচনাটি কেবল যখন তা করতে বুদ্ধিমান হয়।
রবার্ট হার্ভে

@ রবার্টহারভে: +১ এটি একটি নির্দেশিকা, একটি "নীতি" নয় এবং অবশ্যই কোনও নিখুঁত আদেশ নয়।
ম্যাসন হুইলারের

পাইথনে আপনি ইন্ট্রোস্পেকশন দিয়ে সমাধান করতে পারেন (যা সি # রিফ্লেকশন ডাকে)।
ব্যবহারকারী16764

1
আপনার আইডিই কোড পরিচালনা করে না?
অ্যামি ব্লাকনশিপ

উত্তর:


5

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

সুতরাং প্রশ্নটি তখন "আপনার কী লেখার দরকার আছে?" আমি মনে করি না যে আপনি একটি নির্দিষ্ট উত্তর দিতে সক্ষম হওয়ার জন্য পর্যাপ্ত তথ্য সরবরাহ করেছেন, তাই আমি সিদ্ধান্ত নেওয়ার ক্ষেত্রে কেবল এমন কিছু বিষয় তালিকাভুক্ত করব যা আমি ভাবতে চাই :

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

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

৩. বোঝা সহজ কোনটি?
একটি পন্থা কি আপনার দিকে ঝাঁপিয়ে পড়ে যে আপনার পিছনে যে কেউ আসার সাথে সাথে আপনি যা করার চেষ্টা করছেন তা "পেয়ে" যাবে? আপনার সতীর্থদের কি এমন কোনও পক্ষপাতিত্ব রয়েছে যা তাদের পক্ষে বজায় রাখা আরও কঠিন হতে পারে? যদি সমস্ত জিনিস সমান হয় তবে সলিউশনটি নিন যা সর্বনিম্ন জ্ঞানীয় বোঝা চাপায়।

৪. একের পর এক দৃষ্টিভঙ্গি ব্যবহার করার অতিরিক্ত সুবিধা কি রয়েছে?
আমার কাছে যে জিনিসটি লাফিয়ে উঠবে তা হ'ল র‍্যাপার আইডিয়াটির একটি স্বতন্ত্র সুবিধা রয়েছে যদি আপনি এটি লিখেন যে আপনার CarWithTrailerWrapper কোনও গাড়ি এবং কোনও ট্রেলার কোনও CarWithTrailer এ মোড়াতে পারে। তারপর, আপনি সব আপনার পাস-থ্রু পদ্ধতি লেখার গুটান, কিন্তু আপনি শুধুমাত্র তাদের লিখতে একবার , বরং প্রতিটি গাড়ি বর্গ জন্য একবারের।

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

এক্সটেনশন পদ্ধতিটি ব্যবহার করে আপনি নিখরচায় পেতে চাইলে আলাদা আলাদা সুবিধা থাকতে পারে তবে আমি সেগুলি দেখতে পাচ্ছি না।

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

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


3

কারণ বেস টাইপ ইন্টারফেসটি বেশ বড় এটিতে অনেকগুলি পাস-থ্রো ফাংশন লেখার সাথে জড়িত।

এবং আপনার সমস্যা আছে।

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


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