জাভাস্ক্রিপ্ট, নোডজেস এবং অন্যান্য সহ ডিজাইন প্যাটার্নগুলির গুরুত্ব


36

জাভাস্ক্রিপ্ট পরবর্তী কয়েক বছরে ওয়েবে সর্বব্যাপী প্রোগ্রামিং ভাষা হিসাবে উপস্থিত হওয়ার সাথে সাথে প্রতি পাঁচ মিনিটে নতুন ফ্রেমওয়ার্কগুলি পপ আপ হয় এবং ইভেন্ট চালিত প্রোগ্রামিং সার্ভার এবং ক্লায়েন্ট উভয় পক্ষকেই নেতৃত্ব দেয়:

আপনি কি জাভাস্ক্রিপ্ট বিকাশকারী হিসাবে theতিহ্যবাহী নকশার প্যাটার্নগুলিকে অন্যান্য ভাষা / পরিবেশের চেয়ে গুরুত্বপূর্ণ বা কম গুরুত্বপূর্ণ বলে বিবেচনা করছেন?

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


5
কিছু লোক যুক্তি দেয় যে নকশার ধরণগুলি (বিশেষতঃ জিওএফগুলি) ভাষার অভাবের লক্ষণ ( এই আলোচনাটি দেখুন )। যেহেতু জাভাস্ক্রিপ্ট প্রোটোটাইপাল এবং প্রকৃতির কার্যকরী তাই আমি বলব যে অন্য একটি নিদর্শন প্রযোজ্য / দরকারী।

প্রতিক্রিয়াগুলিতে খুব আগ্রহী ... প্রশ্নের জন্য +1 :)
usoban

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

জাভাস্ক্রিপ্টের নিজস্ব নিদর্শন রয়েছে। ইগর দ্বারা বর্ণিত বইয়ের পাশাপাশি অ্যাডি ওসমানীর লার্নিং জাভাস্ক্রিপ্ট ডিজাইন প্যাটার্নসও বিনামূল্যে রয়েছে।
ব্যবহারকারী16764

উত্তর:


23

আপনি কি জাভাস্ক্রিপ্ট বিকাশকারী হিসাবে theতিহ্যবাহী নকশার প্যাটার্নগুলিকে অন্যান্য ভাষা / পরিবেশের চেয়ে গুরুত্বপূর্ণ বা কম গুরুত্বপূর্ণ বলে বিবেচনা করছেন?

ক্লাসিকাল ডিজাইনের ধরণগুলি জাভাস্ক্রিপ্টে প্রযোজ্য নয়।

কী প্রয়োগ হয় তা হল মডিউল এবং ফাংশনাল কোড লেখা writing

আপনার কনস্ট্রাক্টর এবং প্রথম শ্রেণির ফাংশনগুলির মিশ্রণটি ব্যবহার করা উচিত।

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

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

আবার ডিজাইনের ধরণগুলি সত্যই এটি প্রয়োগ করে না তবে নীচে তিনটি গুরুত্বপূর্ণ নির্মাণ রয়েছে।

  1. ক্লোজার ব্যবহার
  2. প্রথম শ্রেণির কার্যাদি ব্যবহার
  3. বা তার সাথে অবজেক্ট কারখানার ব্যবহার new

দয়া করে এমন এক প্রকার প্রসঙ্গ ছেড়ে যান যার জন্য আমি একই ধরণের কোডের তুলনায় designতিহ্যবাহী ডিজাইনের নিদর্শনগুলি ব্যবহার করার তুলনায় এই ধরণের কৌশলগুলির উদাহরণ দেখাতে পারি।

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

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

ইন node.jsএই সহজভাবে হয় events.EventEmitter। ইন jQueryএই হল $.fn.bind&& $.fn.trigger। ইন backboneএই হল Backbone.Events.triggerএবং Backbone.Events.bind। এটি প্রতিদিনের কোডে ব্যবহৃত একটি খুব সাধারণ প্যাটার্ন।

আমি কখনই থামি এবং ভাবি না "আরে আমি এখানে পর্যবেক্ষক প্যাটার্নটি ব্যবহার করছি!"। না এটি কেবলমাত্র নিম্ন স্তরের বার্তা পাঠানোর উপায় বা ক্যাসকেড পরিবর্তনের উপায় নয় a

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

