ভাষা গঠনে নকশার নিদর্শনগুলি কেন যুক্ত করা হয় না?


11

সম্প্রতি আমি একজন সহকর্মীর সাথে কথা বলছিলাম যিনি উল্লেখ করেছিলেন যে তাঁর সংস্থা পিএইচপি এক্সটেনশান হিসাবে এমভিসি ডিজাইন প্যাটার্ন যুক্ত করার বিষয়ে কাজ করছে।

তিনি ব্যাখ্যা করেছিলেন যে তারা Controllers, Models and Viewsপারফরম্যান্স বাড়াতে ভাষার গঠনগুলিতে যুক্ত করার জন্য সি কোড লিখেছিলেন ।

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

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

সুতরাং, সর্বাধিক ব্যবহৃত ডিজাইন নিদর্শনগুলি (এমভিসি, কারখানা, কৌশল, ... ইত্যাদি) ভাষা নির্মাণে কেন যুক্ত হয় না?

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

সম্পাদনা:

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


19
এমন একটি চিন্তা-চেতনা রয়েছে যা বলে যে অনেকগুলি নিদর্শন থাকা একটি ভাষার গন্ধ। নিশ্চিতভাবেই জিও 4 বইয়ের অনেকগুলি নিদর্শন অদৃশ্য হয়ে যায় বা লিস্পে 1 লাইনারে পরিণত হয়।
জাচারি কে

5
"বিল্ডিং কারখানাগুলি কোনও প্রকল্পে 100% গ্যারান্টিযুক্ত" " তারপরে আপনি খারাপ প্রকল্পে কাজ করেছেন। কারখানাটি ব্যবহারযোগ্য ধাঁচের হলেও এটির নিশ্চয়তা দেওয়া তো দূরের কথা। যে কোনও ওওপিতে কারখানার প্যাটার্ন রয়েছে। একে কনস্ট্রাক্টর বলে।
ইউফোরিক

9
আমি সাধারণভাবে পুরো ওও জিনিস সম্পর্কে যথেষ্ট সন্দেহবাদী। পুনরায় ব্যবহারযোগ্যতার প্রচার করার ধারণা থাকতে পারে, হ্যাঁ, তবে এটি কার্যকরভাবে কাজ করে না। এবং একবার আপনি কয়েকটি শক্তিশালী সরঞ্জাম উপলব্ধ হয়ে উঠলেন, যেমন রূপক, উচ্চতর ক্রম ফাংশন, শক্তিশালী টাইপ সিস্টেম, মডিউল ইত্যাদি you'll এটি করতে চাই না, কারণ এই সমস্তগুলির সাথে আপনার আর কোনও ওও দরকার হবে না।
এসকে-যুক্তি

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

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

উত্তর:


20

নকশা নিদর্শন হয় ভাষা নির্মান সব সময় এখনো যোগ করেনি। সাবরুটাইন কল ডিজাইন প্যাটার্নটি কখনও শুনেছেন ? কোন? আমিও না. কারণ ১৯৫০ এর দশকের গোড়ার দিকে ডিজাইনের প্যাটার্ন ছিল সাবরুটাইন কলগুলি তাত্ক্ষণিকভাবে ভাষাগুলিতে যুক্ত হয়েছিল। আজকাল, তারা সিপিইউগুলির মেশিন কোড নির্দেশিকাঠে উপস্থিত রয়েছে sets

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


প্রকৃতপক্ষে, সাব্রুটিন কলগুলির জন্য বিভিন্ন নকশার ধরণগুলি সাধারণ ছিল (এসেম্বলার এবং মেশিন কোডে, কমপক্ষে) 50 এর দশকের শেষের দিকে, 60 এর দশকের গোড়ার দিকেও এবং প্রদর্শিত হয়েছিল M6800 (8-বিট এক)। জন্য অনুসন্ধান করুন Wheeler jumpবা Modified Wheeler jump
ভ্যাটাইন

TI-83 Plusবেসিক ভাষায় এ জাতীয় নির্মাণের অনুপস্থিতি 2001 সালের কাছাকাছি প্রোগ্রামটি শিখতে শিখতে গিয়ে আবার একই ধরণের দিকে ফিরে
এসেছিল

