কীভাবে কঠোর টিডিডি এবং ডিডিডি সংযুক্ত করবেন?


15

টিডিডি কোডগুলি ডিজাইনিং সম্পর্কিত, পরীক্ষাগুলি দ্বারা পরিচালিত।
সুতরাং, সাধারণত সাধারণ স্তরগুলি সামনের দিকে নির্মিত হয় না; তারা কিছুটা রিফ্যাক্টরিং পদক্ষেপের মাধ্যমে উপস্থিত হওয়া উচিত।

ডোমেন-চালিত ডিজাইনে অ্যাপ্লিকেশন স্তর, ইনফ্রাস্ট্রাকচার স্তর, ডোমেন স্তর, দৃ Pers়তা স্তর যেমন সুপ্রতিষ্ঠিত স্তরগুলি সংজ্ঞায়িত করে অনেকগুলি প্রযুক্তিগত নিদর্শন জড়িত।

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

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


উত্তর:


12

আপনি টিডিতে ডিজাইনের ভূমিকা সম্পর্কে আঙ্কেল বব এর সাম্প্রতিক মন্তব্যগুলি পর্যালোচনা করেছেন তা নিশ্চিত করুন ।

ডোমেন-চালিত ডিজাইনে অ্যাপ্লিকেশন স্তর, ইনফ্রাস্ট্রাকচার স্তর, ডোমেন স্তর, দৃ Pers়তা স্তর যেমন সুপ্রতিষ্ঠিত স্তরগুলি সংজ্ঞায়িত করে অনেকগুলি প্রযুক্তিগত নিদর্শন জড়িত।

উদি দহন: "Godশ্বর, আমি কীভাবে লেয়ারিংকে ঘৃণা করি।" তিনি তার আলোচনার সিকিউআরএসে এটি নিয়ে আলোচনার জন্য কিছুটা সময় ব্যয় করেন - তবে আলাদা (লেয়ারিংটি 18 ম 30 এর দশকে শুরু হয়)

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

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

অন্যদিকে আপনার সম্ভবত অধ্যবসায় উপাদানটি প্রায়শই পরিবর্তন করার দরকার নেই। শেষ প্রকাশে কাজ করা ডাটাবেস সমাধান সম্ভবত এই প্রকাশের কাজ করবে।

অ্যাপ্লিকেশন উদ্বেগ মাঝখানে কোথাও; তারা স্থিতিশীল হতে থাকে যাতে ব্যবহারকারীদের প্রতিটি রিলিজের সাথে একটি নতুন অ্যাপ্লিকেশন শেখার প্রয়োজন হয় না।

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

এদিকে, সিটিও তার ফোনে চলমান অ্যাপটির একটি সংস্করণ চায়; সিইও কেবলমাত্র একজন লোকের কাছ থেকে শুনেছিল যে একটি এপিআই প্রকাশ করা বড় জিনিস।

এছাড়াও, বিক্রয় দল একটি আলাদা মডেল ব্যবহার করে, তাই আমাদের সাথে একই মডেলটি দিন, একটি ভিন্ন মডেল। ওহ, তবে আমরা অনেক ভ্রমণ করছি, সুতরাং যখন অফলাইনে থাকি এবং পরে সিঙ্ক আপ হয় তখন আমাদের সংস্করণটি কাজ করা দরকার ...

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


11

টেস্ট ড্রাইভেন ডেভলপমেন্ট (টিডিডি) কোনও ডিজাইন নয়। এটি এমন একটি প্রয়োজন যা আপনার নকশাকে প্রভাবিত করে। আপনার যেমন থ্রেড নিরাপদ হওয়া দরকার ছিল, এটি কোনও নকশা নয়। আবার, এটি এমন একটি প্রয়োজন যা আপনার নকশাকে প্রভাবিত করে।

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

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

ডোমেন ড্রাইভড ডিজাইন (ডিডিডি) হ'ল টিডিডি-র লাল সবুজ রঙের চুল্লী চক্রের আগে আপনি যা করেন।

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

একটি ডিডিডি সিস্টেমে এমন একটি আর্কিটেকচার থাকতে পারে:

এখানে চিত্র বর্ণনা লিখুন

