বিজ্ঞপ্তি সংক্রান্ত রেফারেন্সগুলিতে কী ভুল?


160

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

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

সম্পাদনা: আমি দ্বি-সংযুক্ত তালিকার বা পয়েন্টার-টু-প্যারেন্টের মতো সমজাতীয় বিজ্ঞপ্তি সংক্রান্ত রেফারেন্সগুলি সম্পর্কে জিজ্ঞাসা করছি না। এই প্রশ্নটি সত্যই "বৃহত্তর স্কোপ" বিজ্ঞপ্তি সংক্রান্ত রেফারেন্স সম্পর্কে জিজ্ঞাসা করছে, যেমন লাইবায় কলিং লিবিবি যা লাইবায় ফিরে আসে। আপনার পছন্দ হলে 'lib' এর বিকল্প 'মডিউল'। এখনও পর্যন্ত সমস্ত উত্তর জন্য ধন্যবাদ!


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

1
@ Luv2code কেবল তখনই বোকামি হয়ে যায় যদি আপনি প্রকল্পগুলির মধ্যে কোডটি কেটে পেস্ট করেন বা সম্ভবত যখন উভয় প্রকল্পই একই কোডে সংকলন করে এবং লিঙ্ক করে। যদি তারা এই জাতীয় সংস্থানগুলি ভাগ করে নিচ্ছে তবে তাদের একটি লাইব্রেরিতে রাখুন।
ড্যাশ-টম-ব্যাং

উত্তর:


220

বিজ্ঞপ্তি সংক্রান্ত রেফারেন্সগুলির সাথে অনেকগুলি দুর্দান্ত জিনিস রয়েছে:

  • বিজ্ঞপ্তি বর্গ রেফারেন্স উচ্চ মিলন তৈরি ; উভয় শ্রেণীর প্রত্যেক সময় recompiled করা আবশ্যক হয় তাদের পরিবর্তিত হয়।

  • বিজ্ঞপ্তি সমাবেশ রেফারেন্স স্থির যোগসূত্র প্রতিরোধ করে , কারণ বি সম্পূর্ণরূপে A এর উপর নির্ভরশীল তবে B সম্পূর্ণ না হওয়া পর্যন্ত A একত্রিত হতে পারে না।

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

  • বিজ্ঞপ্তি অবজেক্টের রেফারেন্সগুলি নির্ভরতা ইঞ্জেকশনটিকেও অসম্ভব করে তোলে , এটি আপনার সিস্টেমের পরীক্ষাযোগ্যতা উল্লেখযোগ্যভাবে হ্রাস করে ।

  • একটি খুব দিয়ে অবজেক্টস বৃহৎ সার্কুলার রেফারেন্স সংখ্যা প্রায়ই ঈশ্বর অবজেক্টস । তা না হলেও তাদের স্প্যাগেটি কোডে নেতৃত্ব দেওয়ার প্রবণতা রয়েছে ।

  • বিজ্ঞপ্তি সত্তা রেফারেন্স (বিশেষত ডাটাবেসগুলিতে, তবে ডোমেন মডেলগুলিতেও) নন-অযোগ্যতা সীমাবদ্ধতার ব্যবহার রোধ করে , যা শেষ পর্যন্ত ডেটা দুর্নীতি বা কমপক্ষে অসঙ্গতি হতে পারে।

  • সার্কুলার রেফারেন্স সাধারণভাবে কেবল হয় বিভ্রান্তিকর এবং কখন কিভাবে বুঝতে একটি প্রোগ্রাম ফাংশন প্রয়াস আয়তন বহুলাংশে জ্ঞানীয় লোড বৃদ্ধি।

দয়া করে, বাচ্চাদের কথা ভাবেন; আপনি যখনই পারেন বিজ্ঞপ্তি সংক্রান্ত রেফারেন্স এড়িয়ে চলুন।


32
আমি বিশেষত শেষ পয়েন্টটির প্রশংসা করি, "জ্ঞানীয় লোড" এমন একটি জিনিস যা সম্পর্কে আমি খুব সচেতন তবে এর জন্য কখনও বড় সংক্ষিপ্ত শব্দ ছিল না।
ড্যাশ-টম-ব্যাং

