সংযুক্তি এবং সংহতি সম্পর্কিত অভিব্যক্তিমূলক সিস্টেমগুলিতে কীভাবে ডেমিটারের আইন প্রয়োগ হয়? [বন্ধ]


15

দম্পতির আইন কীভাবে সংযুক্তি এবং সংহতির সাথে অবজেক্ট-ভিত্তিক সিস্টেমগুলিতে প্রয়োগ হয়?

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


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

উত্তর:


9

মতে এমারসন Macedo Demeter আইন মার্কিন যুক্তরাষ্ট্র নিম্নলিখিত:

  • প্রতিটি ইউনিটের অন্যান্য ইউনিট সম্পর্কে কেবল সীমিত জ্ঞান থাকা উচিত: কেবলমাত্র ইউনিট বর্তমান ইউনিটের সাথে "ঘনিষ্ঠভাবে" সম্পর্কিত।
  • প্রতিটি ইউনিট শুধুমাত্র তার বন্ধুদের সাথে কথা বলা উচিত; অপরিচিতদের সাথে কথা বলবেন না
  • কেবল আপনার নিকটবর্তী বন্ধুদের সাথে কথা বলুন।

এটি একত্রে (বা অবজেক্টস) অনেকটা উপরের মতো বলে মনে করা হওয়ায় এটি কম সংযোগের নীতির সাথে সরাসরি মিলিত হয় :

  • একে অপরের সাথে শক্তভাবে মিলিত হবেন না। কেবল নিকটতমরা হলেন।
  • প্রত্যেকের কেবলমাত্র তার সহযোগীদের সাথে কথা বলা উচিত, সহযোগীর সহযোগীদের সাথে নয়
  • কেবল তাত্ক্ষণিক সহযোগী অবজেক্টের সাথে কথা বলুন

কাপলিংয়ের সর্বনিম্ন ফর্মগুলির মধ্যে একটি হ'ল মেসেজ পাসিং, অর্থাত প্যারামিটারগুলির সাথে মেথড কলগুলির মাধ্যমে অবজেক্টের মধ্যে ডেটা ভাগ করা হয়।

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


8

সংমিশ্রণ, সরল

যখন কোনও বস্তু অন্য কোনও অবজেক্টের কোনও পদ্ধতি, সম্পত্তি ইত্যাদি কল করে তখন আমরা বলি যে বস্তুগুলি একত্রিত। আমরা এটিকে কাপলিং বলি কারণ এখন কলি তার নিজস্ব পদ্ধতি / প্রপস সম্পর্কে কোনও পরিবর্তন করতে পারে না । ব্রেকিং w.out আহ্বানকারী

সুতরাং, আরও সংযুক্ত - পদ্ধতি, প্রপস। - কলি কোডটি ব্যবহার করা সমস্ত কোড ভঙ্গ না করেই পরিবর্তন করা শক্ত ।

দম্পতি বিবেচনা

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

সর্বাধিক জ্ঞানের ফলে পাগল সংযোগ ঘটে

এখানে আমাদের একটি Employeeরয়েছে Personযার একটি 'ঠিকানা' রয়েছে

public class Employee {
    public Person me = new Person();
}
public class Person {
    public Address home = new Address();
}
public class Address {
    public string street;
} 

রাস্তায় পেতে আমি কল করতে হবে: myEmployee.me.home.street। এটি সর্বনিম্ন জ্ঞানের নীতির বিপরীতে 180 ডিগ্রি। আমাকে করতে হবে জানি অভ্যন্তরীণ, যৌগিক গঠন, প্রায় Employee, Personএবং Addressক্লাস।

এই ত্রুটিযুক্ত বর্গ নকশা আমাকে সেই সমস্ত শ্রেণীর সম্পর্কে জানতে বাধ্য করে এবং এইভাবে myEmployee.me.home.streetআমাকে (কলার অবজেক্ট) 3 ক্লাসের কম নয় - কেবলমাত্র একটি একক সম্পত্তি পাওয়ার জন্য!

সর্বনিম্ন জ্ঞান দিনটি বাঁচায়

আমি যদি কেবলমাত্র Employeeশ্রেণীর সাথে কথা বলি তবে আমি প্রতি সেবার জন্য ন্যূনতম নীতিটি প্রয়োগ করছি এবং এটি করে আমরা স্বয়ংক্রিয়ভাবে সংযোগটি কেবলমাত্র সেই শ্রেণিতে সীমাবদ্ধ করি এবং একই সাথে সংযুক্তিকে সেই এক শ্রেণিতে বিচ্ছিন্ন করে রাখি।

Employeeশ্রেণিতে সমস্ত প্রয়োজনীয় বৈশিষ্ট্য যুক্ত করে আমরা সংযুক্তকরণটি ঠিক করি।

এইভাবে

public class Employee {
    public Person me = new Person();
    public string street { return me.home.street; }
}

আমাকে কল করতে দেয়: myEmployee.street-

  1. আমি কেবল "জানি" Employee
  2. আমি কেবল একত্রিত হয়েছি Employee- এটির কাঠামো যত জটিল matter

সর্বত্র সর্বনিম্ন জ্ঞান

আমরা আমার এমপ্লয়িকে Personএবং এর থেকে ডিউপল করেছি Addressএবং আদর্শভাবে আমাদের এমন বৈশিষ্ট্যগুলির মধ্য দিয়ে পাস করার মাধ্যমে ন্যূনতম জ্ঞান প্রয়োগ করা উচিত যা Employeeকেবলমাত্র কথা বলে Personএবং Personকেবল তার সাথে কথা বলেAddress


1

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

লিমিটার অফ ডিমিটারের মান হ'ল এটি সংজ্ঞা অনুসারে সেট করা প্রতিক্রিয়া হ্রাস করে। কোনও অবজেক্টের পদ্ধতি কেবল নিজের একটি পদ্ধতি, যেকোন প্যারামিটার যা পদ্ধতিতে তৈরি করা হয়েছিল, এটি তৈরি করা কোনও বস্তুর পদ্ধতি এবং যে কোনও সরাসরি অনুষ্ঠিত বস্তুর পদ্ধতিতে কল করতে পারে। যেহেতু প্রতিক্রিয়া সেটটি ছোট, উচ্চ সংশ্লেষের সম্ভাবনা কম। যেহেতু মডিউল / পদ্ধতিটি কেবলমাত্র তাত্ক্ষণিক উপলব্ধ রেফারেন্সগুলি ব্যবহার করছে সেখানে উচ্চতর সংহতি রয়েছে।


1
অধ্যয়ন ( আঙ্কিলিল, এন এবং লাভাল, জে। লেগ্যাসি সফটওয়্যার পুনর্গঠন: একটি কংক্রিট কেস বিশ্লেষণ ) এও প্রমাণ করেছে যে সংযুক্তি হ্রাস করা এবং সংহতি বাড়ানো সবসময় উন্নত মানের ক্ষেত্রে আসে না। ক্ষতিকারক হিসাবে বিবেচিত একক, ছোট অধ্যয়নের ফলাফলের উপর নির্ভর করা।

0

এটি বেশ সহজ; বলুন, এ বি এবং বি এর উপর নির্ভর করে সি এর উপর নির্ভর করে ডেমিটারের আইন ব্যতীত আপনি এ তে বি এবং সি উভয়ই ব্যবহার করতে পারেন তবে এই আইনটি মেনে চললে, এ কেবল বি এর উপর নির্ভর করে, এটি সি এর উপর নির্ভর করতে পারে না

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

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