দুর্দান্ত প্রশ্ন!
ওয়ার্ল্ড ওয়াইড ওয়েব বিকাশের ক্ষেত্রে, আপনি যদি নিম্নলিখিতগুলিও জিজ্ঞাসা করেন তবে কি।
"যদি খারাপ ব্যবহারকারীর ইনপুট কোনও ব্যবহারকারীর ইন্টারফেস থেকে কোনও নিয়ামককে সরবরাহ করা হয়, তবে কন্ট্রোলারকে কি এক ধরণের চক্রীয় লুপে ভিউ আপডেট করতে হবে, প্রসেসের আগে কমান্ড এবং ইনপুট ডেটা সঠিক হতে বাধ্য করা হয় ? কীভাবে? দৃশ্যটি কীভাবে স্বাভাবিকের অধীনে আপডেট হয়? শর্তসমূহ? কোনও দৃশ্যে কি কোনও মডেলের সাথে দৃled়ভাবে মিলিত হয়? ব্যবহারকারীর ইনপুট বৈধতা কী মডেলটির মূল ব্যবসায়িক যুক্তি, বা এটি এর প্রাথমিক? এবং এভাবে নিয়ামকের ভিতরে হওয়া উচিত (কারণ ব্যবহারকারী ইনপুট ডেটা অনুরোধের অংশ)?
(কার্যকরভাবে ইনপুট অর্জিত না হওয়া পর্যন্ত কোনও মডেল ইনস্ট্যান্ট করতে বিলম্ব হতে পারে?)
আমার মতে মডেলগুলিকে একটি খাঁটি এবং আদিম পরিস্থিতি পরিচালনা করা উচিত (যতটা সম্ভব সম্ভব), বেসিক এইচটিটিপি অনুরোধ ইনপুট যাচাইকরণ দ্বারা মডেল না হওয়া উচিত যা মডেল ইনস্ট্যান্টাইজেশনের আগে হওয়া উচিত (এবং অবশ্যই মডেলটি ইনপুট ডেটা পাওয়ার আগে)) যেহেতু রাষ্ট্রীয় ডেটা পরিচালনা করা (অবিচ্ছিন্ন, বা অন্যথায়) এবং এপিআই সম্পর্কগুলি মডেলের জগত, তাই বেসিক HTTP অনুরোধ ইনপুট বৈধকরণটি নিয়ামকের মধ্যে আসুক ।
সারমর্ম।
1) আপনার রুটটি বৈধ করুন (ইউআরএল থেকে পার্স করা), কারণ অন্য যে কোনও কিছু এগিয়ে যাওয়ার আগে নিয়ামক এবং পদ্ধতি থাকা আবশ্যক। প্রকৃত নিয়ামকের কাছে যাওয়ার আগে অবশ্যই এটি অবশ্যই সামনের-নিয়ামক অঞ্চলে (রাউটার শ্রেণি) হওয়া উচিত। Duh। :-)
2) কোনও মডেলের ইনপুট ডেটার অনেকগুলি উত্স থাকতে পারে: একটি HTTP অনুরোধ, একটি ডাটাবেস, একটি ফাইল, একটি API, এবং হ্যাঁ, একটি নেটওয়ার্ক। আপনি যদি সমস্ত ইনপুট বৈধতা মডেলটিতে স্থাপন করতে চলেছেন তবে আপনি এইচটিটিপি অনুরোধ ইনপুট বৈধতা প্রোগ্রামটির ব্যবসায়ের প্রয়োজনীয়তার অংশ বিবেচনা করবেন । মামলা বন্ধ.
3) তবুও, যদি এইচটিটিপি অনুরোধের ইনপুটটি ভাল না হয় তবে প্রচুর পরিমাণে অবজেক্টের ব্যয় করে যাওয়া মায়োপিক ! আপনি জানতে পারবেন যে ** এইচটিটিপি অনুরোধের ইনপুট ** ভাল কিনা ( যা অনুরোধের সাথে এসেছিল ) মডেলটি এবং এর সমস্ত জটিলতা ইনস্ট্যান্ট করার আগে এটি বৈধ করে (হ্যাঁ, সম্ভবত এপিআই এবং ডিবি ইনপুট / আউটপুট ডেটার জন্য আরও বেশি বৈধকারী)।
নিম্নলিখিত পরীক্ষা করুন:
ক) এইচটিটিপি অনুরোধ পদ্ধতি (জিইটি, পোস্ট, পুট, প্যাচ, মোছা ...)
খ) সর্বনিম্ন এইচটিএমএল নিয়ন্ত্রণ (আপনার কি যথেষ্ট আছে?)
গ) সর্বাধিক এইচটিএমএল নিয়ন্ত্রণ (আপনার কি খুব বেশি?)
d) HTML নিয়ন্ত্রণগুলি সঠিক করুন (আপনার কি সঠিক আছে?)
e) ইনপুট এনকোডিং (সাধারণত, এনকোডিংটি ইউটিএফ -8?)
চ) সর্বাধিক ইনপুট আকার (ইনপুটগুলির মধ্যে কি সীমানার বাইরে কিছু আছে?)
মনে রাখবেন, আপনি স্ট্রিং এবং ফাইলগুলি পেতে পারেন, সুতরাং অনুরোধগুলি আপনার সার্ভারকে আঘাত করার সাথে সাথে মডেলটি ইনস্ট্যান্ট করার জন্য অপেক্ষা করা খুব ব্যয়বহুল হতে পারে।
আমি এখানে যা বর্ণনা করেছি তা নিয়ামকের মাধ্যমে আসা অনুরোধের অভিপ্রায়কে আঘাত করে । অভিপ্রায় যাচাইয়ের ছাড় দেওয়া আপনার অ্যাপ্লিকেশনটিকে আরও দুর্বল করে leaves উদ্দেশ্য কেবল ভাল (আপনার মৌলিক নিয়মগুলি দ্বারা খেলতে) বা খারাপ (আপনার মৌলিক নিয়মের বাইরে যাওয়া) হতে পারে।
ইন্টেন্ট একটি HTTP অনুরোধের জন্য একটি সব অথবা কিছুই প্রতিজ্ঞা হয়। সবকিছু পাস, বা অনুরোধটি অবৈধ । মডেলটিতে কিছু প্রেরণের দরকার নেই।
HTTP- র এই মৌলিক স্তর অনুরোধ অভিপ্রায় রয়েছে কিছুই নিয়মিত ব্যবহারকারীর ইনপুট ত্রুটি এবং বৈধতা সঙ্গে কাজ করতে। আমার অ্যাপ্লিকেশনগুলিতে, এইচটিটিপি অনুরোধটি সম্মানের জন্য আমার অবশ্যই উপরের পাঁচটি পদ্ধতিতে বৈধ হতে হবে। একটি প্রতিরক্ষা-ইন-গভীরতা বলার ভাবে, আপনি কখনোই ব্যবহারকারীর ইনপুট বৈধতা মধ্যে সার্ভার পাশ যদি পেতে কোনো এই পাঁচটি জিনিস ব্যর্থ হয়।
হ্যাঁ, এর অর্থ এমনকি ফাইলের ইনপুটটিকে অবশ্যই আপনার ব্যবহারকারীদের সর্বাধিক ফাইলের আকারটি যাচাই করতে এবং যাচাই করার জন্য প্রান্ত-প্রয়াসের প্রচেষ্টার সাথে সামঞ্জস্য করতে হবে। শুধু এইচটিএমএল? জাভাস্ক্রিপ্ট নেই? খুব ভাল, তবে ব্যবহারকারীকে অবশ্যই ফাইলগুলি আপলোড করার পরিণতি সম্পর্কে অবহিত করতে হবে যা খুব বড় (মূলত, তারা সমস্ত ফর্মের ডেটা হারাবে এবং সিস্টেম থেকে সরিয়ে দেওয়া হবে)।
4) এর অর্থ কি এইচটিটিপি অনুরোধ ইনপুট ডেটা অ্যাপ্লিকেশনটির ব্যবসায়িক যুক্তির অংশ নয়? না, এর অর্থ কেবল কম্পিউটারগুলি সীমাবদ্ধ ডিভাইস এবং সংস্থানগুলি অবশ্যই বুদ্ধিমানের সাথে ব্যবহার করা উচিত। দূষিত ক্রিয়াকলাপটি শীঘ্রই বন্ধ করা বুদ্ধিমান হয়ে যায়, পরে নয়। এটি পরে থামার অপেক্ষার জন্য আপনি গণনা সংস্থানগুলিতে আরও অর্থ প্রদান করেন।
5) এইচটিটিপি অনুরোধ ইনপুট যদি খারাপ হয় তবে পুরো অনুরোধটি খারাপ । আমি এইভাবে তাকান। ভাল এইচটিটিপি অনুরোধ ইনপুটটির সংজ্ঞাটি মডেলটির ব্যবসায়িক প্রয়োজনীয়তা থেকে উদ্ভূত, তবে সংস্থান সীমানার কিছুটা অবশ্যই থাকতে হবে। একটি খারাপ অনুরোধটিকে হত্যা করার আগে এবং বলার আগে আপনি আর কতক্ষণ বাঁচতে দেবেন, "ওহ, আরে কিছু মনে করবেন না Bad খারাপ অনুরোধ"।
রায়টি কেবল এই নয় যে ব্যবহারকারী একটি যুক্তিসঙ্গত ইনপুট ভুল করেছেন, তবে এইচটিটিপি অনুরোধটি এতটাই সীমার বাইরে যে এটি অবশ্যই দূষিত ঘোষণা করা উচিত এবং তত্ক্ষণাত বন্ধ করা উচিত।
)) সুতরাং, আমার অর্থের জন্য, এইচটিটিপি অনুরোধ (পদ্ধতি, ইউআরএল / রুট, এবং ডেটা) হয় সবই ভাল, বা অন্য কোনও কিছুই এগিয়ে যেতে পারে। একটি শক্তিশালী মডেলটির সাথে ইতিমধ্যে উদ্বেগের জন্য বৈধতা কাজ রয়েছে তবে একটি ভাল সংস্থান রাখাল বলে "আমার উপায়, বা উচ্চতর পথ correct সঠিকভাবে আসুন, বা আদৌ আসেন না।"
যদিও এটি আপনার প্রোগ্রাম। "এটি করার একাধিক উপায় রয়েছে" " কিছু উপায়ে অন্যের চেয়ে সময় এবং অর্থের বেশি ব্যয় হয়। পরে (মডেলটিতে) এইচটিটিপি অনুরোধের ডেটা বৈধকরণের জন্য কোনও অ্যাপ্লিকেশনটির আজীবন বেশি খরচ করা উচিত (বিশেষত যদি স্কেলিং বা আউট স্কেল করা হয়)।
যদি আপনার ভ্যালিডিটারগুলি মডুলার হয় তবে নিয়ামকটিতে বেসিক * এইচটিটিপি অনুরোধ ইনপুট ** যাচাই করা কোনও সমস্যা হওয়া উচিত নয়। কেবলমাত্র একটি কৌশলযুক্ত ভ্যালিডেটর শ্রেণি ব্যবহার করুন, যেখানে বৈধতাদানকারীরা কখনও কখনও বিশেষায়িত ভ্যালিডেটরগুলির সমন্বয়ে তৈরি হন (ই-মেইল, ফোন, ফর্ম টোকন, ক্যাপচা, ...)।
কেউ কেউ এটিকে পুরোপুরি ভুল মাথা হিসাবে দেখেন, তবে এইচটিটিপি শৈশবেই ছিল যখন গ্যাং অফ ফোর ডিজাইন প্যাটার্নস: পুনরায় ব্যবহারযোগ্য অবজেক্ট-ওরিয়েন্টেড সফ্টওয়্যার এর উপাদানগুলি লিখেছিল ।
================================================== ========================
এখন, এটি সাধারণ ব্যবহারকারীর ইনপুট বৈধতার সাথে সম্পর্কিত (এইচটিটিপি অনুরোধটি বৈধ হিসাবে গণ্য হওয়ার পরে), ব্যবহারকারী যখন আপনার সম্পর্কে চিন্তাভাবনা করবে তখন এটি দৃশ্যকে আপডেট করছে! এই জাতীয় ব্যবহারকারীর ইনপুট বৈধতা মডেলটিতে হওয়া উচিত।
সামনের দিকে আপনার জাভাস্ক্রিপ্টের কোনও গ্যারান্টি নেই। এর অর্থ এটির স্ট্যাটাস সহ আপনার অ্যাপ্লিকেশনটির UI এর অ্যাসক্রোনাস আপডেটের গ্যারান্টি দেওয়ার কোনও উপায় নেই। সত্যিকারের প্রগতিশীল বর্ধনশীলতা সিঙ্ক্রোনাস ব্যবহারের ক্ষেত্রেও আবরণ করবে।
সিঙ্ক্রোনাস ইউজ কেসের জন্য অ্যাকাউন্টিং হ'ল এমন একটি শিল্প যা আরও বেশি বেশি হারিয়ে যেতে চলেছে কারণ কিছু লোক তাদের সমস্ত ইউআই ট্রিকসগুলির অবস্থা (ট্র্যাকিং / লুকিয়ে রাখা নিয়ন্ত্রণ, অক্ষম / সক্ষম নিয়ন্ত্রণগুলি) ট্র্যাক করার সময় এবং ঝামেলা করতে চান না , ত্রুটি সূচক, ত্রুটি বার্তা) ব্যাক-এন্ডে (সাধারণত অ্যারেতে ট্র্যাকিং স্টেট দ্বারা)।
আপডেট : ডায়াগ্রামে, আমি বলছি যে View
রেফারেন্সটি উল্লেখ করা উচিত Model
। না । আলগা সংযোগ সংরক্ষণের জন্য আপনার View
কাছ থেকে ডেটা পাস করা উচিত Model
।