বিশেষত নির্ভরতা ইনজেকশনটির জন্য ডিজাইন করা কোনও প্রোগ্রামিং ভাষা রয়েছে কি?


21

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

এমন কোনও ভাষা কি রয়েছে যা বিশেষত নির্ভরতা ইনজেকশনটিকে সহজতর করার জন্য এবং বিপরীতভাবে লুকানো নির্ভরতা তৈরি করা শক্ত করে তোলে?

ব্যাখ্যা:

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

আমি কোনও ভাষার প্রস্তাবনা খুঁজছি না। এটি একটি .তিহাসিক প্রশ্ন। কোনও ভাষা লেখক কি স্পষ্টভাবে এটি করার জন্য সেট করেছেন?


1
পুরোপুরিভাবে সম্পর্কিত, যদি সরাসরি ডুপ্লিকেট না হয়: নির্ভরতা ইঞ্জেকশনটি কীভাবে ভাষায় সংহত করা যায়?
রবার্ট হার্ভে

লীগ এখন কোন! 3K! এই প্রশ্নটি বন্ধ করতে আমি এখন তাদের ভোট দেখতে পারি। :) ভোটের জন্য ধন্যবাদ।
candied_orange

1
আপনার সেই পোস্টটি যাইহোক পড়া উচিত। "এটি কি আছে" এটি একটি খুব কম আকর্ষণীয় প্রশ্ন, যদি না আপনি এটিকে "তারা কীভাবে এটি করেন?"
রবার্ট হার্ভে

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

1
@ ওয়াসাতজ: হ্যাঁ, হাস্কেল গণনা করেছেন। বেশিরভাগ "সফ্টওয়্যার নিদর্শন" প্রোগ্রামিং ভাষায় কমতিগুলির জন্য সত্যিই কেবলমাত্র কর্মক্ষেত্র।
রবার্ট হার্ভে

উত্তর:


21

হ্যাঁ, সত্যিই আছে। প্রকার, রকম.

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

সুতরাং, ভাষাটি ডিআই-এর জন্য ডিজাইন করা হয়নি, বরং ডিআইয়ের প্রয়োজনীয়তা ভাষা নকশার ফলাফল।

যদি কোনও স্থিতিশীল রাষ্ট্র না থাকে এবং কোনও বৈশ্বিক রাষ্ট্র না থাকে, তবে আপনি কেবল ইথারে "পৌঁছাতে" এবং কোনও জিনিস টেনে আনতে পারবেন না। উদাহরণস্বরূপ, জাভাতে, প্যাকেজ কাঠামো স্থিতিশীল অবস্থা। আমি কেবল বলতে পারি java.lang.Stringএবং আমার নিজের Stringক্লাস আছে। সংবাদপত্রে তা সম্ভব নয়। আপনার সাথে কাজ করা সমস্ত কিছু আপনাকে স্পষ্টভাবে সরবরাহ করতে হবে, অন্যথায় আপনি এটি পেতে পারেন না। সুতরাং, সমস্ত কিছু নির্ভরতা এবং প্রতিটি নির্ভরতা সুস্পষ্ট।

আপনি একটি স্ট্রিং চান? ঠিক আছে, আপনাকে প্রথমে stdlibআপনাকে Stringক্লাসটি হস্তান্তর করতে অবজেক্টটি জিজ্ঞাসা করতে হবে । ওহ, তবে আপনি কীভাবে অ্যাক্সেস পাবেন stdlib? ঠিক আছে, আপনাকে প্রথমে platformআপনাকে stdlibঅবজেক্টটি হস্তান্তর করতে বলতে হবে । ওহ, তবে আপনি কীভাবে অ্যাক্সেস পাবেন platform? ঠিক আছে, আপনাকে প্রথমে অন্য কাউকে platformঅবজেক্টটি হস্তান্তর করতে বলতে হবে । ওহ, তবে কীভাবে আপনি এই ব্যক্তির ইজারা পেয়েছেন? ঠিক আছে, আপনাকে প্রথমে অন্য কাউকে জিজ্ঞাসা করতে হবে অবজেক্টটি হস্তান্তর করার জন্য।

খরগোশের গর্তটি কতটা নিচে যায়? পুনরাবৃত্তি কোথায় থামবে? আসলে পুরোপুরি। এটা থামছে না। তারপরে, আপনি কীভাবে নিউজসিয়কে একটি প্রোগ্রাম লিখতে পারেন? ভাল, কঠোরভাবে বলতে, আপনি পারবেন না!

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

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

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

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

class Foo extends Bar // using Java syntax for familiarity

বা, নিউজএইকে:

class Foo = Bar () () : ()

