জাভাস্ক্রিপ্টে বনাম নির্ভরতা ইনজেকশন প্রয়োজন মডিউল


24

আজকাল আমার মনে একটি প্রশ্ন ছড়িয়ে পড়ে:

আমরা জাভাস্ক্রিপ্ট যেভাবে প্রায় everythingতিহ্যবাহী সফ্টওয়্যার বিকাশে একটি ভাল অনুশীলন হিসাবে বিবেচিত হয় যে সমস্ত কিছুর বিরুদ্ধে যায়?

এই বিবৃতি সম্পর্কিত আমার কাছে একাধিক প্রশ্ন / পর্যবেক্ষণ রয়েছে তবে স্ট্যাকএক্সচেঞ্জের ফর্ম্যাটকে সম্মান জানাতে যদি আমি এগুলিকে বিভিন্ন প্রশ্নে বিভক্ত করি তবে ভাল হবে।

মডিউল প্রয়োজন

স্ট্যান্ডার্ড জাভাস্ক্রিপ্ট কোড আজকাল দেখে মনে হচ্ছে:

const someModule = require('./someModule')

module.exports = function doSomethingWithRequest() {
  // do stuff
  someModule.someFunc()
  // do other stuff
}

সুবিধাদি

  • এনক্যাপসুলেশন: মডিউলটি এককভাবে কাজ করে এবং এর কার্য সম্পাদন করার জন্য প্রয়োজনীয় সমস্ত কিছু জানে।
  • সমকালীন হিসাবে, ক্লায়েন্টদের পক্ষে মডিউলটি ব্যবহার করা সহজ।

অসুবিধেও

  • দুর্বল টেস্টিবিলিটি: ডিআই ব্যবহার না করার সময় এটি স্ট্যান্ডার্ড, তবে গতিশীল ভাষায় যেমন জাভাস্ক্রিপ্টে এটির আকার দেওয়া যেতে পারে * যেমন মডিউল দ্বারা mockeryবা দ্বারা rewire
  • এটি অবশ্যই ডিআইপি লঙ্ঘন করে - নির্ভরতা ইনজেকশন দিয়ে বিভ্রান্ত না হওয়া। - যেহেতু আমি কেবল কংক্রিট মডিউলগুলি আমদানি করতে পারি।
  • এটি সম্ভবত ওসিপি লঙ্ঘন করে - উদাহরণস্বরূপ, কল্পনা করুন যে আমার কাছে একটি লগ মডিউল রয়েছে যা ফাইল সিস্টেমে ( fsমডিউল মাধ্যমে ) লিখবে। যদি আমি এই লগ মডিউলটি নেটওয়ার্কটিতে প্রেরণ করতে প্রসারিত করতে চাই তবে এটি খুব শক্ত হবে।

* এটি কমনজেএস বা এএমডি মডিউলগুলির সাথে কাজ করতে পারে কারণ তারা বেশিরভাগ ব্যবহারকারীর জমিতে প্রয়োগ করা হয়। তবে, আমি নিশ্চিত নই যে ইএস 6 importসিনট্যাক্সের মাধ্যমে এটি কীভাবে সম্ভব হতে পারে ।

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

নির্ভরতা ইনজেকশন ব্যবহার করে, এটি আরও পছন্দ হবে:

module.exports = function doSomethingWithRequest(someModule) {
  // do stuff
  someModule.someFunc()
  // do other stuff
}

সুবিধাদি

  • পরীক্ষামূলকতা বৃদ্ধি: এখন someModuleES6 সিনট্যাক্স ব্যবহার করেও অনড় / উপহাস করা সহজ ।
  • এটা সম্ভব , অগত্যা না যদিও হিসাবে গ্রাহক মডিউল এখনও বাস্তবায়ন ও নয় ইন্টারফেসে প্রোগ্রাম করা যেতে পারে: চোবান সম্মান।

অসুবিধেও

  • ভাঙা এনক্যাপসুলেশন: বাকি মূল প্রশ্নটি হ'ল:

    ঠিক আছে, তাহলে নির্ভরতাগুলি তৈরি / প্রয়োজনীয়তা কে করবে?

  • মডিউলটির প্রতিটি ক্লায়েন্টে এটি করা খুব ওয়েট ওয়েট বলে মনে হচ্ছে ।
  • সত্যিকারের প্রকল্পে সম্ভবপর হওয়ার জন্য সম্ভবত এটির জন্য আমার একটি ডিআই কনটেইনার ব্যবহার করতে হবে।

সুতরাং, এখানে আসল প্রশ্নটি হ'ল:

কেন জাভাস্ক্রিপ্ট বিকাশকারীরা প্রথম পদ্ধতির দিকে ঝুঁকছেন?

এটি কি কেবল "জাভাস্ক্রিপ্টের উপায়"?

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

আমি কিছু অনুপস্থিত করছি?


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

উত্তর:


6

আমি মূলত একজন পিএইচপি প্রোগ্রামার, তবে গত এক বছর ধরে 4 টি জাভাস্ক্রিপ্ট দলের সাথে যোগাযোগ করছি।

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

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

সাধারন পদ্ধতির প্রায়শই এমনকী কোনও নির্মাতাকে প্রকাশ না করা এমনকি কারখানার মোড়ক ব্যবহার করে কোনও অবজেক্টের নির্মাণের বিষয়টি প্রকাশ করা - ঠিক একই কারণে: আপনি যদি কাউকে কোনও বস্তুতে অ্যাক্সেস দেন তবে তারা সরাসরি তা ইনস্ট্যান্ট করতে পারে তারা কিছু পরিবর্তন করার অনুমতি দেওয়া হয়।

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

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