দর্শনটি কি বৈধতা না সম্পাদন করে?


10

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

আমি এটি পছন্দ করেছি, তবে কেন আমি ভিউতে ডেটা বৈধকরণ করব না, তা ভেবে আমাকে ভাবতে লাগল:

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

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


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

উত্তর:


10

আমি মনে করি না এমন কোনও একক জায়গা আছে যেখানে আপনি বলতে পারেন যে সমস্ত বৈধতা থাকা উচিত। এটি কারণ আমাদের কয়েকটি স্ট্যান্ডার্ড এস্প নেটওয়্যার এমভিসি ওয়েবসাইটে একসাথে কাজ করার প্রতিযোগিতামূলক প্রোগ্রামিং কৌশল রয়েছে।

প্রথমত আমাদের ডোমেন লজিককে মডেলগুলিতে আলাদা করার, 'অ্যাকশন' যুক্তিকে নিয়ন্ত্রকদের এবং প্রদর্শনকে একটি ভিউতে আলাদা করার ধারণা রয়েছে have এটি ব্রাউজারের সাথে সার্ভারে সমস্ত যুক্তি সংঘটিত হবে এমন ধারণার উপর ভিত্তি করে কেবলমাত্র একটি ভিউ সরবরাহ করে re

তারপরে, ক্লায়েন্টের পাশের জাভাস্ক্রিপ্ট ব্যবহার করে আমরা ভিউটি প্রসারিত করি। আজকাল এটি এতটাই উন্নত যে জ্যাকুরি / নকআউট / কৌনিক সহ 'এক পৃষ্ঠার ওয়েবসাইট' ধারণাটি সাধারণ অনুশীলন।

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

এটি আরও ভাল ব্যবহারকারীর অভিজ্ঞতা দিতে পারে তবে আপনাকে একটি অবিশ্বস্ত ক্লায়েন্টকে বিশ্বাস করতে হবে। সুতরাং আপনার ক্লায়েন্ট এর অনুরোধগুলির প্রাক-বৈধতা নির্ধারণ না করেই আপনাকে এখনও সার্ভারে বৈধতা যুক্তি বহন করতে হবে।

এছাড়াও, আমাদের প্রায়শই বৈধতা প্রয়োজনীয়তা থাকে যা ক্লায়েন্ট দ্বারা চালিত করা যায় না। যেমন। 'আমার নতুন আইডিটি কি অনন্য?'

সেরা অভিজ্ঞতা / পারফরম্যান্স দেওয়ার লক্ষ্য নিয়ে আপনি যে কোনও অ্যাপ্লিকেশন তৈরি করেন তা অগত্যা একাধিক প্রোগ্রামিং প্যারাডাইমগুলির জন্য ধার করে এবং তার লক্ষ্য অর্জনের জন্য তাদের সাথে আপস করে।


4
+1 এবং জোর দেওয়ার জন্য: ক্লায়েন্টের পোস্ট করা ডেটা কখনও বিশ্বাস করবেন না। কখনো।
মাচাডো

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

হ্যাঁ, তবে এটিও: "আপনার দুটি পৃথক ধরণের নীচে দুটি (বা আরও) অ্যাপ্লিকেশন থাকতে পারে"
ইওয়ান

" ড্যান · আই · গ্রেট : অন্যায়ভাবে সমালোচনা করুন; অস্বীকার করুন " "আমি মনে করি না আপনি এই শব্দটি সঠিকভাবে ব্যবহার করছেন। যদিও অন্যথায় ভাল উত্তর।
kdbanman

না, এটাই আমি বোঝাতে
চাইছিলাম

1

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

এখানে বিবেচনা করার জন্য একাধিক বৈধতার দায়িত্ব থাকতে পারে? যেমন আপনি আপনার # 3 তে বলেছেন:

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

সুতরাং সম্ভবত এটি:

দেখুন : ইনপুট প্রকার, ফর্ম্যাট, প্রয়োজনীয়তা বৈধ করুন ... বেসিক ব্যবহারকারীর ইনপুট বৈধতা যা ব্যবসায়িক যুক্তির সাথে কিছুই করার নেই। সার্ভারের অনুরোধ করে নেটওয়ার্ক ট্র্যাফিক তৈরি করার আগে এই সমস্ত ফ্লফি স্টাফটি ধরুন।

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

শুধু একটি ভাবনা.


1

আমি ধরে নিচ্ছি যে অধ্যবসায়ের জন্য আপনার বৈধতা প্রয়োজন।

কেবল দেখুনই নয়, মডেলটিকেও বৈধতা হ্যান্ডেল করা উচিত নয়। আইটি-র আমার দিনগুলিতে আমি বুঝতে পেরেছিলাম যে আপনি আসলে সঠিকভাবে কাজ করছেন, তা নিশ্চিত করার একটি উপায় ডিডিডি । ক্লাসগুলি আসলে কী হবে সে জন্য দায়বদ্ধ।

ডোমেন-চালিত ডিজাইন অনুসরণ করার সময়, আপনার মডেলগুলিতে আপনার ব্যবসায়ের যুক্তি অন্তর্ভুক্ত হয় এবং এটি এটি। তবে এগুলিতে বৈধতা অন্তর্ভুক্ত নয় কেন?

