অন্য জিনিসটি কখনই পরিবর্তিত হয় না তা যদি একটি জিনিস অন্যটির সাথে কতটা দৃly়তার সাথে মিলিত হয় তা বিবেচ্য নয়। আমি যুগলবর্ষের সবচেয়ে স্বল্পতম রূপটি অর্জনের চেষ্টা করে পরিবর্তনগুলি আরও সহজ করার চেয়ে পরিবর্তনের জন্য কিছু কারণ পরিবর্তনের পক্ষে কম স্থিতিশীলতা অর্জনের দিকে মনোনিবেশ করা আরও সাধারণভাবে ফলদায়ক বলে মনে করেছি।
ডিকোপলিং আমি খুব কার্যকরী বলে মনে করেছি যেখানে প্যাকেজগুলি ডিকুয়াল করার জন্য আমি মাঝেমধ্যে মাঝারি কোডের সদৃশকে পছন্দ করি। একটি মৌলিক উদাহরণ হিসাবে, আমার একটি ইমেজ লাইব্রেরি বাস্তবায়নের জন্য আমার গণিতের লাইব্রেরি ব্যবহার করার পছন্দ ছিল। আমি কিছু প্রাথমিক গণিতের ফাংশনগুলি অনুলিপি করলাম না যা অনুলিপি করার জন্য তুচ্ছ ছিল।
এখন আমার চিত্র পাঠাগারটি এমনভাবে গণিত গ্রন্থাগার থেকে সম্পূর্ণ স্বতন্ত্র, যেখানে আমি আমার গণিতের লাইবগুলিতে কোনও ধরণের পরিবর্তনই করি না কেন, এটি চিত্র গ্রন্থাগারকে প্রভাবিত করবে না। এটি স্থিতিশীলতা প্রথম এবং সর্বাগ্রে রাখে। চিত্রের পাঠাগারটি এখন আরও স্থিতিশীল, যেমন পরিবর্তনের খুব কম কারণ হ'ল, যেহেতু এটি পরিবর্তিত হতে পারে এমন অন্যান্য লাইব্রেরি থেকে প্রত্যাশিত (সি স্ট্যান্ডার্ড লাইব্রেরি ছাড়াও, আশা করি কখনই পরিবর্তন করা উচিত নয়)। বোনাস হিসাবে এটি স্থাপন করাও সহজ যখন এটি কেবল একটি স্ট্যান্ডলোন লাইব্রেরি যাতে এটি তৈরি করতে এবং এটি ব্যবহার করার জন্য অন্যান্য গুচ্ছের একগুচ্ছ মধ্যে টানা দরকার হয় না।
স্থিরতা আমার পক্ষে খুব সহায়ক helpful আমি ভাল-পরীক্ষিত কোডের একটি সংগ্রহ তৈরি করতে চাই যা ভবিষ্যতে পরিবর্তিত হওয়ার কম এবং কম কারণ রয়েছে। এটি পাইপের স্বপ্ন নয়; আমার কাছে সি কোড রয়েছে আমি 80 এর দশক থেকে আবার ব্যবহার করে যাচ্ছি যা এর পর থেকে মোটেও পরিবর্তন হয়নি। এটি পিক্সেল-ওরিয়েন্টেড এবং জ্যামিতি সম্পর্কিত কোডের মতো স্বল্প মাত্রার স্টাফ যেমন আমার উচ্চ-স্তরের স্টাফ অনেকগুলি অপ্রচলিত হয়ে উঠেছে, তবে এটি এমন কিছু যা এখনও প্রচুর পরিমাণে সহায়তা করে। এর প্রায় সর্বদা অর্থ একটি গ্রন্থাগার যা কম এবং কম কিছুতে নির্ভর করে, যদি বাহ্যিক কিছু না হয়। যদি আপনার সফ্টওয়্যারটি স্থিতিশীল ভিত্তির উপর নির্ভর করে যে পরিবর্তনের কয়েকটি বা কোনও কারণ খুঁজে পায় না তখন নির্ভরযোগ্যতা বৃদ্ধি পায়। স্থির অংশগুলির তুলনায় চলমান অংশগুলি সংখ্যায় অনেক বেশি হলেও বাস্তবে কিছুটা চলমান অংশগুলি সত্যিই দুর্দান্ত।
আলগা কাপলিং একই শিরাতে থাকে তবে আমি প্রায়শই দেখতে পাই যে কোনও মিলনের তুলনায় আলগা মিলনটি এত কম স্থিতিশীল। যতক্ষণ না আপনি অনেক বেশি উচ্চতর ইন্টারফেস ডিজাইনার এবং ক্লায়েন্টদের সাথে কাজ করছেন যা আমি কখনও কাজ করেছি তার চেয়ে তাদের মন পরিবর্তন করে না, খাঁটি ইন্টারফেসগুলি প্রায়শই এমন পদ্ধতিতে পরিবর্তনের কারণগুলি খুঁজে পায় যা এখনও পুরো কোড জুড়েই ক্যাসকেডিং ভাঙ্গন সৃষ্টি করে। এই ধারণাটি যে কংক্রিটের চেয়ে বিমূর্তের দিকে নির্ভরতা নির্দেশ করে স্থিতিশীলতা অর্জন করা যেতে পারে কেবল তখনই কার্যকর যদি ইন্টারফেস ডিজাইনটি প্রয়োগের চেয়ে প্রায় প্রথমবারের মতো পেতে সহজ হয়। আমি প্রায়শই এটি বিপরীত দেখতে পাই যেখানে কোনও বিকাশকারী খুব ভাল তৈরি করেছেন, যদি চমত্কার না হয় তবে বাস্তবায়ন তাদের ডিজাইনের প্রয়োজনীয়তা বিবেচনা করে যা তারা ভেবেছিল যে তা পূরণ করা উচিত, কেবল ভবিষ্যতে এটি আবিষ্কার করার জন্য যে ডিজাইনের প্রয়োজনীয়তা সম্পূর্ণরূপে পরিবর্তিত হয়।
সুতরাং আমি স্থিতিশীলতার পক্ষে এবং সম্পূর্ণ ডিকপলিংয়ের পক্ষে পছন্দ করি যাতে আমি কমপক্ষে আত্মবিশ্বাসের সাথে বলতে পারি, "এই ছোট্ট বিচ্ছিন্ন পাঠাগারটি যা বছরের পর বছর ধরে ব্যবহৃত হয়েছে এবং পুরোপুরি পরীক্ষার দ্বারা সুরক্ষিত হয়েছে তাতে বিশৃঙ্খলা বাহিরের বিশ্বে কী ঘটে যায় তা পরিবর্তনের প্রয়োজনীয়তার প্রায় কোনও সম্ভাবনা নেই has । " এটি বাইরের জন্য কী ধরণের ডিজাইনের পরিবর্তনের জন্য ডাকা হচ্ছে তা বিবেচনা না করেই আমাকে কিছুটা স্বাচ্ছন্দ্য দেওয়া হয়।
সংযোজন এবং স্থিতিশীলতা, ইসিএস উদাহরণ
আমি সত্তা-উপাদান সিস্টেমগুলিকেও পছন্দ করি এবং তারা প্রচুর আঁটসাঁট মিলনের প্রচলন করে কারণ উপাদানটি নির্ভরতা অনুসারে সিস্টেমগুলি সমস্ত অ্যাক্সেস করে এবং কাঁচা ডেটা সরাসরি পরিচালনা করে, যেমন:
উপাদানগুলি কেবল কাঁচা ডেটা প্রকাশ করে তাই এখানে সমস্ত নির্ভরতা বেশ শক্ত। নির্ভরতা বিমূর্ততার দিকে প্রবাহিত হয় না, তারা কাঁচা ডেটার দিকে প্রবাহিত হয় যার অর্থ প্রতিটি সিস্টেমের প্রতিটি ধরণের উপাদান যা তারা অ্যাক্সেসের জন্য অনুরোধ করে তার সর্বাধিক পরিমাণ জ্ঞান সম্ভব। সমস্ত সিস্টেমে অ্যাক্সেস করা এবং কাঁচা ডেটা দিয়ে ছত্রভঙ্গ করার সাথে উপাদানগুলির কোনও কার্যকারিতা নেই। তবে এটি এতটা সমতল হওয়ার কারণে এটির মতো কোনও সিস্টেম সম্পর্কে যুক্তি করা খুব সহজ। যদি কোনও টেক্সচার ভ্রূণু প্রকাশিত হয়, তবে আপনি এই সিস্টেমের সাথে সাথেই তা জানতে পারবেন যে কেবল রেন্ডারিং এবং পেইন্টিং সিস্টেমগুলি টেক্সচার উপাদানগুলিতে অ্যাক্সেস করে এবং আপনি সম্ভবত রেন্ডারিং সিস্টেমটিকে খুব শীঘ্রই বাতিল করতে পারেন যেহেতু এটি কেবল টেক্সচার থেকে ধারণাগতভাবে পড়ে।
ইতিমধ্যে একটি আলগা কাপল বিকল্প এটি হতে পারে:
... সমস্ত নির্ভরতা বিমূর্ত ফাংশনগুলির দিকে প্রবাহিত হয়, ডেটা নয় এবং সেই চিত্রের প্রতিটি একক জিনিস একটি নিজস্ব ইন্টারফেস এবং নিজস্ব কার্যকারিতা প্রকাশ করে। এখানে সমস্ত নির্ভরতা খুব আলগা হতে পারে। অবজেক্টগুলি এমনকি একে অপরের উপর সরাসরি নির্ভর করে না এবং খাঁটি ইন্টারফেসের মাধ্যমে একে অপরের সাথে যোগাযোগ করে। তবুও এই সিস্টেমটি সম্পর্কে তর্ক করা খুব কঠিন, বিশেষত যদি ইন্টারঅ্যাকশনগুলির জটিল জটিলতায় কিছু ভুল হয়ে যায়। ইসিএসের চেয়ে আরও বেশি ইন্টারঅ্যাকশন (আরও কাপলিং, যদিও আলগা হলেও) থাকবে কারণ সত্তা একে অপরের বিমূর্ত পাবলিক ইন্টারফেস সম্পর্কে জানলেও, সংস্থাগুলি তাদের সংহত উপাদানগুলি সম্পর্কে জানতে হবে।
এছাড়াও যদি কোনও কিছুর ডিজাইনের পরিবর্তন হয় তবে আপনি ইসিএসের চেয়ে বেশি ক্যাসকেডিং বিরতি পান এবং ডিজাইন পরিবর্তনের আরও কারণ এবং প্রলোভন থাকবে কারণ প্রতিটি জিনিসই একটি সুন্দর অবজেক্ট-ভিত্তিক ইন্টারফেস এবং বিমূর্ততা সরবরাহ করার চেষ্টা করছে। এটি অবিলম্বে এই ধারণাটি নিয়ে আসে যে প্রতিটি ছোট্ট জিনিস ডিজাইনের প্রতিবন্ধকতা এবং সীমাবদ্ধতা আরোপ করার চেষ্টা করবে এবং সেই সীমাবদ্ধতাগুলি প্রায়শই ওয়ারেন্টের ডিজাইন পরিবর্তিত হয়। কার্যকারিতা অনেক বেশি সীমাবদ্ধ এবং কাঁচা ডেটার চেয়ে অনেক বেশি নকশা অনুমান করতে হয়।
উপরের ধরণের "ফ্ল্যাট" ইসিএস সিস্টেমটি অনুশীলনে আমি খুঁজে পেয়েছি যে এতটা শিথিল-যুগল সিস্টেমগুলির চেয়েও একটি জটিল iderিলে dependালা নির্ভরতার জটিল স্পাইডার ওয়েভ যুক্ত সিস্টেমগুলির চেয়ে যুক্তিযুক্ত হওয়া এত সহজ এবং আমার কাছে আমার কাছে খুব কম কারণ খুঁজে পেয়েছি I ইসিএস সংস্করণটির জন্য যে কোনও বিদ্যমান উপাদানগুলি পরিবর্তন করতে হবে কারণ সিস্টেমগুলির কাজ করার জন্য প্রয়োজনীয় উপাত্ত সরবরাহ করা ব্যতীত উপাদানগুলির কোনও দায়বদ্ধতা নেই। খাঁটি IMotion
ইন্টারফেস এবং কংক্রিট মোশন অবজেক্টটি ডিজাইনের অসুবিধার সাথে তুলনা করুন যে ইন্টারফেসটি কার্যকর করে যা অত্যাধুনিক কার্যকারিতা সরবরাহ করে যখন প্রাইভেট ডেটার উপর আক্রমণকারীগুলি বজায় রাখার চেষ্টা করে। একটি গতি উপাদান যা কেবল সমস্যার সমাধানের জন্য প্রাসঙ্গিক কাঁচা ডেটা সরবরাহ করতে পারে এবং এতে বিরক্ত হয় না কার্যকারিতা।
কার্যকারিতা ডেটা-র চেয়ে সঠিকভাবে পাওয়া খুব শক্ত, তাই আমি মনে করি এটি প্রায়শই ডেটার প্রতি নির্ভরতার প্রবাহকে নির্দেশ করা ভাল to সর্বোপরি, কয়টি ভেক্টর / ম্যাট্রিক্স লাইব্রেরি আছে? তাদের মধ্যে কয়টি সঠিক ডেটা উপস্থাপনা ব্যবহার করে এবং কার্যকারিতাতে কেবল সূক্ষ্মভাবে পৃথক হয়? অগণিত, এবং এখনও আমাদের অভিন্ন তথ্য উপস্থাপনা সত্ত্বেও এখনও অনেক আছে কারণ আমরা কার্যকারিতাতে সূক্ষ্ম পার্থক্য চাই। সেখানে কতটি চিত্র গ্রন্থাগার রয়েছে? এর মধ্যে কতটি আলাদা এবং অনন্য উপায়ে পিক্সেল উপস্থাপন করে? খুব কমই, এবং আবারও যে কার্যকারিতাটি দেখানো অনেক পরিস্থিতিতে অস্থির এবং ডিজাইনের পরিবর্তনের দিকে ঝুঁকির মধ্যে রয়েছে অনেক পরিস্থিতিতে। অবশ্যই কোনও সময়ে আমাদের কার্যকারিতা প্রয়োজন, তবে আপনি এমন সিস্টেমগুলি ডিজাইন করতে পারেন যেখানে বেশিরভাগ নির্ভরশীলতা ডেটার দিকে প্রবাহিত হয়, এবং সাধারণভাবে বিমূর্ততা বা কার্যকারিতার দিকে নয়। এই ধরণের মিলনের উপরে স্থিতিশীলতার অগ্রাধিকার দেওয়া হবে।
সর্বাধিক স্থিতিশীল ফাংশন যা আমি লিখেছি (80 এর দশকের শেষের দিক থেকে আমি এগুলি ব্যবহার না করে এবং পুনরায় ব্যবহার করে আসছি) সেগুলি কাঁচা ডেটার উপর নির্ভর করে যেমন জ্যামিতি ফাংশন যা কেবল একটি অ্যারে গ্রহণ করেছিল ভাসে এবং পূর্ণসংখ্যার না বেশী যে একটি জটিল উপর নির্ভর করে Mesh
বস্তু বা IMesh
ইন্টারফেস, বা ভেক্টর / ম্যাট্রিক্স গুণ মাত্র উপর নির্ভরশীল যা float[]
বা double[]
এক যে উপর নির্ভরশীল, FancyMatrixObjectWhichWillRequireDesignChangesNextYearAndDeprecateWhatWeUse
।