12

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

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

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

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


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

7

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

তবে এই প্রশ্নের উপর দৃষ্টি নিবদ্ধ করার জন্য - আপনি কোনও ভাষায় খুব বেশি ডিজাইনের ধরণ যুক্ত করতে চান না এমন অনেকগুলি কারণ রয়েছে:

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

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


4

সর্বাধিক ব্যবহৃত ডিজাইনের ধরণগুলি (এমভিসি, কারখানা, কৌশল, ইত্যাদি) কেন ভাষা সংস্থাগুলিতে যুক্ত করা হয় না?

এই ধরণের বেশিরভাগ সুনির্দিষ্ট ভাষাগত সহায়তা ব্যতীত বেশিরভাগ প্রোগ্রামিং ভাষায় প্রয়োগ করা যেতে পারে। জাভাতে উদাহরণস্বরূপ এমভিসি নিন:

  • আপনি এটি সরাসরি কোড করতে পারেন।
  • আপনি একটি অ্যাপ্লিকেশন জেনারেটর ব্যবহার করে এটি বাস্তবায়ন করতে পারেন ... এবং একই সাথে অন্যান্য অনেক বয়লারপ্লেটের পুরো যত্ন নিতে পারেন।
  • আপনি "ফ্রেমওয়ার্ক" লাইব্রেরি ক্লাস ব্যবহার করে এটি প্রয়োগ করতে পারেন।
  • আপনি এনেটেশন এবং স্ট্যাটিক বা রানটাইম টীকা প্রক্রিয়াকরণ ব্যবহার করে এটি প্রয়োগ করতে পারেন।

এই সমস্ত অপশন দেওয়া, সরাসরি ভাষা প্রসারিত খুব কম মূল্য আছে। এবং এখানে অনেকগুলি "ডাউনসাইড" রয়েছে:

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

4

তারা হয়।

ফাংশনগুলি সি-তে একটি ভাষা নির্মাণের আগে অ্যাসেম্বলি কোডে নকশার প্যাটার্ন ছিল

ভার্চুয়াল ফাংশনগুলি সি ++ এ ল্যাঙ্গিয়েজ কনস্ট্রাক্ট হওয়ার আগে সিটিতে একটি নকশার প্যাটার্ন ছিল।

তবে, একটি বাণিজ্য বন্ধ আছে। যদি প্যাটার্নটিতে বয়লারপ্লেট কোডের উত্পাদন (এমনকি কিছু কীওয়ার্ড) জড়িত থাকে, তবে এটি একটি দরকারী ভাষা বৈশিষ্ট্য। তবে প্যাটার্নটি যদি সহজ এবং স্পষ্ট হয়, যেমন। সি এর "জন্য (আইটি আই = 0; আই <10; আই ++)", এটি এখনও একইভাবে লেখার জন্য দরকারী তবে এটি "আই = 0 থেকে 10" এর চেয়ে উল্লেখযোগ্যভাবে দীর্ঘ নয় এবং এর উল্লেখযোগ্য সুবিধা রয়েছে এটির কিছুটা আলাদা লুপ তৈরি করতে কীভাবে এটি পরিবর্তন করা যায় তা স্পষ্ট


3

'গ্যাং অফ ফোর' বইটি পড়ুন এবং এটি পরিষ্কার হয়ে যাবে:

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

2

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

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


0

হ্যাঁ, বাসি প্রশ্ন তবে গ্রহণযোগ্য একটি সহ শব্দার্থ ডায়ালগুলিতে আপনি কোথায় "ডিজাইন প্যাটার্নস" সেট করেছেন তার উপর নির্ভর করে আমি প্রচুর উত্তরের সাথে একমত নই।

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

অন্যদিকে আইট্রেটার একটি অত্যন্ত সাধারণ ধারণা যা বিভিন্ন ধরণের নির্মাণে বিভিন্ন ধরণের ক্ষেত্রে প্রয়োগ করা যেতে পারে।

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

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