কোন স্তরটিতে বৈধতা থাকা উচিত?


18

আমি স্প্রিং বুট ব্যবহার করে একটি রেস্ট এপিআই তৈরি করছি এবং আমি অনুরোধ ইনপুটগুলি বৈধ করতে হাইবারনেট বৈধতা ব্যবহার করছি।

তবে আমার অন্যান্য ধরণের বৈধতাও প্রয়োজন, উদাহরণস্বরূপ যখন আপডেটের ডেটা চেক করা দরকার, যদি কোম্পানির আইডি উপস্থিত না থাকে তবে আমি একটি কাস্টম ব্যতিক্রম ছুঁড়ে দিতে চাই।

এই বৈধতা পরিষেবা স্তর বা নিয়ামক স্তরে অবস্থিত হওয়া উচিত?

পরিষেবা স্তর:

 public Company update(Company entity) {
    if (entity.getId() == null || repository.findOne(entity.getId()) == null) {
        throw new ResourceNotFoundException("can not update un existence data with id : " 
            + entity.getId());
    }
    return repository.saveAndFlush(entity);
}

নিয়ামক স্তর:

public HttpEntity<CompanyResource> update(@Valid @RequestBody Company companyRequest) {
    Company company = companyService.getById(companyRequest.getId());
    Precondition.checkDataFound(company, 
        "Can't not find data with id : " + companyRequest.getId());

    // TODO : extract ignore properties to constant

    BeanUtils.copyProperties(companyRequest, company, "createdBy", "createdDate",
            "updatedBy", "updatedDate", "version", "markForDelete");
    Company updatedCompany = companyService.update(company);
    CompanyResource companyResource = companyAssembler.toResource(updatedCompany);
    return new ResponseEntity<CompanyResource>(companyResource, HttpStatus.OK);
}

উত্তর:


8

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

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

এটি করার একটি সম্ভাব্য উপায় হ'ল এই চুক্তির বৈধতা পৃথক করা এবং এটি উভয় স্তরে কল করা। এটি সাধারণত সর্বাধিক স্পষ্ট - প্রতিটি শ্রেণি / পদ্ধতি তাদের নিজস্ব চুক্তি প্রয়োগ করে তবে কার্য সম্পাদন (ডাটাবেস অ্যাক্সেস করা) বা অন্যান্য কারণে প্রায়শই অযৌক্তিক হয়।

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

এই নকশায়, পরিষেবা স্তর (যা বেশ জেনারিক হওয়া উচিত) এবং নিয়ামক (যা ইন্টিগ্রেশন যুক্তি পরিচালনা করে) এর মধ্যে ব্যবসায়ের যুক্তিগুলির মধ্যে খুব বেশি সংযুক্ত হওয়ার ঝুঁকি রয়েছে।

যাইহোক, এটি বেশ বিতর্কিত প্রশ্ন এবং 100 জন উত্তর দিয়ে 100 জন উত্তর দেবে। এটি শুধু এটি আমার গ্রহণ।


1

ইনপুটটি পরিষেবা স্তরে চেক করা উচিত।

এবং "আইডি খুঁজে পাচ্ছি না" হ'ল যৌক্তিক ত্রুটির শর্ত। সুতরাং নিয়ামক স্তর থেকে নিক্ষিপ্ত করা উচিত।

এটি আবার আপনার লেয়ারিং / ডিজাইনের উপর নির্ভর করে।
পরিষেবা স্তরটি কী করণীয় এবং নিয়ামক স্তর থেকে কী প্রত্যাশিত।


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

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

1

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

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

তারপরে ব্যবসায়ের স্তরে বৈধতা আসে। সমস্ত ব্যবসায়ের বৈধতা ডেটার সংগততা রাখার উপর দৃষ্টি নিবদ্ধ করে , এর অখণ্ডতা নয়

অবশেষে আমি কন্ট্রোল স্তরে পূর্ববর্তী বৈধতাগুলি করি। যারা কেবল এই ধরনের স্তর দিয়ে সম্পর্কিত।

আপনি শীঘ্রই দেখতে পাবেন কোন বৈধতা ব্যবসায়ের স্তরে আরোপিত করার উদ্দেশ্যে। সর্বাধিক সাধারণ: আইডি নিয়ন্ত্রণ। এটি সহজেই উভয় স্তরে প্রয়োগ করা যেতে পারে। যদি আপনি অনেক নিয়ামক বা ক্লায়েন্ট আপনার ব্যবসায়ের স্তর গ্রাস করে থাকেন তবে সর্বত্র একই বৈধতা পুনরাবৃত্তি করার পরিবর্তে এটি ব্যবসায়ের স্তরে রাখা একটি দুর্দান্ত প্রার্থী হবে।

কখনও কখনও কন্ট্রোলারের নিজস্ব নিয়ম এবং শর্ত থাকে যা অন্য কোনও সম্মুখভাগে পুনরুত্পাদন করা হবে না। তারপরে এমন একজন কন্ট্রোলারে রাখা প্রার্থী is

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


0

আমাদের জাভা শপগুলিতে, আমরা ইচ্ছাকৃতভাবে তিনটি পৃথক ক্রিয়ায় ওয়েব উইজেটের বৈধতা বিভক্ত করেছি।

  1. বেসিক ফর্ম্যাটিং - সংখ্যাগুলি সংখ্যা হতে হবে; তারিখগুলি অবশ্যই বৈধ তারিখ হতে হবে ইত্যাদি Usually সাধারণত এই বৈধতাটি নিখরচায় আসে - মডেলটিতে উইজেটের সামগ্রীগুলি আবদ্ধ করার সময় ওয়েব কাঠামোটি এটি আপনার জন্য করবে।
  2. একক উইজেটের বৈধতা - তারিখটি অতীতে থাকতে হবে; একটি পূর্ণসংখ্যা 1 এবং 100 এর মধ্যে হওয়া আবশ্যক; গ্রাহকআইড অবশ্যই ডাটাবেস ইত্যাদিতে উপস্থিত থাকতে হবে এটি বেশিরভাগ ক্ষেত্রে নিয়ামক স্তরের অন্তর্গত, তবে ডেটা সংগ্রহস্থলের সমর্থন প্রয়োজন হতে পারে।
  3. ক্রস-উইজেটের বৈধতা - চেকআউট তারিখ অবশ্যই চেক-ইন তারিখের পরে হওয়া উচিত; মৃত্যুর তারিখ জন্মের তারিখের আগে হতে পারে না এটি অবশ্যই ব্যবসায়ের নিয়মের বৈধতা। আমরা এটিকে নিয়ামক স্তরেও রাখার ঝোঁক রাখি তবে আপনি এটি ব্যবসায়িক বৈধকরণকারীতে স্থানান্তর করতে চাইতে পারেন যাতে এটি পুনরায় ব্যবহার করা যায়।

যদি স্তর 1 ব্যর্থ হয়, আমরা 2 বা 3 পরীক্ষা করি না Similarly একইভাবে যদি 1 সফল হয় এবং 2 ব্যর্থ হয় না তবে আমরা এটি করি না 3.. এটি উদ্দীপনাজনিত ত্রুটি বার্তাগুলি উত্পন্ন করা বন্ধ করে।

আপনি উইজেটের বিষয়বস্তুগুলির পরিবর্তে একটি REST কলে মানগুলি সম্পর্কে জিজ্ঞাসা করছেন, তবে একই নীতিগুলি প্রযোজ্য।


-1

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

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