জাভাতে, Fooএটি স্ট্যাটিক গ্লোবাল নেমস্পেসে একটি নাম তৈরি করবে এবং স্ট্যাটিক গ্লোবাল নেমস্পেসে সন্ধান করবে Barএবং Bar Fooএর সুপারক্লাস তৈরি করবে। এমনকি রুবিতেও, যা অনেক বেশি গতিশীল, এটি এখনও বিশ্বব্যাপী নেমস্পেসে একটি স্থির ধ্রুবক তৈরি করবে।

নিউজপিয়াক-এ, সমতুল্য ঘোষণার অর্থ: নামকরণের জন্য একটি গেটর পদ্ধতি তৈরি করুন Fooএবং নামকরণ পদ্ধতিতে কল করে এটি একটি ক্লাস ফিরিয়ে আনুন যা তার সুপারক্লাসটি দেখায় Bar। দ্রষ্টব্য: এটি রুবির মতো নয়, যেখানে আপনি কোনও এক্সিকিউটেবল রুবি কোডকে সুপার ক্লাসের ঘোষণা হিসাবে রাখতে পারেন তবে ক্লাসটি তৈরি হওয়ার পরে কোডটি একবার কার্যকর করা হবে এবং সেই কোডটির ফেরতের মান স্থির সুপারক্লাস হয়ে যাবে। না। পদ্ধতিটি প্রতিটি একক পদ্ধতি দেখার Barজন্য বলা হয় !

এর কিছু গভীর প্রভাব রয়েছে:

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

    class Outer {
      class Inner { /* … */ }
    }
    
    class Sub extends Outer {
      override class Inner { /* … */ }
    }
    

    Newspeak:

    class Outer = () (
      class Inner = () () : ()
    ) : ()
    
    class Sub = Outer () (
      class Inner = () () : ()
    ) : ()
    
  • যেহেতু সুপারক্লাসটি কেবল একটি ক্লাসকে ফেরত দেয় এমন একটি কল কল, আপনি বাইরের শ্রেণীর একটি সাবক্লাসে সেই পদ্ধতিটি ওভাররাইড করতে পারেন, সুপারক্লাসে সংজ্ঞায়িত অভ্যন্তরীণ ক্লাসগুলির সাবক্লাসে একটি আলাদা সুপারক্লাস থাকতে পারে। আপনি ক্লাস শ্রেণিবদ্ধ উত্তরাধিকার বিনামূল্যে পান:

    class Outer {
      class MyCoolArray extends Array { /* … */ }
    }
    
    class Sub extends Outer {
      override class Array { /* … */ }
      // Now, for instances of `Sub`, `MyCoolArray` has a different superclass 
      // than for instances of `Outer`!!!
    }
    

    Newspeak:

    class Outer = () (
      class MyCoolArray = Array () () : ()
    ) : ()
    
    class Sub = Outer () (
      class Array = () () : ()
    ) : ()
    
  • এবং সর্বশেষে, এই আলোচনার জন্য সবচেয়ে গুরুত্বপূর্ণ: যেহেতু (আপনি আপনার ক্লাসে সংজ্ঞায়িত এগুলি বাদ দিয়ে স্পষ্টতই) আপনি কেবলমাত্র আপনার লেক্সিক্যালি এনক্লোজিং ক্লাস (এসএস) এবং আপনার সুপারক্লাস (এস), একটি শীর্ষ স্তরের বহিরাগত শ্রেণীর পদ্ধতিতে কল করতে পারেন কোনো পদ্ধতি কল করতে পারবেন না এ সব বেশী যে স্পষ্টভাবে ইনজেকশনের হয় ব্যতীত কারণ সুপারক্লাস ঘোষণা একটি একটি টপ লেভেল বর্গ একটি এনক্লোজিং ক্লাস যার পদ্ধতি সেটিতে কল পারে না, এবং এটি ডিফল্ট এক ছাড়া অন্য কোনো সুপারক্লাস থাকতে পারে না, পদ্ধতি কল, এবং এটি স্পষ্টত না সুপারক্লাস ফিরে যেতে পারেন (এটা হলসুপারক্লাস) এবং এটি লেক্সিক্যালি এনক্লোজিং ক্লাসেও যেতে পারে না, কারণ কোনও কিছুই নেই। এর অর্থ কী শীর্ষ স্তরের ক্লাসগুলি সম্পূর্ণরূপে এনক্যাপসুলেটেড, তারা কেবল স্পষ্টভাবে ইনজেকশনের মাধ্যমে তা অ্যাক্সেস করতে পারে এবং তারা কেবল স্পষ্টভাবে যা বলে তা ইনজেকশন দেয়। অন্য কথায়: শীর্ষ স্তরের ক্লাসগুলি মডিউল। আপনি বিনামূল্যে একটি সম্পূর্ণ মডিউল সিস্টেম পান। আসলে, আরও সুনির্দিষ্টভাবে বলতে গেলে: শীর্ষ স্তরের ক্লাসগুলি মডিউল ঘোষণা, এর উদাহরণগুলি মডিউল। সুতরাং, আপনি নিখরচায় প্যারাম্যাট্রিক মডিউল ঘোষণা এবং প্রথম শ্রেণির মডিউল সহ একটি মডিউল সিস্টেম পাবেন যা এমন কি, যা এমনকি খুব পরিশীলিত, মডিউল সিস্টেমগুলি করতে পারে না।

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