ধরে নেওয়া যাক আপনি নিজের ডোমেন স্তরটি Data Mapperধরে Active Recordরাখার পরিবর্তে আপনি ইতিমধ্যে ব্যবহার করছেন । তবে তবুও, আপনি চান মডেলগুলি বৈধ হওয়া উচিত, তাই আপনি নিজের মডেলটিতে বৈধতা যুক্ত করুন।

interface Validation
{
    public function validate();
}

class ConcreteModel extends MyModel implements Validation
{
    public function validate() { // the validation logic goes here }
}

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

তবে আপনার একটি সমস্যা রয়েছে, আপনার কাছে কেবলমাত্র 1 টি বৈধতা পদ্ধতি রয়েছে, তবে Modelএটি 2 টি ভিন্ন উপায়ে বৈধকরণ করতে হবে।

মডেলদের উচিত তারা যা করতে দায়বদ্ধ তা করা উচিত, তাদের আপনার ব্যবসায়ের যুক্তি যত্ন নেওয়া উচিত এবং এটি ভালভাবে করা উচিত। বৈধতা দৃistence়তার সাথে আবদ্ধ, ব্যবসায়িক যুক্তি নয়, সুতরাং বৈধতা কোনও মডেলের অন্তর্ভুক্ত নয়

Validatorএর পরিবর্তে আপনার তৈরি করা উচিত , যা তাদের নির্মাণকারীকে প্যারামিটার হিসাবে যাচাই করার জন্য একটি মডেল নেবে, Validationইন্টারফেসটি বাস্তবায়ন করবে এবং Validatorআপনার বিষয়গুলিকে বৈধতা দেওয়ার জন্য এইগুলি ব্যবহার করবে ।

interface Validation
{
    public function validate();
}

class MySQLConcreteModelValidator implements Validation
{
    public function __construct(ConcreteModel $model) { }

    public function validate()
    {
        // you validate your model here
    }
}

class RedisConcreteModelValidator implements Validation
{
    public function __construct(ConcreteModel $model) { }

    public function validate()
    {
        // you validate your model with different set of rules here
    }
}

ভবিষ্যতে যে কোনও সময় আপনি যদি স্থির হয়ে থাকেন অন্য স্তরের জন্য অন্য বৈধতা পদ্ধতিটি যুক্ত করতে চান (তবে আপনি সিদ্ধান্ত নিয়েছিলেন যে রেডিস এবং মাইএসকিউএল আর যাওয়ার উপায় নয়), আপনি কেবল অন্যটি তৈরি করবেন Validatorএবং আপনার IoCধারকটিকে সঠিক উদাহরণটি ভিত্তিতে ব্যবহার করতে পারবেন আপনার এর উপর config


1

অনেক বিকাশকারীদের জন্য মূ .় কুশল নিয়ন্ত্রণকারীদের বিরুদ্ধে ফ্যাট মডেলগুলি পছন্দনীয় পদ্ধতি।

পাঠ্যে বেস ধারণাটি হয়

... তাই সর্বদা মনে রাখবেন যে মডেলটি কেবল ডাটাবেস নয়। এমনকি আপনি ওয়েব পরিষেবাদি থেকে প্রাপ্ত ডেটাটিকে মডেল হিসাবে প্রকাশ করতে পারেন! হ্যাঁ, এমনকি এটম ফিডও! মডেলটির পরিচিতিগুলিকে ছড়িয়ে দেওয়া ফ্রেমওয়ার্কগুলি প্রায়শই কখনও এই অগ্রগতি ব্যাখ্যা করে না যা কেবল ভুল বোঝাবুঝিকে আরও বাড়িয়ে তোলে।

এবং

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

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

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

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

Viewব্যবহারকারী ইন্টারফেস যা ব্যবহারকারীর কাছ থেকে ডেটা সংগ্রহ করে বা ব্যবহারকারীর কাছে উপাত্ত উপস্থাপন করে। সাধারণ চেকগুলি Viewব্যবহারকারী ইনপুট ই-মেইল ঠিকানার মতো করা যেতে পারে বা না (সুতরাং এটি ভিউতেও করা যেতে পারে) আইএমও।

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


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

@ মাইলআরআউট বাস্তবে আমার অর্থ Simple checks can be done by the View like the user input e-mail address or not হ'ল এটি সম্ভবত এতটা পরিষ্কার নয়। তবে আপনি যা বলেছিলেন তা আমার পক্ষেও সত্য, সাধারণ এবং সহজ চেকগুলি দৃষ্টিতে সহজেই করা যেতে পারে।
ফ্যালানএঞ্জেল

আমি আপনার সাথে একমত ছিল না।
মাইলস রাউট

0

ভিউগুলি এফএফ উদ্দেশ্যে বৈধতা সম্পাদন করা উচিত:

  1. ) একটি ফ্রন্ট এন্ড বৈধতা আপনার সার্ভারে ডেটা ট্র্যাফিক হ্রাস করতে পারে।
  2. ) এটি আপনার সার্ভারে ভ্রমণ করার আগে অবৈধ ডেটা পরিচালনা করে।
  3. ) আপনি যদি উচ্চতর সুরক্ষা চান তবে সামনের প্রান্ত এবং পিছনের দিকের বৈধকরণের সংমিশ্রণটি আরও ভাল।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.