এই ডিডিডি আর্কিটেকচারটির অনেকগুলি নাম রয়েছে: ক্লিন , পেঁয়াজ , ষড়ভুজ ইত্যাদি

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

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

এখনও অস্পষ্ট? এ লুক Controler- Use Case Interactor- Presenterনিম্ন ডান দিকের কোণায় অবস্থিত ডায়াগ্রাম। একে অপরের সাথে যোগাযোগ করার জন্য এখানে তিনটি কংক্রিট জিনিস রয়েছে। অবশ্যই এটি ডিডিডি তবে আপনি এখানে কীভাবে টিডিডি যুক্ত করবেন? শুধু কংক্রিটের জিনিসগুলি উপহাস করুন। উপস্থাপক অবশ্যই তথ্য গ্রহণ করা হবে। কোনও PresenterMockশ্রেণি হ'ল এটি যাচাই করার জন্য আপনি যা প্রত্যাশা করেছিলেন তা হ'ল একটি ভাল উপায়। হাতে ও ড্রাইভ যেন তুমি ছিলে এবং আপনার ইউনিট পরীক্ষা একটা চমৎকার উপায় আছে যেহেতু উপহাস আপনাকে বলতে যদি এটা পেয়েছিলাম কি আপনি এটা পাবেন বলে আশা করা হবে।Use Case InteractorPresenterMockUse Case InteractorControllerUse Case Interactor

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

আপনি যদি ড্রাইভ ডিজাইনের জন্য টিডিডি ব্যবহার করেন (কেবলমাত্র ডি এম্বলপমেন্ট নয়) আপনি একটি নকশা পাবেন যা এতে আপনি পরিশ্রমের প্রতিফলন ঘটান। যদি আপনি ঠিক করতে চান। তবে টিডিডি যা বোঝায় তা কখনই হয়নি। এটি যে অভাবের অবসান ঘটায় তা অবশ্যই টিডির দোষ নয়।

টিডিডি ডিজাইন সম্পর্কে নয়। আপনার যদি টিডিডি ব্যবহারের জন্য ডিজাইনের পরিবর্তন করতে হয় তবে আপনার পরীক্ষার চেয়ে বড় সমস্যা রয়েছে।


আমি কখনও বলিনি যে টিডিডি একটি ডিজাইন, তবে এটি নকশা সম্পর্কে
মিক 378

1
চাচা বব আপনাকে ডিজাইনের কথা বলছিলেন। তিনি আপনাকে বলছিলেন না "আরে যদি আপনি পরীক্ষা করেন এমন কাজ করে যারা বাকিদের সম্পর্কে চিন্তা করে"।
candied_orange

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

6
উঘ ... আমি সত্যিই "টেস্ট ড্রাইভড ডিজাইন" মিসনোমোনার দাঁড়াতে পারছি না। আপনি আপনার কীবোর্ডে আনন্দের সাথে দূরে সরে যাওয়া শুরু করার আগে আপনাকে কিছুটা নকশা তৈরি করতে হবে, আপনি পরীক্ষা লিখুন কি না।
রাবারডাক

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

4

টিডিডি আপনার কোডের বিকাশের সমান্তরালে লিখিত সমস্ত প্রয়োজনীয় পরীক্ষার কেস বীমা করেছে। এটি উচ্চ স্তরের নকশা প্রভাবিত করা উচিত নয়। পরিখা কাজের ক্ষেত্রে এটি আরও ভাবেন।

ডিডিডি হ'ল উচ্চ স্তরের ডিজাইন, ডোমেন বিশেষজ্ঞ এবং ইঞ্জিনিয়ারদের মধ্যে ভাষা, প্রসঙ্গের ম্যাপিং ইত্যাদি This এটি অ্যাপ্লিকেশন উচ্চ স্তরের ডিজাইনের ড্রাইভার হওয়া উচিত।

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

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

আমি মনে করি এটি জরুরী হতে পারে: অ্যাপ্লিকেশন যথেষ্ট জটিল হলে আপনার কেবলমাত্র ডিডিডি অনুশীলন করা উচিত।


