সম্পত্তিগুলির পার্শ্ব প্রতিক্রিয়া হওয়া উচিত


19

সি # এর বৈশিষ্ট্যগুলির এর রাজ্যগুলিতে পরিবর্তনের বিষয়টি জানানোর পাশাপাশি কী পার্শ্ব প্রতিক্রিয়া থাকতে হবে?

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


3
আহ আমাকে একটি প্রাসঙ্গিক এসও প্রশ্ন সন্ধান করুন। 1 সেকেন্ড স্ট্যাকওভারফ্লো / সিকিউশনস / ২৪৪৯৯০১০/২ স্ট্যাকওভারফ্লো
চাকরী

1
@ কাজের সন্ধানের মধ্যে, কেন আমি সি # তে সম্পত্তি ব্যবহার করা এড়ানো উচিত? ওরফে জেফরি রিখটারের মতামত এই প্রশ্নের সাথে খুব প্রাসঙ্গিক।
রওয়ং

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

যদিও এটি নির্মাণকারীদের সাথে সম্পর্কিত তবে এটি প্রাসঙ্গিক: প্রোগ্রামার্স.স্ট্যাকেক্সেঞ্জারএইচএ
জিম জি।

উত্তর:


40

আমি ধরে নিয়েছি আপনি কেবল পঠনযোগ্য বৈশিষ্ট্য, বা কমপক্ষে সম্পত্তি প্রাপ্তির বিষয়ে কথা বলছেন , যেহেতু প্রায় প্রতিটি ক্ষেত্রে সম্পত্তি সেটরারের পার্শ্ব-প্রতিক্রিয়া রয়েছে। অন্যথায় এটি খুব দরকারী নয়।

সাধারণভাবে, একটি ভাল নকশা অন্তত বিস্ময়ের নীতি অনুসরণ করে । কলকারীরা আপনার কাছ থেকে প্রত্যাশা করছে না এমন কাজ করবেন না, বিশেষত যদি সেই জিনিসগুলি ভবিষ্যতের ফলাফলগুলিকে বদলে দিতে পারে।

সাধারণভাবে , এর অর্থ সম্পত্তি সংস্থানকারীদের পার্শ্ব প্রতিক্রিয়া হওয়া উচিত নয়।

তবে আসুন আমরা "পার্শ্ব প্রতিক্রিয়া" বলতে কী বোঝাতে চাই সে সম্পর্কে সাবধানতা অবলম্বন করা যাক ।

একটি পার্শ্ব প্রতিক্রিয়া , প্রযুক্তিগতভাবে, রাষ্ট্রের যে কোনও পরিবর্তন। এটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য রাষ্ট্র হতে পারে, বা ... এটি সম্পূর্ণ ব্যক্তিগত অবস্থা হতে পারে।

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

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

সুতরাং আমি এই নিষেধাজ্ঞাকে নীচের দিকে কিছুটা wouldিলা করব : সম্পত্তি পাঠে দৃশ্যমান পার্শ্ব প্রতিক্রিয়া বা পার্শ্ব প্রতিক্রিয়া থাকা উচিত নয় যা তাদের শব্দার্থবিজ্ঞানের পরিবর্তন করে

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

তবে সাবধান! থাম্বের নিয়ম হিসাবে, আপনার পার্শ্ব প্রতিক্রিয়া এড়াতে চেষ্টা করা উচিত , কারণ প্রায়শই আপনি ব্যক্তিগত প্রয়োগের বিশদ হিসাবে যা ভাবেন তা অপ্রত্যাশিতভাবে ফাঁস হয়ে যেতে পারে এবং সর্বজনীন হতে পারে।


2
+1 - আরও জটিল
কেসগুলির সাথে

গেটারের উপর গ্রহণযোগ্য পার্শ্ব প্রতিক্রিয়াটির আরেকটি উদাহরণ: একটি লগিং ফাংশন।
লরেন পেচটেল 21'13

5

আমি আপনার প্রশ্নের উত্তর একটি প্রশ্নের সাথে দেব: আপনি যখন কোনও ফর্মের প্রস্থের সম্পত্তিটি সংশোধন করবেন তখন কী হবে?

