ক্রস কাটিয়া উদ্বেগের উদাহরণ


121

এ এর একটি ভাল উদাহরণ কী cross-cutting concern? উইকিপিডিয়া পৃষ্ঠায় মেডিকেল রেকর্ডের উদাহরণটি আমার কাছে অসম্পূর্ণ বলে মনে হচ্ছে।

বিশেষত এই উদাহরণ থেকে, লগিং কেন কোড নকল ( স্ক্র্যাটারিং ) এর দিকে পরিচালিত করবে? (সরল কলগুলি যেমন log("....")সর্বত্র, যা কোনও বড় ব্যাপার বলে মনে হয় না)।

core concernএবং এ এর মধ্যে পার্থক্য কী cross-cutting concern?

আমার শেষ লক্ষ্যটি এওপি সম্পর্কে আরও ভাল ধারণা পাওয়া।

উত্তর:


235

বুঝতে করার আগে Crosscutting উদ্বেগ , আমরা বুঝতে হবে উদ্বেগ

একজন উদ্বেগ একটি শব্দ সিস্টেম কার্যকারিতা ভিত্তিতে বিভক্ত একটি অংশ তা বোঝায়।

উদ্বেগ দুটি ধরণের:

  1. প্রাথমিক প্রয়োজনীয়তার জন্য একক এবং নির্দিষ্ট কার্যকারিতা প্রতিনিধিত্বকারী উদ্বেগগুলি মূল উদ্বেগ হিসাবে পরিচিত ।
    বা
    সিস্টেমের প্রাথমিক কার্যকারিতা মূল উদ্বেগ হিসাবে জানে।
    উদাহরণস্বরূপ : ব্যবসায়িক যুক্তি
  2. গৌণ প্রয়োজনীয়তার জন্য কার্যকারিতা প্রতিনিধিত্বকারী উদ্বেগকে ক্রসকাটিং উদ্বেগ বা সিস্টেম-ব্যাপী উদ্বেগ হিসাবে চিহ্নিত করা হয় ।
    বা crosscutting উদ্বেগ একটি উদ্বেগের বিষয় যা আবেদন সারা প্রযোজ্য হয় এবং এটি সমগ্র আবেদন প্রভাবিত করে। উদাহরণস্বরূপ: লগিং, সুরক্ষা এবং ডেটা ট্রান্সফার হ'ল উদ্বেগ যা কোনও অ্যাপ্লিকেশনের প্রায় প্রতিটি মডিউলেই প্রয়োজনীয়, তাই এগুলি ক্রস-কাটিং উদ্বেগ।

শ্লীলতা

এখানে চিত্র বর্ণনা লিখুন

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

(শ্লীলতা)


1
"ক্রসকাটিং উদ্বেগ একটি উদ্বেগ যা পুরো অ্যাপ্লিকেশন জুড়ে প্রযোজ্য" about এ সম্পর্কে নিশ্চিত নয় যেহেতু লেনদেন পরিচালনা 'অ্যাপ্লিকেশন জুড়ে' প্রযোজ্য নয় তবে এটি এখনও ক্রস কাট উদ্বেগ। এবং ছবিটি আমাকে সৎ হওয়ার মতো কিছুই বলে না, এটি কেবল বিভ্রান্তিকর ..
Koray Tugay

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

তবুও উত্তরটি কেবল Log4j এর মতো কিছু ব্যবহার করে এবং LogManager.getLogger () এর মতো লগিং সম্পর্কিত সমস্যা ব্যাখ্যা করে না info তথ্য (মডিউলনেম, _)
ভিকি সিং

49

আমি মনে করি ক্রস কাটা উদ্বেগের একক সেরা উদাহরণ হ'ল লেনদেনমূলক আচরণ। আপনার সমস্ত পরিষেবা পদ্ধতিতে কমিট এবং রোলব্যাক কল সহ ট্রাই-ক্যাচ ব্লকগুলি রাখার বিষয়টি বিপর্যয়কর হবে। পছন্দসই লেনদেনমূলক আচরণের সাথে এওপিকে ব্যবহার করতে পারে এমন মার্কারের সাথে পদ্ধতিগুলি টিকিয়ে রাখা বড় জয়।

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

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

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


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