1
আমি একমত নন, টিডিডি পরীক্ষার বিষয়ে নয়, এটি ডিজাইনিংয়ের বিষয়ে about
মিক 378

চাচা বব বর্ণিত টিডিডির 3 টি নিয়ম থেকে আমি সবকিছুই বেজ করছি।
ম্যাট ওএক্সাকা

জিওএস বইয়ের লেখক স্টিভ ফ্রিম্যান বলেছেন: টিডিডি চক্র শুরু করার আগে আপনার কোনও স্তর বা অবকাঠামো নির্দিষ্ট করা উচিত নয়।
মিক 378

আমি এই বইটির সাথে অপরিচিত, তবে আমার একমত হতে হবে না। আমি চাই না যে টিডিডি আমার ডিআই ও ক্লাস গ্রাফটি তৈরি করবে।
ম্যাট ওএক্সাকা

3
@ মিক ৩7878: টিডিডি টেস্টিংয়ের বিষয়ে নয়, তবে প্রাথমিকভাবে ডিজাইনিং সম্পর্কেও নয় - টিডিডি দ্বারা প্রেরিত একমাত্র ডিজাইনটি ইউনিট-টেস্টিবিলিটির নকশা। ডিজাইনের প্রতিটি অংশ অবশ্যই অন্য কোথাও থেকে আসতে হবে। আমি টিডিডি আরও বাস্তবায়ন কৌশল হিসাবে দেখছি।
ডক ব্রাউন

3

ডিডিডি সফটওয়্যার ডিজাইন সম্পর্কে।
টিডিডি কোড ডিজাইন সম্পর্কে।

ডিডিডিতে, "মডেল" ডোমেনের বিমূর্ততা উপস্থাপন করে, ডোমেন বিশেষজ্ঞের সমস্ত জ্ঞান।

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

কার্যত, একটি ডোমেন চালিত মডেল ডিজাইনের পরে, আমরা পরীক্ষাগুলি কোড করতে পারি।
এই গ্রন্থটি "গ্রোয়িং অবজেক্ট-ওরিয়েন্টড সফটওয়্যার, গাইড দ্বারা পরিচালিত" টেস্টের লিঙ্ক-ফর-কিনে
এই পদক্ষেপটি নিন, একটি হাঁটার কঙ্কাল , ষড়ভুজীয় আর্কিটেকচার এবং টিডিডি সহ।

উত্স থেকে: দ্রুত ডিডিডি - ইনফিউকিউ


1
আমার কাছে সফ্টওয়্যার এবং কোড একই জিনিস
কনরাড

1
এটিও একই রকম হতে পারে। : আমি বলতে চেষ্টা সফ্টওয়্যার একটি "সমাধান", "সিস্টেম", "উচ্চ পর্যায়ে" এবং যেমন কোড একটি "বাস্তবায়ন" হিসাবে, "নিম্ন স্তরের", "বিবরণ"।
জনিলসকল

আমি মনে করি যে গুরুত্বপূর্ণ বিষয়টি হ'ল "প্রথমে আমরা পরীক্ষা করি তবে আমাদের একটি ন্যূনতম কঙ্কাল প্রয়োজন যেখানে আমরা পরীক্ষা শুরু করব"। আপনি কি?
জনিলসকল

1

আমি কি কঠোরভাবে পরীক্ষা থেকে নকশা উত্থাপন করা উচিত

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

অথবা আমি কি সেই খালি স্তরগুলি তৈরি করতে পারি (অ্যাপ্লিকেশন, সত্তা / ডোমেন পরিষেবাগুলি, অবকাঠামো) এবং তাদের প্রতিটিটিতে টিডিডি স্বতন্ত্রভাবে ফিট করি

(অব্যাহত) ... বা আপনার পছন্দের OO ভাষায় শ্রেণি / শ্রেণির শ্রেণিবিন্যাসের কিছু আঞ্চলিক স্তরগুলি এমনকি যদি এটি খুব পরিপক্ক এবং জনপ্রিয় হয় (তবে "সমস্ত" মিলিয়ন মাছি ভুল হতে পারে না ", তাই না?) ।

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

https://pragprog.com/book/swdddf/domain-modeling-made-functional

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

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

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


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