আমি কীভাবে বলতে পারি যে সফটওয়্যারটি একত্রে মিলিত হয়েছে?


16

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

সম্পাদনা:

যদি কারও আগ্রহী, এই নিবন্ধটি সহায়ক মনে হচ্ছে: কোড মানের অনুসারে: আঁট দম্পতি থেকে সাবধান! (আইবিএম)


1
থাম্বের বিধি: আপনি যদি একটি ছোট পরিবর্তন করেন, সঙ্কলন করুন এবং বাথরুমে যাওয়ার সময় পান তবে এটি খুব শক্ত করে মিলিত।
উরি

উত্তর:


15

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

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

আরেকটি ইঙ্গিতটি হ'ল যখন কোনও মডিউল ক্রমাগত কিছু নির্দিষ্ট ডেটা সেটের জন্য অন্য কোনও মডিউলকে কল করে। এটি আপনাকে প্রশ্ন করা উচিত যে ডেটা সেটটির প্রকৃতপক্ষে কার মালিক হওয়া উচিত। কেন এই প্রশ্নটিতে এই মডিউলটিকে সবসময় অন্য কোনও মডিউলের সাথে সম্পর্কিত ডেটা দেখার প্রয়োজন হয়?

তৃতীয় একটি উপায় বলতে গেলে নিজেকে জিজ্ঞাসা করা উচিত, "আমি কি এই মডিউলটি বাইরে টেনে এনে প্রতিস্থাপন করতে পারি এবং অন্য মডিউলগুলিতে পরিবর্তন না করেই এটিকে প্রতিস্থাপন করতে পারি।

এটি কোনওভাবেই একটি বিস্তৃত তালিকা নয়, তবে তারা সফ্টওয়্যার ডিজাইন করার সময় আমি নিজেকে জিজ্ঞাসা করা শীর্ষ তিনটি বিষয়।


2
দ্বিপক্ষীয় নির্ভরতার জন্য +1। তারা খাঁটি মন্দ মন্দ।
অ্যাডাম ক্রসল্যান্ড

16

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

অত্যন্ত মিলিত কোডের লক্ষণগুলিতে খুব বড় ইন্টারফেস অন্তর্ভুক্ত থাকে যা প্রয়োগের ব্যক্তিগত বিবরণ এবং "যে একে অপরের সম্পর্কে অনেক কিছু" বলে মনে হয় এমন অবজেক্ট সম্পর্কে লোকেরা জানতে দেয়। স্বয়ংক্রিয় বিশ্লেষণের জন্য এমন সরঞ্জাম রয়েছে যা পতাকা কোডটি দেবে যা আপনার জন্য দৃ .়ভাবে মিলিত দেখায়। এলোমেলো একটির জন্য http://www.scitools.com/features/metricsintro.php দেখুন । (এটি কতটা ভাল কাজ করে সে সম্পর্কে আমার কোনও ধারণা নেই It এটি কেবল গুগল অনুসন্ধানে বেশ উঁচুতে পরিণত হয়েছে))


7

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

এটি সর্বোত্তম নিরাময়ের একটিও, তবে আপনাকে সততা রাখতে কোডিংয়ের সময় (টিডিডির মতো) আপনাকে এটি করতে হবে।


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

6

আমার কাছে সুস্পষ্ট লক্ষণ হ'ল সবকিছু প্রকাশ্য।

অন্য চিহ্নটি হ'ল ডেমিটার লঙ্ঘনের আইন - অত্যধিক এটি S সোমোবজ.সোমপ্রপ omeসুমপ্রপ অ-সাবলীল ইন্টারফেসের উপর রেফারেন্স।

আমি একবার দেখেছি যে তখন থেকে আমি "পুতুলমাস্টার ক্লাস" ডাব করেছি যা ফ্লাইটিতে একটি ডেটা এন্ট্রি ফর্ম তৈরি করেছিল। এটিতে বেশ কয়েকটি অন্যান্য সফ্টওয়্যার ডিজাইনের লঙ্ঘন ছিল তাই অতিরিক্ত সংযুক্তি এটির উদ্বেগের মধ্যে সবচেয়ে কম ছিল।

যখন এটি তৈরি করা নিয়ন্ত্রণগুলি থেকে ডেটা পুনরুদ্ধার করে, এটি এরকম করে:

var control = activeDataEntryControl as CustomTextBox;
if (control != null)
   result = control.NestedTextBox.Text;

/* several other controls */

কি দারুন. আপনি এটি তৈরি করেছেন, এবং এটি শূন্য ??????
মাইকেল কে

এটি অন্য ধরণের হতে পারে। এটি একটি লুপ অনেকের মধ্যে একটি ছিল।
অস্টিন সালোনেন

5

লহরী প্রভাব

সমস্ত পরিবর্তন শক্তভাবে মিলিত মডিউলগুলির মাধ্যমে একটি রিপল প্রভাব ফেলে।

"ওপেন-ক্লোজড" নীতিটি লঙ্ঘন করা হয়েছে যে এটি সঠিকভাবে বন্ধ হয়নি এবং লিকগুলি পরিবর্তন করে।


রিপলের জন্য +1। দৃly়-দম্পতি বিদ্যা নিয়ে কাজ করা আমাকে রিপলের কাছে পৌঁছাতে চায়।
অ্যাডাম ক্রসল্যান্ড

@ অ্যাডাম ক্রসল্যান্ড: আমি লাফ্রয়েইগের প্রভাবটি খুব ভাল দামের কাজ করতে পারি নি । তবে থান্ডারবার্ড এফেক্টটি ভালই থাকতে পারে।
এস .লট

3

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

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

0

যদি আপনি কোনও বৈশিষ্ট্যটি কার্যকর করা অসম্ভব বলে মনে করেন কারণ কোনও নির্দিষ্ট দায়িত্ব কোথায় চলেছে আপনার কোনও ধারণা নেই, তবে আপনার সিস্টেমটি খুব শক্তভাবে মিলিত।


0

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


0

খুব সুন্দর সমস্ত কোড গন্ধ কিছু উপায়ে অতিমাত্রায় মিলিত ইঙ্গিত দেয়। আমি মনে করি যে গন্ধটি বেশিরভাগ মিলনকে নির্দেশ করবে যদিও এটি "অনুচিত ঘনিষ্ঠতা" (আমার প্রিয় গন্ধ) হতে পারে।

আমি মনে করি মাপার জন্য আরও একটি যুক্তিসঙ্গত পদ্ধতি হ'ল আপনার ইউএমএল চিত্রের লাইনগুলি গণনা করা। আপনার যদি N অবজেক্ট এবং তাদের মধ্যে N ^ N (বা আরও) লাইন থাকে তবে আপনার কোডটি বেশ সর্বাধিক মিলিত coup এন লাইনগুলি সম্ভবত আপনি পেতে পারেন হিসাবে ন্যূনতম হতে হবে।

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