6
ভাল উত্তর. আপনি যদি পরীক্ষার বিষয়ে কিছু বলেন তবে ভাল হবে। যদি মডিউল এ এবং বি পারস্পরিক নির্ভরশীল হয় তবে তাদের অবশ্যই এক সাথে পরীক্ষা করা উচিত। এর অর্থ তারা সত্যই পৃথক মডিউল নয়; একসাথে তারা একটি ভাঙ্গা মডিউল হয়।
কেভিন ক্লাইন 18

5
নির্ভরশীল ইনজেকশনটি বিজ্ঞপ্তি সংক্রান্ত রেফারেন্স সহ অসম্ভব নয়, এমনকি স্বয়ংক্রিয় ডিআইও দিয়েও। একজনকে কেবল কনস্ট্রাক্টর প্যারামিটার না করে কোনও সম্পত্তি দিয়ে ইনজেকশন দিতে হবে।
ব্লুরাজা - ড্যানি পিফ্লুঘুফ্ট

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

3
আমি এটি একটি ভাল অনুশীলন দাবি করছিলাম না, আমি কেবল উত্তরের দিকে দাবী করা হিসাবে এটি অসম্ভব অসম্ভব ইঙ্গিত করছিলাম।
ব্লুরাজা - ড্যানি পিফ্লুঘুফ্ট

22

একটি বিজ্ঞপ্তিযুক্ত রেফারেন্স হ'ল দ্বি-বৃত্তাকার রেফারেন্সের দ্বিগুণ।

যদি ফু বার সম্পর্কে জেনে থাকে, এবং বার ফু সম্পর্কে জানে, আপনার দুটি জিনিস দরকার যা পরিবর্তনের প্রয়োজন (যখন প্রয়োজন আসে যে ফু এবং বারগুলি একে অপরের সম্পর্কে আর জানতে হবে না)। ফু যদি বার সম্পর্কে জানত তবে একটি বার ফু সম্পর্কে জানতে না পারলে আপনি বারকে স্পর্শ না করেই ফু বদলাতে পারবেন।

চক্রীয় তথ্যসূত্রগুলি বুটস্ট্র্যাপিং সমস্যাগুলিও সৃষ্টি করতে পারে, কমপক্ষে এমন পরিবেশে দীর্ঘমেয়াদে স্থায়ী হয় (মোতায়েন পরিষেবাদি, চিত্র-ভিত্তিক বিকাশ পরিবেশ) যেখানে লো লো করার জন্য বার কাজ করছে তার উপর নির্ভর করে, তবে বারও ফু এর উপর নির্ভর করে যাতে কাজ করে ভার.


17

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

লোকেরা প্রায়শই একক শ্রেণীর (/ ফাংশন / ফাইল / ইত্যাদি) জটিলতার দিকে নজর দেয় এবং ভুলে যায় যে আপনার সত্যিকার অর্থেই ক্ষুদ্রতম বিভাজক (এনক্যাপসুলেটেবল) ইউনিটের জটিলতা বিবেচনা করা উচিত। একটি বিজ্ঞপ্তি নির্ভরতা that ইউনিটের আকার বৃদ্ধি করে, সম্ভবত অদৃশ্যভাবে (যতক্ষণ না আপনি ফাইল 1 পরিবর্তন করার চেষ্টা শুরু করেন এবং বুঝতে না পারছেন যে ফাইলগুলিতে 2-127 পরিবর্তনও প্রয়োজন)।


14

তারা নিজেরাই নয় বরং সম্ভাব্য দুর্বল ডিজাইনের সূচক হিসাবে খারাপ হতে পারে। ফু যদি বারের উপর নির্ভর করে এবং বার ফু-র উপর নির্ভর করে, তবে একটি অনন্য ফুবারের পরিবর্তে তারা দুটি কেন তা প্রশ্ন করা ন্যায়সঙ্গত।


10

হুম ... এটি বিজ্ঞপ্তি নির্ভরতা বলতে কী বোঝায় তার উপর নির্ভর করে, কারণ আসলে কিছু বিজ্ঞপ্তি নির্ভরতা রয়েছে যা আমি মনে করি খুব উপকারী।

