মার্টিনের স্থায়িত্ব মেট্রিক এবং "স্থিতিশীলতা" দ্বারা তার অর্থ কী তা মনে রাখবেন:
Instability = Ce / (Ca+Ce)
বা:
Instability = Outgoing / (Incoming+Outgoing)
অর্থাৎ, কোনও প্যাকেজ সম্পূর্ণরূপে অস্থির হিসাবে বিবেচিত হয় যদি এর সমস্ত নির্ভরতা বাইরে চলে যায়: এটি অন্যান্য জিনিস ব্যবহার করে, তবে কিছুই এটি ব্যবহার করে না। সেক্ষেত্রে এটি কেবল সেই জিনিসটিকেই কংক্রিটের পক্ষে বোঝা যায়। এটি পরিবর্তন করার সহজতম ধরণের কোড হতে চলেছে যেহেতু অন্য কোনও কিছুই এটি ব্যবহার করে না, এবং সেইজন্য কোডটি সংশোধন করা হলে অন্য কোনও কিছুই ভঙ্গ করতে পারে না।
এদিকে যখন আপনার কাছে এক বা একাধিক জিনিস ব্যবহৃত প্যাকেজটির সাথে সম্পূর্ণ "স্থিতিশীলতার" বিপরীত দৃশ্য রয়েছে তবে এটি সফ্টওয়্যার দ্বারা ব্যবহৃত কোনও কেন্দ্রীয় প্যাকেজের মতো নিজেরাই কিছু ব্যবহার করে না, তখনই মার্টিন বলে যে এই জিনিসটি হওয়া উচিত বিমূর্ত। এটি এসওএলআই (ডি) এর ডিআইপি অংশ দ্বারাও দৃ .়তর হয়, নির্ভরতা বিপরীতমুখী মূলনীতি, যা মূলত বলে দেয় যে নির্ভরতাগুলি অভিন্নভাবে নিম্ন এবং উচ্চ স্তরের উভয় কোডের জন্য বিমূর্তির দিকে প্রবাহিত হওয়া উচিত।
এটি হ'ল নির্ভরতা সমানভাবে "স্থিতিশীলতার" দিকে প্রবাহিত হওয়া উচিত এবং আরও স্পষ্টতই, নির্ভরতাগুলি বহির্গামী নির্ভরতাগুলির চেয়ে বেশি আগত নির্ভরতাগুলির সাথে প্যাকেজগুলির দিকে প্রবাহিত হওয়া উচিত এবং ততোধিক নির্ভরতা বিমূর্ততার দিকে প্রবাহিত হওয়া উচিত। এর পেছনের যুক্তির সংক্ষিপ্তসারটি হ'ল বিমূর্ততাগুলি সেই বিমূর্ত ইন্টারফেসের আগত নির্ভরতাগুলি না ভেঙে পরিবর্তনের জন্য ইন্টারফেস প্রয়োগকারী কংক্রিট অংশগুলির জন্য নমনীয়তার ডিগ্রী সরবরাহ করে, একটির জন্য আরেকটি উপপ্রকারের বিকল্পের জন্য শ্বাসকষ্ট সরবরাহ করে।
বিমূর্ততা উপর নির্ভর করে কোন উল্লেখযোগ্য অসুবিধা আছে?
ভাল, আমি আসলে এখানে আমার ডোমেনের জন্য মার্টিনের সাথে একমত নই, এবং এখানে আমাকে "স্থিতিশীলতা" এর একটি নতুন সংজ্ঞা চালু করতে হবে, "পরিবর্তনের কারণগুলির অভাব"। সেক্ষেত্রে আমি বলব নির্ভরতা স্থিতিশীলতার দিকে প্রবাহিত হওয়া উচিত, তবে বিমূর্ত ইন্টারফেসগুলি যদি অস্ট্রেলিয় ইন্টারফেসগুলি অস্থির করে তোলে তবে (মার্টিনের নয় বরং বার বার পরিবর্তিত হওয়ার ঝুঁকিতে "" অস্থির "আমার সংজ্ঞা দ্বারা) সহায়তা করবে না। যদি বিকাশকারীরা বিমূর্তিগুলি সঠিকভাবে পেতে না পারেন এবং ক্লায়েন্টরা বারবার তাদের মন পরিবর্তন করে এমন উপায়ে যে সফ্টওয়্যারটিকে অসম্পূর্ণ বা অকার্যকর করতে মডেল করার চেষ্টা করে তবে আমরা ক্যাসকেডিং নির্ভরতা-বিরতি পরিবর্তনের বিরুদ্ধে সিস্টেমকে রক্ষা করতে অ্যাবস্ট্রাক্ট ইন্টারফেসগুলির বর্ধিত নমনীয়তা থেকে আর উপকৃত হব না । আমার ব্যক্তিগত ক্ষেত্রে আমি ইসি ইঞ্জিনগুলি পেয়েছি যেমন এএএ গেমসে পাওয়া যায়,সর্বাধিক কংক্রিট : কাঁচা ডেটার দিকে, তবে এই জাতীয় ডেটা অত্যন্ত স্থিতিশীল (যেমনটি "কখনও পরিবর্তন করার প্রয়োজন হয় না")। আমি প্রায়শই ভবিষ্যতের পরিবর্তনগুলি এসই সিদ্ধান্তের দিকনির্দেশনায় মোট দম্পতিগুলির প্রতি অনুপাতের তুলনায় আরও কার্যকর মেট্রিক হিসাবে প্রয়োজনীয় কিছু পাওয়ার সম্ভাবনা পেয়েছি।
সুতরাং আমি ডিআইপিকে কিছুটা পরিবর্তন করব এবং কেবলই বলব, "নির্ভরতাগুলি এমন উপাদানগুলির দিকে প্রবাহিত হওয়া উচিত যেখানে আরও পরিবর্তনগুলির প্রয়োজনীয়তার সবচেয়ে কম সম্ভাবনা থাকে", এই উপাদানগুলি বিমূর্ত ইন্টারফেস বা কাঁচা ডেটা কিনা তা নির্বিশেষে। আমার কাছে যা গুরুত্বপূর্ণ তা হ'ল তাদের সম্ভবত সরাসরি নকশা-ব্রেকিং পরিবর্তনের প্রয়োজন হতে পারে changes বিমূর্ততা স্থিতিশীলতার এই প্রসঙ্গে কেবল তখনই কার্যকর যদি কোনও কিছু বিমূর্ত হয়ে সেই সম্ভাবনা হ্রাস করে।
অনেকগুলি প্রসঙ্গে যা শালীন প্রকৌশলী এবং ক্লায়েন্টদের ক্ষেত্রে ঘটতে পারে যারা সফ্টওয়্যারটির সামনে এবং নকশাকে স্থিতিশীল (যেমন, অপরিবর্তনীয়) বিমূর্ততাগুলির প্রয়োজনীয়তার প্রত্যাশা করে থাকে, যখন এই বিমূর্ততাগুলি তাদের সমস্ত শ্বাসকষ্ট প্রস্তাব দেয় যেখানে তাদের কংক্রিটের বাস্তবায়নগুলি পরিবর্তন করতে হবে। তবে কিছু ডোমেনে বিমূর্ততাগুলি অস্থির এবং অপর্যাপ্ত হওয়ার প্রবণতা হতে পারে, অন্যদিকে ইঞ্জিনের প্রয়োজনীয় ডেটা আগে থেকেই স্থির করে নেওয়া এবং প্রত্যাশা করা আরও সহজ হতে পারে। সুতরাং এই ক্ষেত্রে, এটি বিমূর্ততার চেয়ে ডেটাগুলির দিকে প্রবাহের নির্ভরতাগুলির জন্য একটি রক্ষণাবেক্ষণের দৃষ্টিভঙ্গি (সিস্টেম পরিবর্তন এবং প্রসারিতকরণের সহজতা) থেকে আসলে বেশি উপকারী হতে পারে। একটি ইসিএসে, সর্বাধিক অস্থির অংশ (যেমন বেশিরভাগ অংশ পরিবর্তিত হয়) সাধারণত সিস্টেমে থাকা কার্যকারিতা (PhysicsSystem
, উদাহরণস্বরূপ), যখন সর্বাধিক স্থিতিশীল অংশগুলি (কমপক্ষে পরিবর্তিত হওয়ার সম্ভাবনা রয়েছে) হ'ল উপাদানগুলি যা কেবলমাত্র কাঁচা ডেটা ( MotionComponent
যেমন, যেমন) ব্যবহার করে যা সমস্ত সিস্টেম ব্যবহার করে।