ডেটা বনাম ডাটা অধ্যবসায় স্তরটিতে আর্কিটেকচারের বৈধতা পরিষ্কার করুন?


13

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

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

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

অকালে অপ্টিমাইজেশন ব্যতীত কোন প্রস্তাবিত পদ্ধতির বা কোনও মামার বব নিবন্ধগুলি কী এই প্রশ্নটি নিয়ে কাজ করে? অথবা তিনি "ডোমেনে কোনও সমস্যা না হওয়া অবধি বৈধতা" বলবেন ??

আমি ব্যবহারের ক্ষেত্রে সবচেয়ে বেসিক ছাড়া অন্য যে কোনও ভাল উদাহরণ / নমুনা খুঁজে পেতে সত্যিই সংগ্রাম করছি।

হালনাগাদ:

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

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

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

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

অবগতির জন্য, আমি বেশ কিছু নিবন্ধ বন্ধ যাচ্ছি এই , কিন্তু Mattia অনেক বৈধতা নিয়ে আলোচনা করে না।

তবে আমি অনুমান করি যে আমার প্রশ্নের সংক্ষিপ্ত উত্তরটি অনেকটা আমি যে উত্তর হিসাবে গ্রহণ করেছি: "এটি কখনই সহজ নয় এবং এটি নির্ভর করে"।


2
"সঠিক" এবং "ব্যবহারিক" হওয়ার মধ্যে প্রায়শই পার্থক্য রয়েছে। পছন্দটি দেওয়া, আপনি কোনটি পছন্দ করেন?
রবার্ট হার্ভে

"আইটেমের সমস্ত তালিকা লোড করুন" কোনও ব্যবসায়ের নিয়মের মতো লাগে না, এটি বাস্তবায়নের বিশদগুলিতে খুব বেশি ডুব দিয়ে দেখায়। আপনি যদি কিছু লোড না করে ডিবি ক্যোয়ারী ব্যবহার করে নিয়মকে সন্তুষ্ট করতে পারেন তবে নিয়মটি কেন "লোড" বলে?
মনিকা

উত্তর:


31

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

  • ইউআই স্তরটি অবশ্যই ব্যবহারকারীর রিয়েলটাইম প্রতিক্রিয়া প্রদানের জন্য ক্লায়েন্ট পৃষ্ঠা / ফর্মটিতে বৈধতার কিছু ফর্ম অবশ্যই অবশ্যই করতে হবে। অন্যথায় ব্যবহারকারী পুরো নেটওয়ার্কের মাধ্যমে লেনদেন পোস্ট করার সময় প্রতিক্রিয়ার জন্য অপেক্ষা করতে অনেক সময় ব্যয় করে।

  • ক্লায়েন্টটি প্রায়শই একটি অবিশ্বস্ত মেশিনে চালিত হয় (যেমন প্রায় সমস্ত ওয়েব অ্যাপ্লিকেশনগুলিতে), এই বৈধতাটির রুটিনগুলি অবশ্যই সার্ভারের পাশেই কার্যকর করা উচিত যেখানে কোডটি বিশ্বাসযোগ্য is

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

  • ইনজেকশন আক্রমণ বা ডেটা প্রবেশের অন্যান্য দূষিত ফর্মগুলির বিরুদ্ধে সিস্টেমকে উত্তাপের জন্য UI স্তরটিকে পরিষেবা ঘেরে (যেমন কোনও ওয়েব অ্যাপ্লিকেশনে সার্ভার-সাইড কোড) কিছু বৈধতার ফর্মগুলি অবশ্যই করতে হবে। কখনও কখনও এই বৈধতা এমনকি আপনার কোড বেসে হয় না, যেমন ASP.NET অনুরোধ বৈধতা

  • ইউআই স্তরটি অবশ্যই ব্যবহারকারীর দ্বারা প্রবেশ করা ডেটাটিকে ব্যবসায়িক স্তর বুঝতে পারে এমন ফর্ম্যাটে রূপান্তর করতে বৈধতার কিছু ফর্মগুলি করতে হবে; উদাহরণস্বরূপ, এটি অবশ্যই "6/26/2017" স্ট্রিংটিকে উপযুক্ত সময় অঞ্চলে একটি ডেটটাইম অবজেক্টে পরিণত করবে।

  • ব্যবসায়ের স্তরটি বৈধতার বেশিরভাগ ফর্মগুলি করা উচিত কারণ, ওহে, তারা তাত্ত্বিকভাবে, ব্যবসায় স্তরটিতে অন্তর্ভুক্ত।

  • বৈধতার কিছু ফর্মগুলি ডাটাবেস স্তরটিতে আরও দক্ষ হয়, বিশেষত যখন রেফারেন্সিয়াল অখণ্ডতা পরীক্ষার প্রয়োজন হয় (যেমন, কোনও রাজ্য কোড 50 টি বৈধ রাষ্ট্রের তালিকায় রয়েছে তা নিশ্চিত করার জন্য)।

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

  • বৈধতার কিছু ফর্মগুলি কেবলমাত্র তৃতীয় পক্ষের পরিষেবাগুলি দ্বারা সম্পাদিত হতে পারে, উদাহরণস্বরূপ যখন কোনও পোস্টাল কোড এবং একটি শহরের নাম একসাথে যায় ating

  • কোড সিস্টেমের ত্রুটির উপস্থিতিতে যুক্তিসঙ্গত ব্যর্থতা মোডগুলি নিশ্চিত করার জন্য পুরো সিস্টেম জুড়ে নাল চেক এবং ডেটা রূপান্তর চেক একাধিক স্তরে ঘটতে পারে।

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

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


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

2

বৈধতা ব্যবসায়ের স্তরের অংশ।

কথাটি হ'ল: ডিএও-র ব্যবসায়িক যুক্তি ডিএওগুলির ধারণাটিকে অকার্যকর করে দেবে। যে কোনও উচ্চতর স্তরে বৈধতা দেওয়ার জন্য যদি আপনি অন্য ইউজকেস থেকে ব্যবসায়িক ক্রিয়াকলাপগুলি কল করেন তবে রিডান্ট্যান্ট বৈধতার ফলস্বরূপ।

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


2

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

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


0

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

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