সংযোজন। সেরা অনুশীলন


11

এই থ্রেড থেকে অনুসরণ করে আমি শুরু করেছি

একক প্যাটার্ন

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

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

আমি সত্যিই খারাপ অভ্যাসের মধ্যে যেতে চাই না এবং খারাপ কোডিং শুরু করতে চাই না, তাই আমি আপনার প্রতিক্রিয়ার প্রশংসা করব।

উত্তর:


11

আপনার কোডটি আলগাভাবে সংযুক্ত করার জন্য এখানে কয়েকটি সাধারণ জিনিস মনে রাখা দরকার:

অংশ 1:

প্রযুক্তিগতভাবে "কনসার্নের বিচ্ছেদ" নামে পরিচিত। প্রতিটি শ্রেণীর একটি নির্দিষ্ট ভূমিকা থাকে, এটি ব্যবসায়ের যুক্তি বা অ্যাপ্লিকেশন যুক্তি পরিচালনা করা উচিত। উভয় দায়িত্ব একত্রিত করে ক্লাস সম্পর্কে পরিষ্কার এবং চালিত হওয়ার চেষ্টা করুন। অর্থাত্ (ব্রড টার্ম) ডেটা পরিচালনা করে এমন একটি শ্রেণি হ'ল অ্যাপ্লিকেশন লজিক এবং ডেটা ব্যবহার করে এমন একটি ক্লাস হ'ল ব্যবসায়িক যুক্তি।

ব্যক্তিগতভাবে আমি এটিকে (আমার নিজের ছোট্ট পৃথিবীতে) উল্লেখ করি create it or use it। একটি শ্রেণীর একটি অবজেক্ট তৈরি করা উচিত বা কোনও বস্তু ব্যবহার করা উচিত এটি কখনই দুটোই করা উচিত নয়।

অংশ ২:

উদ্বেগের বিচ্ছেদ কীভাবে কার্যকর করা যায়।
একটি সূচনা পয়েন্ট হিসাবে দুটি সহজ কৌশল আছে:

দ্রষ্টব্য: নকশার নিদর্শনগুলি পরম নয়।
তাদের পরিস্থিতি অনুসারে কাস্টমাইজ করার কথা রয়েছে তবে এগুলির অন্তর্নিহিত থিম রয়েছে যা সমস্ত অ্যাপ্লিকেশনগুলির মতো। সুতরাং নীচের উদাহরণগুলির দিকে তাকান না এবং বলবেন যে আমাকে অবশ্যই এটি কঠোরভাবে অনুসরণ করতে হবে; এগুলি কেবল উদাহরণ (এবং এতে কিছুটা স্বীকৃত)।

নির্ভরতা ইনজেকশন :

আপনি এখানে কোনও ক্লাস ব্যবহার করে এমন একটি বস্তুটি পাস করেন। আপনি যে ইন্টারফেসটি একটি ইন্টারফেসের উপর ভিত্তি করে উত্তীর্ণ করেছেন তাই আপনার শ্রেণি এটি দিয়ে কী করবে তা জানে তবে প্রকৃত বাস্তবায়নটি জানতে হবে না।

class Tokenizer
{
    public:
        Tokenizer(std::istream& s)
            : stream(s)
        {}
        std::string nextToken() { std::string token; stream >> token;return token;}
    private:
        std::istream& stream;
};

এখানে আমরা টোকেনাইজারে স্ট্রিমটি ইনজেক্ট করি। টোকনাইজার স্ট্রাইড :: ইসট্রিমের ইন্টারফেসটি প্রয়োগ করে স্ট্রিমটি কী ধরণের তা জানে না।

পরিষেবা লোকেটার প্যাটার্ন :

সার্ভিস লোকেটার প্যাটার্নটি নির্ভরতা ইনজেকশনটির ক্ষেত্রে সামান্য প্রকরণ। যে বস্তুটি এটি ব্যবহার করতে পারে তা দেওয়ার পরিবর্তে আপনি এটিকে এমন একটি বস্তুটি পাস করেন যা আপনি যে অবজেক্টটি ব্যবহার করতে চান তা কীভাবে সনাক্ত করতে (তৈরি করতে) জানে।

class Application
{
     public:
         Application(Persister& p)
             : persistor(p)
         {}

         void save()
         {
             std::auto_ptr<SaveDialog> saveDialog = persistor.getSaveDialog();
             saveDialog.DoSaveAction();
         }

