অ্যাপ্লিকেশন স্তর বনাম ডোমেইন স্তর?


46

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

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

উত্তর:


35

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

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

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

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


9
আমি এখানে আপনি যা বলছেন তা সঠিক বলে আমি মনে করি না: "তবে কোনও কিছুতে ইউআই-নির্দিষ্ট মানগুলি (ক্যোয়ারী স্ট্রিংস, পোস্টের ডেটা, সেশন ইত্যাদি) ডোমেন অবজেক্টগুলিতে অনুবাদ করতে হবে This এখানে অ্যাপ্লিকেশন স্তরটি খেলতে আসে"। আপনি যা উল্লেখ করছেন তা হ'ল ডিডিডি'র শর্তে "উপস্থাপনা" স্তর। অ্যাপ্লিকেশন স্তরটি নদীর গভীরতানির্ণয়, একত্রিতকরণ এবং ক্রস কাটিয়া উদ্বেগগুলির সাথে মোকাবিলা করার কথা রয়েছে, এটি ডোমেন স্তরের উপরে কেবল একটি ছোট মোড়ক হিসাবে। আপনি যা বর্ণনা করছেন তা উপস্থাপনা স্তরটির একটি (উপ) স্তরের সাথে সামঞ্জস্য হবে।
18:48

23

এন্টারপ্রাইজ ডিজাইনের মার্টিন ফোলারের নিদর্শনগুলি গ্রহণ করা, সর্বাধিক সাধারণ স্তরগুলি হ'ল:

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

  • ডোমেন - এটি যেখানে আপনার ব্যবসায়ের নিয়ম এবং যুক্তি থাকে, আপনার ডোমেন মডেলগুলি সংজ্ঞায়িত করা হয় ইত্যাদি

  • ডেটা উত্স - এটি হ'ল ডেটা ম্যাপিং স্তর (ওআরএম) এবং ডেটা উত্স (ডাটাবেস, ফাইল সিস্টেম ইত্যাদি)

আপনি তিনটি স্তরের মধ্যে কীভাবে সীমানা আঁকবেন:

  • আপনার মডেল বা ডোমেন অবজেক্টের মধ্যে উপস্থাপনা নির্দিষ্ট যুক্তিকে রাখবেন না

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

  • একটি ORM ব্যবহার করুন যা আপনাকে আপনার ডেটাসোর্স অ্যাক্সেস এবং মডেল থেকে ক্রিয়াগুলি ডিকুয়াল করতে সক্ষম করে

  • পাতলা নিয়ামক - ফ্যাট মডেল দৃষ্টান্ত অনুসরণ করুন, নিয়ন্ত্রণকারীরা কার্যকর না করে কার্যকর করার প্রক্রিয়াটি নিয়ন্ত্রণ করার জন্য http://www.littlehart.net/atthekeyboard/2007/04/27/fat-models-skinny-controllers/ এবং http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat- মডেল মডেল, দেখুন এবং নিয়ামক,


17

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

আবেদন স্তর কাজ সম্পন্ন করা প্রয়োজন সংজ্ঞা একটি নির্দিষ্ট আবেদন টাস্ক সম্পন্ন করার জন্য "সম্পর্কে চিন্তিত" করা হয়। মূলত, এটি প্রয়োজনীয় ডোমেনের কাজের আদেশের জন্য দায়বদ্ধ এবং অন্যান্য (বাহ্যিক বা না) পরিষেবাগুলির সাথে ইন্টারঅ্যাক্ট করে।

জন্য উদাহরণস্বরূপ , আমার আর্থিক সফটওয়্যার অ্যাপ্লিকেশান একটি মডেল সত্তা রাজ্যের পরিবর্তন করার জন্য একটি ব্যবহারকারী অপারেশন আছে (যেমন DDD সংজ্ঞায়িত সত্তা [89]):

  • "অপারেশন প্রধান একটি আর্থিক প্রস্তাব অনুমোদন করতে পারেন"।

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

নোট:

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

6

ডোমেন স্তর একটি বিচ্ছিন্ন স্তর হিসাবে ডিজাইন করা উচিত, যার অর্থ ব্যবসায়ের যুক্তি এবং নিয়মগুলি কোনও কোড (অ্যাপ্লিকেশন স্তর, উপস্থাপনা স্তর এবং অবকাঠামো স্তর) পরিবর্তনগুলির সাথে প্রভাবিত হওয়া উচিত নয়।

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

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


2
যেমন ডোমেন চালিত ডিজাইন (ইভান্স) হিসেবে সাহিত্যে অন্তত, এটা স্বীকার করা হয় যে স্তর একটি আছে একমুখী নির্ভরতা ... আসলে কিছু পয়েন্ট আপনার কোড উপর নির্ভর করে এ হল কিছু । ইউআই প্রয়োগের উপর নির্ভর করে, তবে তদ্বিপরীত নয়। অ্যাপ্লিকেশন ডোমেনের উপর নির্ভর করে, তবে উপ-পদ্য নয়। অবকাঠামো নয়, অবকাঠামোতে ডোমেন।

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

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

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

3

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

এটি আপনাকে কোনও বিঘ্ন ছাড়াই ডোমেনে নিজেই ফোকাস করার অনুমতি দেয় (যেমন ইউআই এবং অধ্যবসায় পরিষেবাগুলির মধ্যে সমন্বয়)।


তারপরে, ডেটা সোর্সটি (একটি ওআরএম) ডোমেনের ভিতরে রয়েছে?
মায়কন

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

আমি রাজী. এবং আমি ডেটাসোর্স এবং ওআরএম সম্পর্কে ভুল ছিল। ধন্যবাদ!
মায়কন

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

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


কখনও না যদিও এইভাবে .... আমি আলোকিত বোধ করি
নিকোস

2

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

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

চূড়ান্ত লক্ষ্য হ'ল আপনার কোডটিকে যথাসম্ভব বজায় রাখা সহজ করা।

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

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


অনুমোদনের যুক্তি স্থাপন সম্পর্কে আমি কৌতূহলী ছিলাম এবং আমি যে বিষয়টি বোঝার চেষ্টা করছি তা থেকে এটি 'অ্যাপ্লিকেশন স্তরের' সাথে খাপ খায়। আপনি কি যুক্তিযুক্ত যে স্তর মধ্যে এটি রাখা ভাল না হতে পারে কিছু অন্তর্দৃষ্টি ভাগ করে নিতে আপত্তি?

1
এটি এই সাইটের জন্য নিখুঁত প্রশ্ন। আপনার এটি পোস্ট করা উচিত, যাতে প্রত্যেকের উত্তর দেওয়ার সুযোগ হয়।
চার্লস ল্যামবার্ট

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