একটি এক্সএমএল ডোম বিবেচনা করুন - প্রতিটি নোডের জন্য তাদের পিতামাতার একটি উল্লেখ থাকা এবং প্রতিটি পিতামাতার পক্ষে তার সন্তানের একটি তালিকা থাকা অর্থপূর্ণ makes কাঠামোটি যৌক্তিকভাবে একটি গাছ, তবে আবর্জনা সংগ্রহের অ্যালগরিদম বা অনুরূপ দৃষ্টিকোণ থেকে কাঠামোটি বৃত্তাকার is


1
গাছ হবে না?
কনরাড ফ্রিক্স

@ কনরাড: আমার ধারণা, এটিকে গাছ হিসাবে ভাবা যেতে পারে, হ্যাঁ। কেন?
বিলি ওনিল

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

5
কোনও নোডের বাচ্চাদের একজন যদি পূর্বপুরুষের কাছে ফিরে আসে তবে একটি বিজ্ঞপ্তিযুক্ত রেফারেন্স হবে।
ম্যাট ওলেনিক

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

9

ভালো হয় চিকেন বা ডিম সমস্যা।

এমন অনেকগুলি ক্ষেত্রে রয়েছে যে ক্ষেত্রে বিজ্ঞপ্তি রেফারেন্স অনিবার্য এবং দরকারী তবে উদাহরণস্বরূপ, নিম্নলিখিত ক্ষেত্রে এটি কাজ করে না:

প্রকল্প এ বি এবং বি প্রকল্পের উপর নির্ভর করে এ এর ​​উপর নির্ভর করে একটি বি এর জন্য বি সংকলন করা দরকার যা এ এর ​​আগে বি সংকলন করা প্রয়োজন যার জন্য খ এর আগে সংকলন করা দরকার ...


6

যদিও আমি এখানে বেশিরভাগ মন্তব্যে একমত হয়েছি তবে আমি "পিতামাতা" / "সন্তানের" বিজ্ঞপ্তি রেফারেন্সের জন্য একটি বিশেষ মামলা করতে চাই।

কোনও শ্রেণীর প্রায়শই তার পিতামাতা বা মালিকানাধীন শ্রেণি সম্পর্কে কিছু জানা প্রয়োজন, সম্ভবত ডিফল্ট আচরণ, ডেটা যে ফাইল থেকে এসেছে সেটির নাম, কলামটি নির্বাচিত এসকিএল বিবৃতি, বা, লগ ফাইলের অবস্থান ইত্যাদি etc.

আপনি একটি ক্লাসযুক্ত একটি বিজ্ঞপ্তি রেফারেন্স ছাড়াই এটি করতে পারেন যাতে আগে "পিতামাতা" যা এখন ভাইবোন, কিন্তু এটি করার জন্য বিদ্যমান কোডটিকে পুনরায় ফ্যাক্টর করা সবসময় সম্ভব নয়।

অন্য বিকল্পটি হ'ল কোনও শিশু তার নির্মাতার কাছে প্রয়োজনীয় সমস্ত ডেটা পাস করা, যা শেষ পর্যন্ত কেবল ভয়ঙ্কর হয়ে ওঠে being


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

5

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


4

আমি এই প্রশ্নটি মডেলিং দৃষ্টিকোণ থেকে নেব।

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

বিশেষত বিজ্ঞপ্তি সংক্রান্ত রেফারেন্সের সাথে জিনিসটি হ'ল আমি এমন কোনও মামলা দেখিনি যেগুলি সত্যিকারের রেফারেন্স ছাড়া কেবল তাদের প্রয়োজন হবে self আপনি যদি গাছ বা গ্রাফকে মডেল করেন তবে আপনার এটি দরকার এবং এটি পুরোপুরি ঠিক আছে কারণ কোড-মানের দৃষ্টিকোণ থেকে স্ব-রেফারেন্স নিরীহ (কোনও নির্ভরতা যুক্ত করা হয়নি)।

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

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

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

সুতরাং, আমি কোনও বিজ্ঞপ্তিযুক্ত রেফারেন্স আনতে অনুমতি দেব না যতক্ষণ না এটি সম্পূর্ণরূপে পরিষ্কার না হয় যে এটি আমি যে মডেলিং করছি তার থেকে আসে।

(দ্রষ্টব্য: এটি ডাটাবেস ডিজাইনের প্রতি সামান্য পক্ষপাতদুষ্ট তবে আমি বাজি ধরব এটি অন্যান্য ক্ষেত্রেও এটি মোটামুটি প্রযোজ্য)


