কোন ফাইল / পরিসীমা একটি কোড ফাইল খুব বড়?


36

আমি প্রচুর 2-3 কে লাইন ফাইল সন্ধান করছি এবং এগুলি এত বড় হওয়া উচিত বলে মনে হয় না।

উত্সরূপে উত্স কোড ফাইলটিকে "খুব বড়" বলার জন্য একটি ভাল মাপদণ্ড কী?? উত্স কোড ফাইলের সর্বাধিক পরিমাণ লাইনের মতো কোনও বিষয় আছে কি?


কোডটি পর্যালোচনা করার পরে আপনার পিয়ার আপনাকে জানায়। "আপনি নিজেরাই এটি নির্ধারণ করতে পারবেন না কারণ কোডটি লেখার চেয়ে লেখক হিসাবে আপনি বেশি জানেন know একটি কম্পিউটার আপনাকে একই কারণের জন্য বলতে পারে না যে এটি চিত্রাঙ্কন শিল্প কিনা না তা বলতে পারে না Hence সুতরাং আপনার প্রয়োজন অন্য একজন মানুষের - সক্ষম সফ্টওয়্যারটি বজায় রাখার - আপনি যা লিখেছেন তা দেখার জন্য এবং তার মতামত জানাতে ... "
gnat

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

2
যতটা সম্ভব বিভক্ত করুন, তবে ফাইলগুলির অখণ্ডতা ভঙ্গ না করে। প্রতিটি ফাইল (বা শিরোলেখের উত্স / উত্স ফাইল) সর্বদা একটি বৃত্তাকার সম্পূর্ণ হওয়া উচিত, অন্য ফাইলগুলির অভ্যন্তরীণ বাস্তবায়ন থেকে পৃথক। এর অর্থ যদি কিছু ফাইল বৃহত হয় কারণ তারা জটিল কিছু বাস্তবায়িত করে, তাই এটি হোন।
আম্বروز বিজ্জাক

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

"এটি কি সোর্স কোড?" "না, এটাই মেকফাইল, সোর্স কোডটি ট্রাকের পিছনে রয়েছে"।
ম্যাকেনজম

উত্তর:


26

আদর্শ মডেল হিসাবে আমি নিম্নলিখিত মানদণ্ডগুলি ব্যবহার করি (মার্টিন বেকেটের পরামর্শ অনুসারে অনুরূপ যুক্তি সহ, অর্থাতাতাত্ত্বিক কাঠামোর দিক দিয়ে চিন্তা করার জন্য এবং কোডের রেখার ক্ষেত্রে নয়):

বিধি 1

প্রতি ফাইলের জন্য একটি শ্রেণি (সি ++ এ: একটি শ্রেণি -> একটি শিরোনাম এবং একটি বাস্তবায়ন ফাইল)।

বিধি 2

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

বিধি 3

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

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

এই খুব রুক্ষ অনুমান একত্র করা:

  • উত্স ফাইল প্রতি সর্বাধিক এক শ্রেণি।
  • প্রতি ক্লাসে সর্বাধিক 10 জন পাবলিক পদ্ধতি।
  • প্রতি ক্লাসে সর্বাধিক 10 বেসরকারী পদ্ধতি।
  • পদ্ধতিতে সর্বাধিক 100 লাইন।

সুতরাং একটি উত্স ফাইল যা ২০০০ লাইনের বেশি রয়েছে সম্ভবত এটি খুব বড় এবং খুব অগোছালো হতে শুরু করে।

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

যাইহোক, আমার অভিজ্ঞতায় কোনও ফাইল অপঠনযোগ্য হতে শুরু করে যখন উপরের প্যারামিটারগুলির মধ্যে একটির সম্মান না করা হয় (উদাহরণস্বরূপ 300 লাইন পদ্ধতির বডি যা ছয়টি পর্দা বিস্তৃত করে, বা 5000 লাইন কোডের একটি উত্স ফাইল)।


1
আমি 10 টি লাইনের চেয়ে বেশি পদ্ধতিগুলির জন্যও চেষ্টা করব ... পদ্ধতিটি কী করছে তা পঠনযোগ্যতা / বুঝতে সাহায্য করে এবং জটিলতা হ্রাস করে যা সহজেই বড় পদ্ধতিতে ঘটতে পারে ...
জ্যাক ম্যাকম্বার