         void load()
         {
             std::auto_ptr<LoadDialog> loadDialog = persistor.getLoadDialog();
             loadDialog.DoLoadAction();
         }
    private:
        Persister& persistor;
};

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

এটি কার্যকর যখন potentiallyআপনি কোনও ক্রিয়াকলাপটি তত্ক্ষণাত্‍ একবার প্রতিবিম্বিত করেন যখন একটি অনন্য বস্তুর প্রয়োজন হয়।

ব্যক্তিগতভাবে আমি এটি ইউনিট পরীক্ষা লেখার ক্ষেত্রে বিশেষভাবে দরকারী বলে মনে করি।

প্যাটার্নগুলির নোট:

ডিজাইনের নিদর্শনগুলি নিজের কাছে একটি বিশাল বিষয়। এটি কোনও উপায়েই আপনি looseিলে ;ালা সংযোগে সহায়তা করতে পারেন এমন নিদর্শনগুলির একচেটিয়া তালিকা নয়; এটি কেবল একটি সাধারণ সূচনা পয়েন্ট।

অভিজ্ঞতার সাথে আপনি বুঝতে পারবেন যে আপনি ইতিমধ্যে এই নিদর্শনগুলি ব্যবহার করছেন কেবল এটির জন্য যে আপনি তাদের আনুষ্ঠানিক নাম ব্যবহার করেন নি। তাদের নামগুলি প্রমিত করে (এবং প্রত্যেককে সেগুলি শিখানোর জন্য) আমরা দেখতে পাই যে ধারণাগুলি যোগাযোগ করা সহজ এবং দ্রুত।


3
@ ড্যারেন ইয়ং: এটি গ্রহণ করার জন্য ধন্যবাদ তবে আপনার প্রশ্নটি কেবল তিন ঘন্টা পুরানো। আমি একদিনে ফিরে আসতে পারি যাতে অন্যরা আরও ভাল উত্তর দেয় না তা যাচাই করে।
মার্টিন ইয়র্ক

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

@ ড্যারেন ইয়ং: সমস্ত প্রোগ্রামিংয়ের মতোই লাইন ধূসর এবং অস্পষ্টভাবে ভাল সংজ্ঞায়িত হয়নি। আপনার কোডটি না পড়ে নির্ভুল প্রতিক্রিয়া দেওয়া শক্ত। তবে আমি যখন কথা বলি তখন আমি managing the dataভেরিয়েবলগুলি উল্লেখ করি (আসল ডেটা নয়)। সুতরাং পয়েন্টারগুলির মতো জিনিসগুলি পরিচালনা করা দরকার যাতে তারা ফাঁস না করে। তবে ডেটা ইনজেকশন দেওয়া যায় বা কীভাবে ডেটা পুনরুদ্ধার করা যায় তা বিমূর্ত করা যেতে পারে (যাতে আপনার ক্লাসটি বিভিন্ন ডেটা পুনরুদ্ধার পদ্ধতিতে পুনরায় ব্যবহার করা যেতে পারে)। আমি দুঃখিত আমি আরও সুনির্দিষ্ট না হতে পারে।
মার্টিন ইয়র্ক

1
@ ড্যারেন ইয়াং: যেমনটি তার উত্তরে @ স্টুপার ইউজার লিখেছেন। ওভারবোর্ডে যাবেন না ( minutae of loose couplingএকে একে (মিনিট শব্দটি ভালোবাসুন))। প্রোগ্রামিংয়ের গোপনীয় কৌশলগুলি কখন ব্যবহার করতে হবে তা শিখতে হবে। অতিরিক্ত ব্যবহারের ফলে কোডের জট বেঁধে যেতে পারে।
মার্টিন ইয়র্ক

@ মার্টিন - পরামর্শের জন্য ধন্যবাদ। আমি মনে করি আমি এখানেই লড়াই করে চলেছি ..... আমি আমার কোডের আর্কিটেকচার সম্পর্কে ক্রমাগত উদ্বেগ বোধ করি এবং আমি সি # ব্যবহার করছি এমন নির্দিষ্ট ভাষা শেখার চেষ্টা করছি। আমার ধারণা এটি অভিজ্ঞতা এবং এই জিনিসগুলি শিখার আমার ইচ্ছা নিয়ে আসবে। আমি আপনার মন্তব্য প্রশংসা করি।
ড্যারেন ইয়ং

6