ইন WebSocketprototcol আমরা আছে .onযা আমরা জুড়তে ব্যবহার on("message", ...ইভেন্ট নেই। আবার এটি খুব সাধারণ তবে এটি আপনার ধ্রুপদী ওওপি ভিত্তিক কোনও স্ট্রিমের পর্যবেক্ষক while (byte b = Stream.ReadNextByte())

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

মেমেন্টো প্যাটার্ন:

এটি কেবল জেএসএন। এটি আপনাকে কোনও অবজেক্টের অবস্থা সিরিয়ালাইজ করতে দেয় যাতে আপনি কোনও ক্রিয়া পূর্বাবস্থায় ফিরিয়ে নিতে পারেন।

function SomeObject() {
    var internalState;

    this.toJSON = function() {
        return internalState;
    }

    this.set = function(data) {
        internalState = data;
    }

    this.restore = function(json) {
        internalState = JSON.parse(json);
    }
}

var o = new SomeObject();
o.set("foo"); // foo
var memento = JSON.stringify(o);
o.set("bar"); // bar
o.restore(memento);

জাভাস্ক্রিপ্টে আমরা স্থানীয়ভাবে স্মৃতিসৌধের জন্য একটি এপিআই সমর্থন করি। যে toJSONকোনও অবজেক্টে ডাকা একটি পদ্ধতি কেবল সংজ্ঞায়িত করুন। আপনি যখন ফোন JSON.stringifyকরবেন তখন অভ্যন্তরীণভাবে .toJSONআপনি JSON- এ সিরিয়ালায়িত করতে চান এমন আসল তথ্য পাওয়ার জন্য আপনার অবজেক্টটিতে কল করবে ।

এটি আপনাকে তুচ্ছভাবে আপনার কোডের স্ন্যাপশট তৈরি করতে দেয়।

আবার আমি এটিকে স্মরণীয় প্যাটার্ন বুঝতে পারি না। এটি কেবল সিরিয়ালাইজেশন সরঞ্জামটি ব্যবহার করছে যা জেএসএন।

রাজ্য প্যাটার্ন / কৌশল প্যাটার্ন:

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


রায়নস, সুন্দর উত্তর। উদাহরণ হিসাবে, আমি ধারণাগত স্তর থেকে আরও চিন্তা ছিল। উদাহরণস্বরূপ: "একটি পর্যবেক্ষক নিদর্শন পরিস্থিতিটিতে সহায়তা করেছিল ..."

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

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

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

আপনি প্রোটোটাইপ প্যাটার্ন সম্পর্কে ভুলে গেছেন - ওরফে বোকা জাভাস্ক্রিপ্টের এমনকি সাধারণ
ওওপ নেই

10

বিষয়টির মতামত হিসাবে এই উত্তর নিন।

আপনি কি জাভাস্ক্রিপ্ট বিকাশকারী হিসাবে theতিহ্যবাহী ডিজাইনের প্যাটার্নগুলিকে অন্যান্য ভাষা / পরিবেশের সাথে গুরুত্বপূর্ণ বলে মনে করেন বা কম গুরুত্বপূর্ণ বলে মনে করেন?

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

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

সাধারণভাবে আমি বলব যে traditionalতিহ্যবাহী ডিজাইনের ধরণগুলি অন্য ভাষাগুলির মতোই গুরুত্বপূর্ণ তবে জাভাস্ক্রিপ্টের নির্দিষ্ট নিদর্শনগুলি traditionalতিহ্যবাহীগুলির চেয়ে বেশি গুরুত্বপূর্ণ।

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

মধ্যে আবশ্যিক জাভাস্ক্রিপ্ট নকশা নিদর্শন আমি বেশিরভাগ এই ব্যবহার করুন:

1. কনস্ট্রাক্টর প্যাটার্ন (প্রোটোটাইপ সহ)

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

2. মডিউল প্যাটার্ন প্রকাশ

এনক্যাপসুলেশন সহ মডুলারিটি অফার করে।

3. DRY প্যাটার্ন

এটি বরং দৃশ্যাবলী নির্দিষ্ট, যদিও প্রতিটি বিকাশকারীকে এটি যথাসম্ভব (im) ব্যবহার করা উচিত।


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

2

সিএসের জন্য ডিজাইনের ক্লাসে নকশার নিদর্শনগুলি শেখানো হয়। এগুলি অত্যাবশ্যক নয়, তবে আপনি যদি সাদৃশ্যপূর্ণ পরিস্থিতিগুলি সন্ধান করতে পারেন তবে সমাধানের জন্য সত্যই সহায়ক।

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

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

নিদর্শনগুলি সম্পর্কে দুর্দান্ত লক্ষণীয় কিছুই নেই, সর্বোত্তম জিনিসটি হ'ল তারা এমন ধারণা যা বারবার উপযোগী এমন উপায়ে সংজ্ঞাযুক্ত এবং সংজ্ঞায়িত।


1

আপনি কি জাভাস্ক্রিপ্ট বিকাশকারী হিসাবে প্রচলিত ডিজাইনের প্যাটার্নগুলি গুরুত্বপূর্ণ বা কম গুরুত্বপূর্ণ হিসাবে বিবেচনা করছেন

তারা প্রাণবন্ত।

এটি কারণ পুনরায় ব্যবহারযোগ্য সমাধানগুলির ধারণাগুলি ভাষাকে অতিক্রম করতে পারে। - সিনট্যাক্স পরিবর্তন - বাস্তবায়ন পরিবর্তন - প্যাটার্নের জন্য ধারণাটি এখনও বিদ্যমান।

যে কোনও ভাষা থেকে বিকাশকারীরা বিন্যাস না করে, নিদর্শনগুলি শিখতে উন্নত জেএস শিখতে পারেন। যারা এটি জানেন না তারা মিস করছেন।

জাভাস্ক্রিপ্ট বিকাশকারী নিয়মিত ব্যবহার হিসাবে আপনার শীর্ষ তিনটি নকশার নিদর্শনগুলির নাম দিন

এমন নিদর্শন রয়েছে যা ঘন ঘন ব্যবহৃত হয় যার বিরুদ্ধে কেউ কেউ "তর্ক" করে। তবে তারা জেনে ভাল কারণ তারা অত্যন্ত সাধারণ এবং উন্নত জেএসে শক্তিশালী।

1- নেমস্পেস - কোনও কোডে আপনার কোডটি মোড়ানো।

var x = (ফাংশন () {}) ();

2- অবজেক্ট কনফিগারেশন, কারখানার মতো প্যাটার্ন। -কোনও ফাংশনে কোনও বস্তু পাস করুন, একগুচ্ছ ভার্স নয়।

var product = কারখানা ({});

3- কলব্যাক ফাংশন। - টাস্ক সম্পূর্ণ হওয়ার পরে কল করার জন্য প্যারামিটার হিসাবে কোনও ফাংশন পাস করুন।

ফাংশন লং টাস্ক (ফাংশন () {// হয়ে গেলে আমাকে কল করুন});

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

দুর্দান্ত প্রশ্ন।

আশা করি এইটি কাজ করবে.

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