2

আমি অন্য প্রশ্নের সাথে এই প্রশ্নের উত্তর দেব:

আপনি যে পরিস্থিতিটি তৈরি করতে চাইছেন তার জন্য একটি বিজ্ঞপ্তি রেফারেন্স মডেল রাখা সেরা মডেল আপনি আমাকে কী পরিস্থিতি দিতে পারেন ?

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


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

1

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


1

একটি বৃত্তাকার রেফারেন্স কনস্ট্রাক্ট সমস্যাযুক্ত, কেবল একটি ডিজাইনের দৃষ্টিকোণ থেকে নয়, পাশাপাশি স্ট্যান্ডপয়েন্টটি ধরার ক্ষেত্রেও একটি ত্রুটি থেকে।

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

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

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


1

কিছু আবর্জনা সংগ্রহকারীদের সেগুলি পরিষ্কার করতে সমস্যা হয়, কারণ প্রতিটি বস্তু একে অপরের দ্বারা রেফারেন্স করা হচ্ছে।

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


11
হুম .. যে কোনও আবর্জনা সংগ্রহকারী এর দ্বারা ছিন্ন হয়ে পড়েছে সে সত্যিকারের আবর্জনা সংগ্রহকারী নয়।
বিলি ওনিল

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

4
বিভিন্ন ধরণের আবর্জনা সংগ্রহকারীদের অসুবিধাগুলি ব্যাখ্যা করে যারা sct.ethz.ch/teach/ws2005/semspecver/slides/takano.pdf দেখুন - যদি চিহ্ন ও ঝাড়ু নেয় এবং দীর্ঘ বিরতির সময়গুলি হ্রাস করতে এটি অনুকূলকরণ শুরু করে (যেমন প্রজন্ম তৈরি করা) , আপনার বিজ্ঞপ্তি কাঠামোতে সমস্যা হতে শুরু করে (যখন বৃত্তাকার বস্তুগুলি বিভিন্ন প্রজন্মের মধ্যে থাকে)। আপনি যদি রেফারেন্স গণনা করেন এবং বিজ্ঞপ্তি রেফারেন্স সমস্যার সমাধান শুরু করেন, আপনি দীর্ঘ বিরতির সময়গুলি চিহ্নিত করে চিহ্ন এবং সুইপের বৈশিষ্ট্য।
কেন ব্লুম

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

1
উদ্দেশ্য-সিতে, বিজ্ঞপ্তিগুলি রেফারেন্সগুলি তৈরি করে যাতে রেফার করার সময় রেফ গণনা শূন্য না হয় যা আবর্জনা সংগ্রহকারীকে ট্রিপ করে।
ডেক্সটারডাব্লু

-2

আমার মতে সীমাবদ্ধ রেফারেন্স থাকা প্রোগ্রামের নকশাটিকে সহজ করে তোলে তবে আমরা সবাই জানি যে কিছু প্রোগ্রামিং ল্যাঙ্গুয়েজ কিছু প্রসঙ্গে তাদের সমর্থন সমর্থন করে না।

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

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

আমি বলব যে এটি সরঞ্জামগুলির একটি সমস্যা যা নীতিকে নিয়ে সমস্যা নয়।


একটি বাক্য মতামত যুক্ত করা পোস্টে উল্লেখযোগ্যভাবে অবদান রাখে না বা উত্তরটি ব্যাখ্যা করে না। আপনি এই বিস্তারিত বলতে পারেন?

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

আমি খুঁজে পেয়েছি যে এটি আপনার প্রোগ্রামটি চালিয়ে যাওয়া এবং চালনা করা সহজ করে তোলে তবে সাধারনত এটি বলার ফলে সফ্টওয়্যারটি বজায় রাখা আরও কঠিন হয়ে যায় কারণ আপনি দেখতে পান যে তুচ্ছ পরিবর্তনগুলি ক্যাসকেডিংয়ের প্রভাব ফেলে। এ বি তে কল দেয় যা ক কে আবার কল করে যা বি কে কল দেয় ... আমি প্রকৃতির প্রকৃতির পরিবর্তনের প্রভাবগুলি বুঝতে সত্যই শক্তিশালী হয়েছি, বিশেষত যখন এ এবং বি বহুরূপী হয়।
ড্যাশ-টম-ব্যাং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.