আমি একটি এএসপি.এনইটি বিকাশকারী তাই উইনফর্মস সংযোগ সম্পর্কে খুব বেশি কিছু জানি না, তবে ইউআই, ডোমেন, ডেটা অ্যাক্সেস লেয়ার (ডাল) এর 3 স্তরের অ্যাপ্লিকেশন আর্কিটেকচার ধরে ধরে এন-টায়ার ওয়েব অ্যাপ্লিকেশন থেকে কিছুটা জানতে পারি।

আলগা সংযোগ বিমূর্ততা সম্পর্কে।

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

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

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

এছাড়াও, ভিএস-এর বিশ্লেষণ মেনুতে (আপনার সংস্করণ অনুসারে) আপনার প্রকল্পের জন্য কোড মেট্রিক গণনা করার সরঞ্জাম রয়েছে, যার মধ্যে একটি ক্লাস কাপলিং, এমএসডিএন ডকুমেন্টেশনে এ সম্পর্কে আরও তথ্য থাকবে।

পেয়ে খুব আলগা কাপলিং এর minutae নিচে bogged যদিও, আছে কিনা কোন সুযোগ যে জিনিস পুনঃব্যবহৃত পেতে (একাধিক UI 'তে সঙ্গে যেমন একটি ডোমেইন প্রকল্প) হয় এবং পণ্য জীবন ছোট হয়, তাহলে আলগা কাপলিং কম হয়ে অগ্রাধিকারের (এটি এখনও বিবেচনায় নেওয়া হবে) তবে এটি এখনও আপনার কোডটি পর্যালোচনা করবে এমন স্থপতি / প্রযুক্তিবিদদের দায়বদ্ধতা হবে।


3

কাপলিং বলতে বোঝায় যে এক শ্রেণীর অন্য শ্রেণির প্রত্যক্ষ জ্ঞানের ডিগ্রি রয়েছে । এটি এনক্যাপসুলেশন বনাম নন-এনক্যাপসুলেশন হিসাবে ব্যাখ্যা করার অর্থ নয়। এটি অন্য শ্রেণীর বৈশিষ্ট্য বা বাস্তবায়ন সম্পর্কে এক শ্রেণীর জ্ঞানের রেফারেন্স নয়, বরং অন্য শ্রেণীর নিজেই জ্ঞান। দৃ coup় মিলন ঘটে যখন নির্ভরশীল শ্রেণিতে একটি কংক্রিট শ্রেণিতে সরাসরি একটি পয়েন্টার থাকে যা প্রয়োজনীয় আচরণ সরবরাহ করে। নির্ভরতা প্রতিস্থাপন করা যায় না, বা নির্ভরশীল শ্রেণীর পরিবর্তনের প্রয়োজন ছাড়াই এর "স্বাক্ষর" পরিবর্তন করা যায়। আলগা সংযুক্তি ঘটে যখন নির্ভরশীল শ্রেণিতে কেবলমাত্র একটি ইন্টারফেসের পয়েন্টার থাকে, যা পরে এক বা অনেকগুলি কংক্রিট শ্রেণি দ্বারা প্রয়োগ করা যেতে পারে।নির্ভরশীল শ্রেণীর নির্ভরতা হ'ল ইন্টারফেস দ্বারা নির্দিষ্ট "চুক্তি"; পদ্ধতি এবং / অথবা বৈশিষ্ট্যগুলির একটি সংজ্ঞায়িত তালিকা যা ক্লাস প্রয়োগকারী অবশ্যই সরবরাহ করে। ইন্টারফেস প্রয়োগ করে যে কোনও শ্রেণি এইভাবে শ্রেণি পরিবর্তন না করে নির্ভরশীল শ্রেণীর নির্ভরতা মেটাতে পারে। এটি সফ্টওয়্যার ডিজাইনে এক্সটেনসিবিলিটির অনুমতি দেয়; একটি ইন্টারফেস প্রয়োগকারী একটি নতুন শ্রেণি নির্ভরশীল শ্রেণীর পরিবর্তনের প্রয়োজন ছাড়াই কিছু বা সমস্ত পরিস্থিতিতে বর্তমান নির্ভরতা প্রতিস্থাপনের জন্য রচনা করা যেতে পারে; নতুন এবং পুরাতন ক্লাসগুলি অবাধে আন্তঃজাত হতে পারে। দৃ coup় সংযোগ এই অনুমতি দেয় না। রেফ লিঙ্ক


3

5 টি সলিড নীতিগুলি দেখুন। এসআরপিকে মেনে চলা, আইএসপি এবং ডিআইপি লক্ষণীয়ভাবে কম সংযোজন করবে, ডিআইপি এখন পর্যন্ত সবচেয়ে শক্তিশালী। এটি ইতিমধ্যে উল্লিখিত ডিআই এর নীচে মৌলিক নীতি ।

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

এবং সর্বশেষে, আপনি সাধারণ কৌশলতে প্রবেশের পয়েন্ট হিসাবে আইওসিতে এই বিভাগটি বেশ কার্যকর ব্যবহার করতে পারেন।

প্রকৃতপক্ষে, আমি স্ট্যাকওভারফ্লোতে একটি প্রশ্ন পেয়েছি , যেখানে আমি সলিডের প্রয়োগটি একটি কংক্রিট সমস্যার উপর প্রদর্শন করি। একটি আকর্ষণীয় পড়া হতে পারে।


1

উইকিপিডিয়া অনুসারে:

কম্পিউটিং এবং সিস্টেমে ডিজাইনে একটি স্বচ্ছ জোড়যুক্ত সিস্টেম এমন এক যেখানে এর প্রতিটি উপাদান অন্য পৃথক উপাদানগুলির সংজ্ঞা সম্পর্কে অল্প বা জ্ঞান রাখে না বা ব্যবহার করে।

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

বিপরীতে, একটি শিথিলভাবে যুগল পদ্ধতিতে পরিবর্তনগুলি তুলনামূলকভাবে বিচ্ছিন্ন হয়। সেগুলি কম ব্যয়বহুল এবং বৃহত্তর আত্মবিশ্বাসের সাথে তৈরি করা যেতে পারে।

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

  • ডেটা স্টোরেজ এবং পুনরুদ্ধার যুক্তি
  • ব্যবসায়িক যুক্তি
  • ইউআই চালাতে লজিকের প্রয়োজন

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

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

তবে উপলব্ধি করা গুরুত্বপূর্ণ বিষয়টি হ'ল এই নিদর্শনগুলি এবং নীতিগুলি কেবল এটিই - নিদর্শন এবং নীতিগুলি। তারা নিয়ম না । এর অর্থ হ'ল তাদের ব্যবহারিক ও বুদ্ধিমানভাবে প্রয়োগ করা দরকার

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

শুভকামনা.


1

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

একটি ভাল কৌশলটি বিভিন্ন লাইব্রেরি / অ্যাসেমব্লিতে ক্লাস স্থাপন করা এবং তাদের যতটা সম্ভব অন্যান্য কয়েকটি গ্রন্থাগারের উপর নির্ভর করতে হবে, যা আপনাকে কম নির্ভরতা ব্যবহার করতে রিফেক্টরকে বাধ্য করবে


4
কনডমটি কি কিছু বিমূর্ত আইটি শব্দ বা আমি কেবল শ্লেষ পাই না?
ড্যারেন ইয়ং

3
এটি নির্ভরতা ইনজেকশন ধারকটির অন্য নাম।
Mchl

2
এছাড়াও ভাইরাসগুলির বিস্তার রোধ করার দুর্দান্ত উপায়। আমরা কি একই জিনিস সম্পর্কে কথা বলছি?
sova

1
ভারী
মিলন

1
শিরোনামটি সেট করা ফর্ম্যাটিংয়ের পক্ষে
আপত্তিজনক

0

আমাকে একটি বিকল্প ভিউ সরবরাহ করুন। আমি কেবল প্রতিটি বর্গের একটি ভাল এপিআই হিসাবে পদটিকে এটি বিবেচনা করি। পদ্ধতিগুলিতে যে ক্রমটি আহ্বান করা হয়েছে তা সুস্পষ্ট। তারা যা করে তা সুস্পষ্ট। আপনি ন্যূনতম প্রয়োজনীয় পদ্ধতির সংখ্যা হ্রাস করেছেন। উদাহরন স্বরূপ,

init, খোলা, বন্ধ

বনাম

setTheFoo, setBar, initX, getConnication, বন্ধ করুন close

প্রথমটি সুস্পষ্ট এবং দুর্দান্ত API এর মতো দেখাচ্ছে। দ্বিতীয়টি যদি ভুল ক্রমে ডাকা হয় তবে ত্রুটি ঘটতে পারে।

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

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