4
আপনি যদি এর সিদ্ধান্তে পৌঁছায় নিয়ম 2 অযৌক্তিক। ডিরেক্টরিতে আপনার 7 টিরও বেশি ফাইল থাকা উচিত নয় সুতরাং আপনাকে আপনার ফাইলগুলি বড় রাখতে হবে যাতে আপনি আপনার প্রকল্পের দশক বা শত শত ফাইলের মধ্যে বিভ্রান্ত না হন। একইভাবে, একটি গভীরভাবে নেস্টেড ডিরেক্টরি কাঠামো অত্যধিক বিভ্রান্তিকর তাই চারপাশের সমস্ত কিছু ছড়িয়ে দেওয়ার চেয়ে কয়েকটি ডিরেক্টরিকে একটি ডিরেক্টরিতে রাখা ভাল।
হাসেন

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

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

3
@ নীল: যদি কোনও ক্লাসের পদ্ধতিগুলি এলোমেলোভাবে সম্পর্কিত তথ্যের টুকরো টুকরো হয় তবে আপনার ক্লাস ডিজাইনে পদ্ধতির সংখ্যার চেয়ে আপনার বড় সমস্যা রয়েছে।
জ্যাকবিবি

33

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

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


2
শত পদ্ধতির একটি শ্রেণি কি শ্রেণি-vyর্ষার সংহতি, সংহতিভাব, দুর্বল নকশা, একক দায়িত্বের নীতি লঙ্ঘন ইত্যাদির লক্ষণ হবে না?
তুলিনাস কর্ডোভা

2
@ ব্যবহারকারী 1598390: সাধারণত, তবে সবসময় না।
হোয়াজনমাম

4
@ ব্যবহারকারী 1598390 - গিস / 3 ডি মডেলিং বলতে সাধারণভাবে আপনি প্রচুর অপারেশন করতে পারেন এবং তারপরে এগুলিকে 2 ডি, 3 ডি, 4 ডি, 3 ডি + সিগন্যালের জন্য ওভারলোড করে, তারপরে ভাসমান / ডাবল / পূর্ণসংখ্যার ইত্যাদি - টেম্পলেটগুলি সামান্য সাহায্য করে তবে কার্যকারিতার জন্য বেশিরভাগ অপারেশনগুলি প্রায়শই একটি সুন্দর শ্রেণীর উত্তরাধিকারীর চেয়ে ভাল হয়
মার্টিন বেকেট

2
@ টিপি 1 - এবং আপনি একটি ছোট ফন্ট ব্যবহার করেন যাতে তারা এতটা জায়গা নেয় না?
মার্টিন বেকেট 16

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

8

যখন এতে থাকা কোডটি অযৌক্তিক হয়ে যায়। উদাহরণস্বরূপ: আপনি যে পদ্ধতিটি / শ্রেণি / ফাংশনটি সন্ধান করছেন (এবং সম্পাদনা / ডিবাগ করতে হবে) সেখানে রয়েছে কিনা তা আপনি কেবল কোড দেখে বলতে পারবেন না, এবং যদি তা হয় তবে তা কোথায়।

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

কিন্তু যখন এটি হয়, এটি এটি বিভক্ত করার সময়।


2

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

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

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

সুতরাং, যতক্ষণ না বড় ফিক্সগুলির জন্য বাগ ফিক্স অনুপাত (সমস্ত সংঘাতে বাগ ফিক্সের অনুপাত ) কম থাকে, পরিস্থিতি সহনীয়। দয়া করে git logএটির জন্য চেষ্টা করুন এবং কতগুলি কমিট ত্রুটির সাথে সম্পর্কিত তা স্কিম করুন। অথবা এমন কোনও সরঞ্জাম ব্যবহার করুন যা এটি স্বয়ংক্রিয়ভাবে বিশ্লেষণ করতে ও কল্পনা করতে পারে, যেমন সফটগ্রাম


-1

এটি বিবেচনা করুন Metaphor। কোডের দৈর্ঘ্যের ক্ষেত্রে, আমি মনে করি আমাদের নিম্নলিখিতগুলি বিবেচনা করা উচিত:

The Cat in The Hat (50 pp.)

এবং

Lord of The Rings (1,178 pp.)

এতে কোনও দোষ নেই Lord of the Rings। এটি একটি কল্পিত বই। The Cat in the Hatএছাড়াও একটি দুর্দান্ত বই। উভয়ই 5 বছরের বাচ্চাদের দ্বারা বোঝা যায়, তবে সামগ্রীর কারণে কেবলমাত্র একজনই উপযুক্ত।

আমার বক্তব্য, যখনই আমরা পারি 5 বছর বয়সী লিখিত কোডটি বোঝা উচিত। Cyclomatic Complexityকোড তৈরি করার সময় বিকাশকারীদের বিবেচনা করা উচিত এমন একটি গুরুত্বপূর্ণ ধারণা। যথাসম্ভব কার্যকারিতা এবং কোডের পুনঃব্যবহারযোগ্যতা বাড়ানোর জন্য লাইব্রেরিগুলি ব্যবহার এবং তৈরি করা। এইভাবে আমাদের কোডটি আমরা যা দেখেছি তার চেয়ে বেশি খণ্ডের কথা বলতে পারে।

আমাদের বেশিরভাগই সমাবেশ কোড লিখছেন না । তবে আমাদের কোডের মূলটি হল সমাবেশ। 10000 লাইনের সমাবেশের মাধ্যমে সন্ধান করা পাইথনের 10000 লাইনের চেয়ে শক্ত, যদি এটি সঠিকভাবে করা হয়।

তবে কিছু কাজের জন্য 500 থেকে 1000 লাইন লিখতে হবে। কোড সহ আমাদের লক্ষ্যটি পরিষ্কার কোডের 300 টি লাইন লিখতে হবে।

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

বিকাশকারীরা কোড নথি করতে চান না, (আমি ব্যক্তিগতভাবে ডকুমেন্টেড কোড পছন্দ করি, আমি সে স্বার্থপর নই)। সুতরাং এমন কোডটি লিখবেন না যা কেবল আপনি বুঝতে বা পড়তে পারবেন। Cat in the Hatকোড লিখুন ।

আমরা সবাই জানি আপনি জেআরআর টলকেন (আপনার মাথায়)। মনে রাখবেন আপনার কাছে বাগ ফ্রি কোড দিয়ে প্রমাণ করার মতো কিছুই থাকবে না।

রূপকের আর একটি কারণ।

বেশি পরিমাণে পাঠক ধন ছড়িয়ে দেবেন না। আপনি যদি একদল লোকের সাথে কাজ করেন এবং তাদের সকলকে একই একটি বৃহত ফাইল পরিবর্তন করতে হয় তবে আপনি সম্ভবত নিজেকে gitমার্জ নরকে পরিণত করবেন।

সবাই প্রত্যাবাসন পছন্দ করে।

-> বলেননি কেউ!

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


ডাউনভোটার নয়, আপনার উপমা আমার কাছে কিছুটা হারিয়ে গেছে। আপনি কি বলছেন যে আপনার কোডটি একাধিক লাইনে ছড়িয়ে দেওয়া ভাল, এবং প্রতিটি লাইনে কম শব্দ রয়েছে?
পশুর

আপনার যতটা সম্ভব একাধিক লাইন এবং ফাইলগুলিতে কোড এবং সহায়তা প্রচার করুন read পাঠযোগ্যতার উপর ফোকাস করুন। একটি ফাইলে 8 বা 9 ক্লাস ফেলবেন না। এটি কোডটি পড়া কঠিন এবং বজায় রাখা আরও শক্ত করে তোলে। আপনার যদি একটি বড় শর্তের কোড বা লুপ থাকে। তাদের ইউটিলিটিগুলিতে পরিণত করুন। ভারী বাসা বাঁধুন। এটি যদি এটি ব্যাখ্যা করতে সহায়তা করে তবে আমাকে জানান।
getBackerZ

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

আমি জ্যাকি ব্রাউন এর স্ক্রিপ্টটি মডুলার জেড / ওএস কোবোল প্রোগ্রামগুলির গজ হিসাবে ব্যবহার করেছি used আপনি জানেন, ককটেল পার্টি
ব্যানার

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