class Foo(platform) extends Bar {
  Array  = platform.collections.Array
  String = platform.lang.String
  File   = platform.io.File
| // separator between class constructor and class body
  class MyArray extends Array { /* … */ }
  // Array refers to the method defined above which in turn gets it from the 
  // platform object that was passed into the class "somehow"
}

Newspeak:

class Foo using: platform = Bar (
  Array = platform collections Array
  String = platform streams String 
  File = platform files ExternalReadWriteStream
) (
  class MyArray = Array () () : ()
) : ()

নোট করুন যে কোনও নিউজপ্যাক প্রোগ্রামার আসলে ক্লাস (এস) দেখতে যাচ্ছেন তা এই রকম:একাধিক নেস্টেড ক্লাস প্রদর্শন করা নিউজপ্যাক আইডিই

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

তবে সত্যিই, আপনি এটি সঙ্গে প্রায় খেলতে হবে। এটি সমস্ত মূলধারার এবং এমনকি সর্বাধিক মূল-মূলধারার ভাষা থেকে এতটাই আলাদা যে এটি ব্যাখ্যা করা শক্ত, এটি অভিজ্ঞতা অর্জন করতে হবে experienced


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

কৌতূহলী, আমার হাতে তৈরি অনেকগুলি ইনজেকশন ধারক স্থির কারখানা। এটি আগে খারাপ জিনিস হিসাবে ভাবেনি।
candied_orange

@ জর্গ কোনওভাবেই আপনি এই উত্তরটিকে আরও কিছুটা ব্যাক আপ করতে পারেন? আমি "নিউজএইক্ল্যাংআরওয়েজিওআরএইজি নির্ভরতা ইনজেকশন" গুগল করে খালি এসেছি। সবচেয়ে কাছের জিনিসটি আমি এটির সন্ধান করতে পেরেছিলাম
item?

@ ক্যান্ডিওড অ্যারেঞ্জ: আমি উত্তরটি প্রসারিত করার প্রক্রিয়াতে ছিলাম কিন্তু তখন "বাস্তব বিশ্বের" হস্তক্ষেপ করেছিল। এটা কি ভালো?
জার্গ ডব্লু মিতাগ

3
@ জর্জিডব্লিউমিতাগ পবিত্র পবিত্র বাজে! আচ্ছা এটি অবশ্যই "আরও"। আমি "আরও ভাল" মূল্যায়ন করার সময় থাকব। এটির জন্য বাথরুম সফরের শক্তি প্রয়োজন।
candied_orange

7

ওয়েক প্রোগ্রামিং ভাষা নির্ভরতা ইনজেকশন ব্যবহার করার জন্য ডিজাইন করা হয়েছে। মূলত, এটি একটি নির্ভরতা ইনজেকশন কাঠামোর সমান ভাষাতেই তৈরি হয়েছে। ক্লাসগুলি তাদের needএবং পরামিতিগুলির সংজ্ঞা দেয় provideএবং সংকলক সবকিছু হুক আপ করে।


6

এটি ব্যবহারিকভাবে কার্যকর ভাষা নয়, তবে এই কাগজে বর্ণিত সিস্টেম an প্রতিটি বিমূর্ত শ্রেণি আপনি ইনস্ট্যান্টেশন পর্যায়ে ব্যবহার করেছেন। এটি করা কমপক্ষে সাধারণ ক্ষেত্রে নির্ভরতা ইনজেকশনের প্রয়োজনীয়তা সরিয়ে দেয়, উদাহরণস্বরূপ (এই বৈশিষ্ট্যের সাথে জাভাটির একটি অনুমান সংস্করণ ব্যবহার করে) আমরা এই কোডটি নিতে পারি:

public interface I {
    void something ();
)

public class Concrete implements I {
    public void something () { ... }
}

public class Client {
    I myI;
    public Client (I injected) { myI = injected; }
    ...
}

...

    Client c = new Client (new Concrete());
    ...

এবং ক্লায়েন্ট এবং এর ব্যবহারগুলি এর সাথে প্রতিস্থাপন করুন:

public class Client {
   I myI = new I();
   ...
}

   Client c = new Client { I -> Concrete } ();

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


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

0

আমি এটি ব্যবহার করি নি, তবে প্লাস্টিক প্রোগ্রামিং ভাষার আনুষ্ঠানিক ট্যাগলাইনটি হ'ল " যদি আপনি নির্ভরতার ইনজেকশন নেন এবং এটি প্রোগ্রামিং ভাষায় বেক করেন তবে কী হবে? " এটি বেশ আকর্ষণীয় বলে মনে হচ্ছে

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