আমার মাথার উপরের অংশ থেকে, এটি হবে:

  • ব্যাকিং ফিল্ডের মান পরিবর্তন করুন।
  • একটি ঘটনা আগুন।
  • ফর্মের মাত্রাগুলি পরিবর্তন করুন, উইন্ডো ম্যানেজারকে পরিবর্তনের প্রতিবেদন করুন এবং পুনরায় রঙের জন্য অনুরোধ করুন।
  • পরিবর্তনের ফর্মের নিয়ন্ত্রণগুলিকে অবহিত করুন যাতে ফর্মটি পুনরায় আকার দেওয়ার সময় তাদের যে কোনওরই আকার বা অবস্থান পরিবর্তন করতে হবে।
  • আগুনের ইভেন্টে পরিবর্তিত সমস্ত নিয়ন্ত্রণের কারণ এবং উইন্ডো ম্যানেজারকে বলুন যে তাদের পুনরায় চিত্রিত করা দরকার need
  • সম্ভবত অন্যান্য জিনিস।

(অস্বীকৃতি: আমি একটি ডেল্ফি বিকাশকারী, নেট। বিকাশকারী নই। এটি সি # এর জন্য 100% সঠিক নাও হতে পারে, তবে আমি বাজি ধরেছি এটি বেশ কাছাকাছি, বিশেষত মূল বিবেচনা করে যে নেট। ফ্রেমওয়ার্কটি দেলফির উপর ভিত্তি করে কতটা ছিল))

আপনি যখন কোনও ফর্মের প্রস্থ সম্পত্তি পরিবর্তন করেন তখন এই সমস্ত "পার্শ্ব প্রতিক্রিয়া" ঘটে থাকে। তাদের মধ্যে কোনওরকমভাবে অনুচিত বা ভুল বলে মনে হচ্ছে?


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

5

কটাক্ষপাত মাইক্রোসফট ডিজাইন রুলস , বিশেষ করে তাদের মধ্যে একজন:

CA1024: উপযুক্ত যেখানে বৈশিষ্ট্য ব্যবহার করুন

... এই পদ্ধতিগুলির মধ্যে একটি উপস্থিত থাকলে একটি পদ্ধতি সম্পত্তি হওয়ার পক্ষে ভাল প্রার্থী:

  • কোনও আর্গুমেন্ট নেয় না এবং কোনও বস্তুর রাষ্ট্রীয় তথ্য প্রদান করে।
  • কোনও বস্তুর অবস্থার কিছু অংশ সেট করতে একক যুক্তি গ্রহণ করে।

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

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

2

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

সম্পাদনা : ওহ, আরও একটি জিনিস - "সম্পত্তিXYZ পরিবর্তিত!" (উদাঃ INotifyPropertyChanged) - সেটারগুলিতে ভাল।


2

পূর্বে উল্লিখিত অলস লোডিংয়ের পাশাপাশি লগিং ফাংশনগুলির ক্ষেত্রেও রয়েছে। এগুলি বিরল হবে তবে প্রশ্নের বাইরে নয়।


2

প্রোগ্রামিংয়ে প্রায় কোনও বিভ্রান্তি নেই, আপনার প্রশ্নের জবাব দেওয়ার জন্য আমাদের কিছু জিনিসগুলির পছন্দসই বৈশিষ্ট্যগুলি দেখতে হবে এবং এটি আমাদের ক্ষেত্রে প্রযোজ্য কিনা তা আমাদের দেখতে হবে see

  1. আমরা ক্লাসগুলি সহজেই টেস্টযোগ্য হতে চাই।
  2. আমরা একযোগে সমর্থন ক্লাস চাই
  3. আমরা চাই ক্লাসগুলি তৃতীয় পক্ষগুলির পক্ষে যুক্তিযুক্ত হতে সহজ হোক

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

সাধারণভাবে যত বেশি পার্শ্ব প্রতিক্রিয়া হয় তত একটি ক্লাস পরীক্ষা করা কঠিন। আরও গৌণ পার্শ্ব প্রতিক্রিয়াগুলি হ'ল আরও কঠিন সমঝোতা হ্যান্ডেল করা হবে তবে এটি একটি কঠিন সমস্যা যার জন্য সম্ভবত কিছু বড় নকশার চিন্তাভাবনা করা দরকার।

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

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

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