4
@ জলারস 62২: ক্রস কাটিংয়ের অর্থ এটি বৈশিষ্ট্যের ডান কোণে চলে goes
নাথান হিউজেস

7
@ জলারস 62: ডান-কোণে আমার অর্থ: স্তরগুলির স্তূপ হিসাবে কোনও বৈশিষ্ট্যটি ভাবেন। ক্রস কাটিয়া উদ্বেগ কেবল একটি মাত্রায় প্রয়োগ হতে পারে তবে এটি সমস্ত বৈশিষ্ট্যের মধ্যে সাধারণ।
নাথান হিউজেস

@ নাথানহিউস অনুমোদন একটি ভাল উদাহরণ। আমি সমস্ত অনুমোদন কোডকে ক্রস-কাটিং আর্কিটেকচারে রাখার জন্য কেবল আমার অ্যাপ্লিকেশনটিকে রিফেক্টর করেছি এবং প্রচুর কোড সাফ করার জন্য এটি আশ্চর্য কাজ করে। আমি ডোমেনটিকে একটি বাড়ির মতো বিবেচনা করি। যদি আপনার কাছে প্রবেশের চাবি থাকে তবে আপনি সেখানে যা চান তা করতে পারেন (আপনি মালিক হিসাবে অনুমান করেছেন)। তবে আপনি বাড়ির প্রতিটি দরজা লক করে চাবি প্রবেশের দাবি করবেন না। আপনি হয় হয় বা আপনি হয় না।
রিচার্ড

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

14

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

এখন আমি আপনাকে লগ আউটপুটের মতো "তুচ্ছ" জিনিসগুলির সম্পর্কে একটি ছোট্ট গল্প বলি: মাত্র কয়েক সপ্তাহ আগে আমি একটি ক্লায়েন্টের জন্য একটি জটিল, তবে খুব বেশি বড় কোড বেস (কোডের প্রায় 250K লাইন) রিফেক্টর করি না। কয়েক শতাধিক ক্লাসে এক ধরণের লগিং ফ্রেমওয়ার্ক ব্যবহার করা হত, আরও কয়েক শতাধিকতে। তারপর কয়েক হাজার লাইনের ছিলSystem.out.println(*)যেখানে সত্যিই লগ আউটপুট করা উচিত ছিল। তাই আমি কোড বেস জুড়ে ছড়িয়ে ছিটিয়ে থাকা কোডের কয়েক হাজার লাইন ফিক্সিংয়ের সাথে শেষ করেছি। ভাগ্যক্রমে পুরো পদক্ষেপের গতি বাড়ানোর জন্য আমি ইন্টেলিজ আইডিইএ (কাঠামোগত অনুসন্ধান এবং প্রতিস্থাপন) এর কিছু চালাক কৌশল ব্যবহার করতে পারি, তবে ছেলে আপনি কি মনে করেন না এটি তুচ্ছ! অবশ্যই, দৃ context়তার সাথে প্রাসঙ্গিক-নির্ভর ডিবাগ লগিং সর্বদা একটি পদ্ধতি শৃঙ্খলে উপস্থিত হবে, তবে অনেক গুরুত্বপূর্ণ ধরণের লগিং যেমন ট্রেসিং মেথড কল (এমনকি শ্রেণিবদ্ধভাবে এমনকি একটি চমত্কারভাবে ইন্টেন্টেড আউটপুট সহ) হ্যান্ডলড বা অবিবাহিত ব্যতিক্রম উভয় লগিং, ব্যবহারকারীর নিরীক্ষণ (লগিং কলগুলিতে ব্যবহারকারীর ভূমিকার উপর ভিত্তি করে সীমাবদ্ধ পদ্ধতিগুলি) এবং তাই সোর্স কোডটিকে দূষিত না করে সহজেই দিকগুলিতে প্রয়োগ করা যেতে পারে। প্রতিদিনের অ্যাপ্লিকেশন বিকাশকারীকে এ সম্পর্কে চিন্তাভাবনা করার বা কোড বেস জুড়ে ছড়িয়ে থাকা লগার কলগুলি দেখার প্রয়োজন হয় না।

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


0

ক্রস কাটিং উদ্বেগগুলি এমন দৃশ্যাবলী যা প্রয়োগের প্রকার নির্বিশেষে সর্বদা উপস্থিত থাকা উচিত।

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

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

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