কিন্তু ব্যবহারকারী ইন্টারফেস কিসের উপর ড্র () পদ্ধতিটি খুব বেশি নির্ভর করে না?
ব্যবহারিক ধরণের দৃষ্টিকোণ থেকে, আপনার সিস্টেমের কিছু কোডের Rectangle
ব্যবহারকারীর সমাপ্তির প্রয়োজনের মতো কোনও কিছু কীভাবে আঁকতে হবে তা জানতে হবে। এবং এটি এক পর্যায়ে সত্যই নিম্ন-স্তরের জিনিসগুলি পিক্সেলকে রাস্টারাইজ করা বা কনসোলে কিছু প্রদর্শন করার মতো উত্থিত হতে চলেছে।
একটি সংযোগের দৃষ্টিকোণ থেকে আমার কাছে প্রশ্নটি হ'ল এই ধরণের তথ্যের উপর কে / কী নির্ভর করবে এবং কী পরিমাণ বিশদে (কীভাবে বিমূর্ত, উদাহরণস্বরূপ)?
অঙ্কন / রেন্ডারিং সক্ষমতার বিমূর্তকরণ
কারণ যদি উচ্চ-স্তরের অঙ্কন কোডটি কেবলমাত্র খুব বিমূর্তের উপর নির্ভর করে, যে বিমূর্ততাটি আপনি টার্গেট করতে চান সেই সমস্ত প্ল্যাটফর্মে (কংক্রিট প্রয়োগের বিকল্পের মাধ্যমে) কাজ করতে সক্ষম হতে পারে। একটি অনুমোদিত উদাহরণ হিসাবে, কিছু খুব বিমূর্ত IDrawer
ইন্টারফেস প্লট আকারের মতো কাজ করতে কনসোল এবং জিইউআই উভয় API উভয়ই প্রয়োগ করতে সক্ষম হতে পারে (কনসোলের প্রয়োগটি ASCII আর্টের সাথে কিছু 80xN "চিত্রের মতো কনসোলকে চিকিত্সা করতে পারে)। অবশ্যই এটি একটি স্বতঃস্ফূর্ত উদাহরণ যেহেতু সাধারণত আপনি যা করতে চান তা কোনও চিত্র / ফ্রেম বাফারের মতো কনসোল আউটপুটকে চিকিত্সা করা হয় না; সাধারণত বেশিরভাগ ব্যবহারকারীর শেষের জন্য কনসোলগুলিতে আরও পাঠ্য-ভিত্তিক ইন্টারঅ্যাকশন প্রয়োজন।
আরেকটি বিবেচনা স্থির বিমূর্ততা ডিজাইন করা কতটা সহজ ? কারণ আপনি যদি টার্গেট করছেন এমন সবই আধুনিক জিইআইআই এপিআইগুলি মূল কাঠামোর লাইন, আয়তক্ষেত্র, পাথ, পাঠ্য, এই ধরণের জিনিসগুলি সাজানোর (যেমন আদিমগুলির একটি সীমিত সংখ্যার সাধারণ 2D রাস্টারাইজেশন) অ্যাস্ট্রাক্ট করতে সক্ষম হয় তবে তা সহজ হতে পারে Because , একটি বিমূর্ত ইন্টারফেস যা খুব সহজেই অল্প ব্যয় করে বিভিন্ন সাব টাইপের মাধ্যমে তাদের সবার জন্য সহজেই প্রয়োগ করা যেতে পারে। আপনি যদি এই ধরনের বিমূর্তিটি কার্যকরভাবে ডিজাইন করতে পারেন এবং এটি সমস্ত টার্গেট প্ল্যাটফর্মে প্রয়োগ করতে পারেন তবে আমি বলব এটি কোনও আকার বা জিইউআই নিয়ন্ত্রণের জন্য বা কোনওরকম কীভাবে নিজেকে কীভাবে আঁকতে হবে তা জানার জন্য এটি কিছুটা কম খারাপই হোক if বিমূর্ততা।
তবে বলুন যে আপনি প্লেস্টেশন পোর্টেবল, আইফোন, একটি এক্সবক্স ওয়ান এবং শক্তিশালী গেমিং পিসির মধ্যে পরিবর্তিত গোরীর বিবরণগুলি বিমূর্ত করার চেষ্টা করছেন, যখন আপনার প্রয়োজনগুলি প্রতিটিতে সবচেয়ে বেশি কাটা রিয়েল-টাইম থ্রিডি রেন্ডারিং / শেডিং কৌশলগুলি ব্যবহার করতে হবে । সেক্ষেত্রে অন্তর্নিহিত হার্ডওয়্যার ক্ষমতা এবং এপিআইগুলি এত বুনোভাবে পরিবর্তিত হয় যখন রেন্ডারিংয়ের বিশদটি বিমূর্ত করার জন্য একটি বিমূর্ত ইন্টারফেস নিয়ে আসার চেষ্টা করা প্রায় সময় নির্দিষ্টভাবে নকশাকরণ এবং পুনরায় ডিজাইনিংয়ের ফলস্বরূপ নিশ্চিত হয়, প্রত্যাশিত ডিজাইনের পরিবর্তনের উচ্চ সম্ভাবনা থাকে আবিষ্কার এবং তেমনিভাবে একটি সর্বনিম্ন-সাধারণ ডিনোমিনেটর সমাধান যা অন্তর্নিহিত হার্ডওয়্যারটির সম্পূর্ণ স্বাতন্ত্র্য এবং শক্তি কাজে লাগাতে ব্যর্থ।
নির্ভরশীলতা স্থিতিশীল, "সহজ" ডিজাইনগুলির দিকে প্রবাহিত করা
আমার ক্ষেত্রে আমি শেষ দৃশ্যে আছি। আমরা মূলত বিভিন্ন অন্তর্নিহিত ক্ষমতা এবং API গুলি সহ প্রচুর বিভিন্ন হার্ডওয়্যারকে টার্গেট করি এবং এগুলির সমস্ত শাসন করার জন্য একটি রেন্ডারিং / অঙ্কন বিমূর্ততা নিয়ে আসার চেষ্টা করা সীমান্তরেখা হতাশ (আমরা সম্ভবত বিশ্ব-বিখ্যাত হয়ে উঠতে পারি যে এটি কার্যকরভাবে কার্যকর হবে কারণ এটি একটি খেলা হবে শিল্পে পরিবর্তনকারী)। তাই শেষ জিনিস আমি আমার ক্ষেত্রে আপনি চান সাদৃশ্যমূলক মত হল Shape
বা Model
বা Particle Emitter
যে জানেন কিভাবে নিজেই আঁকা, যদিও তা প্রকাশ করা হয় যে, সবচেয়ে বিমূর্ত ভাবে সম্ভব সর্বোচ্চ স্তরের অঙ্কন এবং ...
... কারণ এই বিমূর্ততা সঠিকভাবে ডিজাইন করা খুব কঠিন, এবং যখন কোনও নকশাটি সঠিকভাবে পাওয়া শক্ত হয়, এবং সমস্ত কিছুই এর উপর নির্ভর করে, এটি সবচেয়ে ব্যয়বহুল কেন্দ্রীয় ডিজাইনের পরিবর্তনের জন্য একটি রেসিপি যা তার উপর নির্ভর করে সমস্ত কিছু ভাঙ্গা এবং ভেঙে দেয়। সুতরাং আপনি চান সর্বশেষ জিনিসটি হ'ল আপনার সিস্টেমে নির্ভরতাগুলি অ্যাবস্ট্রাক্ট ডিজাইনের দিকে প্রবাহিত হওয়া সঠিকভাবে পাওয়া খুব শক্ত (হস্তক্ষেপযুক্ত পরিবর্তন ছাড়াই স্থিতিশীল হওয়া খুব কঠিন)।
অসুবিধা সহজ উপর নির্ভর করে, সহজ নয় কঠিনের উপর নির্ভর করে
সুতরাং পরিবর্তে আমরা যা করি তা হ'ল নির্ভরতাগুলি এমন জিনিসগুলির দিকে প্রবাহিত করা যায় যা ডিজাইন করা সহজ। একটি বিমূর্ত "মডেল" ডিজাইন করা অনেক সহজ, যা কেবল বহুভুজ এবং উপকরণগুলির মতো জিনিসগুলি সংরক্ষণের উপর দৃষ্টি নিবদ্ধ করে এবং নকশাটিকে সঠিকভাবে পেতে একটি বিমূর্ত "রেন্ডারার" ডিজাইন করা যা কার্যকরভাবে প্রয়োগ করা যেতে পারে (বিকল্প পরিবর্তিত কংক্রিট সাব টাইপের মাধ্যমে) পরিষেবা অঙ্কনে to একটি পিসি থেকে পিএসপি হিসাবে পৃথক হিসাবে হার্ডওয়্যার জন্য অনুরূপ অনুরোধ।
তাই আমরা নির্ভরযোগ্যতাগুলি এমন জিনিসগুলি থেকে দূরে সরিয়ে ফেলি যা নকশা করা কঠিন। বিমূর্ত মডেলগুলি তৈরি করার পরিবর্তে তারা কীভাবে একটি বিমূর্ত রেন্ডারার ডিজাইনের প্রতি তাদের আঁকতে হয় তা জানেন এবং তারা যে সমস্ত ডিজাইনের পরিবর্তে প্রয়োগ করেন (এবং যদি সে নকশাটি পরিবর্তিত হয় তবে তাদের বাস্তবায়ন ভেঙে দেয়), তার পরিবর্তে আমাদের কাছে একটি বিমূর্ত রেন্ডার রয়েছে যা আমাদের দৃশ্যের প্রতিটি বিমূর্ত বস্তুকে কীভাবে আঁকতে জানে ( মডেল, কণা নির্গমনকারী, ইত্যাদি) এবং তাই আমরা তখন পিসিগুলির জন্য একটি ওপেনলএল রেন্ডারার RendererGl
সাব টাইপ RendererPsp
, পিএসপির জন্য আরেকটি, মোবাইল ফোনের জন্য অন্য ইত্যাদি প্রয়োগ করতে পারি that সেক্ষেত্রে নির্ভরতা স্থিতিশীল ডিজাইনের দিকে প্রবাহিত হচ্ছে, সঠিক হওয়া সহজ, আমাদের দৃশ্যে রেন্ডারার থেকে শুরু করে বিভিন্ন ধরণের সত্তা (মডেল, কণা, টেক্সচার ইত্যাদি), অন্যভাবে নয় not
- আমি চাচা বব-এর অ্যাফেরেন্ট / অ্যাফেরেন্ট কাপলিংস মেট্রিকের থেকে কিছুটা আলাদা অর্থে "স্থিতিশীলতা / অস্থিরতা" ব্যবহার করছি যা আমি যতদূর বুঝতে পারি পরিবর্তন পরিবর্তনের অসুবিধা পরিমাপ করছে। আমি তার পরিবর্তনের প্রয়োজনীয়তার সম্ভাবনা সম্পর্কে আরও কথা বলছি, যদিও তার স্থায়িত্ব মেট্রিক সেখানে কার্যকর। "পরিবর্তনের সম্ভাবনা" যখন "পরিবর্তনের স্বাচ্ছন্দ্যের" সাথে সমানুপাতিক হয় (উদাঃ: যে জিনিসগুলির ক্ষেত্রে সবচেয়ে বেশি পরিবর্তন প্রয়োজন হয় তা চাচা বব'র মেট্রিক থেকে সর্বাধিক অস্থিতিশীলতা এবং অভিজাত যুগলগুলি থাকে), তবে এই জাতীয় কোনও সম্ভাব্য পরিবর্তনগুলি সস্তা এবং অ-অনুপ্রেরণীয় , কোনও কেন্দ্রীয় ডিজাইন স্পর্শ না করে কেবল একটি বাস্তবায়ন প্রতিস্থাপনের প্রয়োজন।
আপনি যদি নিজের কোডবেসের কেন্দ্রীয় স্তরে কিছু বিমূর্ত করার চেষ্টা করছেন এবং ডিজাইন করা ঠিক খুব কঠিন, দেওয়ালের বিরুদ্ধে জেদীভাবে মাথা পিটানো এবং প্রতিমাসে / বছরে ক্রমাগত এটিতে অনুপ্রবেশমূলক পরিবর্তন করার পরিবর্তে 8,000 উত্স ফাইল আপডেট করার প্রয়োজন রয়েছে কারণ এটি নির্ভর করে এমন সমস্ত কিছু ভাঙা, আমার প্রথম পরামর্শটি হ'ল নির্ভরতাগুলি উল্টানো বিবেচনা করা। আপনি কোডটি এমনভাবে লিখতে পারেন কিনা তা দেখুন যে ডিজাইনের পক্ষে এতটা কঠিন যে জিনিসটি ডিজাইনের পক্ষে সহজ যে সমস্ত কিছুর উপর নির্ভর করে ডিজাইন করা এত কঠিন যে বিষয়ের উপর নির্ভর করে নকশা করা সহজ যে জিনিসগুলি নেই তার উপর নির্ভর করে। নোট করুন যে আমি ডিজাইনের কথা বলছি (বিশেষত ইন্টারফেস ডিজাইনগুলি) এবং বাস্তবায়নগুলি নয়: কখনও কখনও জিনিসগুলি ডিজাইন করা সহজ এবং বাস্তবায়ন করা শক্ত, এবং কখনও কখনও জিনিসগুলি নকশা করা শক্ত তবে কার্যকর করা সহজ। নির্ভরতাগুলি ডিজাইনের দিকে প্রবাহিত হয়, তাই নির্ভরতা যেদিকে প্রবাহিত হয় তার দিক নির্ধারণ করতে এখানে কিছু নকশা করা কতটা কঠিন তার দিকে দৃষ্টি নিবদ্ধ করা উচিত।
একক দায়িত্বের নীতি
আমার কাছে এসআরপি এখানে সাধারণত আকর্ষণীয় নয় (যদিও প্রসঙ্গের উপর নির্ভর করে)। আমি বোঝাতে চাইছি যে বিষয়গুলি স্পষ্টভাবে নির্ধারণযোগ্য এবং রক্ষণাবেক্ষণযোগ্য জিনিসগুলি ডিজাইনের ক্ষেত্রে একটি আঁটসাঁট ভারসাম্য রক্ষা করার কাজ রয়েছে তবে আপনার Shape
বিষয়গুলি কীভাবে তারা নিজেরাই আঁকতে জানেন না, যদি উদাহরণস্বরূপ, এবং এর চেয়ে বেশি অর্থবহ জিনিস নাও হতে পারে তবে আরও বিশদ তথ্য প্রকাশ করতে হতে পারে এটি নির্মাণ এবং আঁকার চেয়ে কোনও নির্দিষ্ট ব্যবহারের প্রসঙ্গে একটি আকার দিয়ে করুন। এখানে প্রায় সব কিছুর সাথেই বাণিজ্য-বন্ধ রয়েছে এবং এটি এসআরপি সম্পর্কিত নয় যা কিছু নির্দিষ্ট প্রসঙ্গে আমার অভিজ্ঞতায় এই ধরনের রক্ষণাবেক্ষণের দুঃস্বপ্ন হয়ে উঠতে কীভাবে নিজেকে সক্ষম করে তুলতে পারে তা সম্পর্কে সচেতন করতে পারে।
কাপলিং এবং আপনার সিস্টেমে যেদিকে নির্ভরতা প্রবাহিত হয় তার সাথে এর আরও অনেক কিছুই রয়েছে। যদি আপনি কোনও বিমূর্ত রেন্ডারিং ইন্টারফেসটি পোর্ট করার চেষ্টা করছেন যে সবকিছু নির্ভর করে (কারণ তারা এটি নিজেরাই আঁকতে ব্যবহার করছেন) এবং এটি কার্যকরভাবে কাজ করার জন্য আপনাকে এর নকশাটি যথেষ্ট পরিবর্তন করতে হবে, তবে এটি করার জন্য এটি একটি অত্যন্ত ব্যয়বহুল পরিবর্তন যার জন্য নিজের সিস্টেমে এমন সমস্ত কিছুর বাস্তবায়ন প্রতিস্থাপনের প্রয়োজন যা নিজেরাই কীভাবে আঁকতে জানে। এবং এটি সবচেয়ে ব্যবহারিক রক্ষণাবেক্ষণের সমস্যাগুলির সাথে আমার মুখোমুখি জিনিসগুলির সাথে মুখোমুখি হয় যেগুলি কীভাবে নিজেকে আঁকতে হবে সে সম্পর্কে যদি এটি বিমূর্ততার দিকে প্রবাহিত একটি নৌকা বোঝায় অনুবাদ করে যা সঠিকভাবে সামনে নকশা করা খুব কঠিন।
বিকাশকারী গর্ব
আমি এই পয়েন্টটি উল্লেখ করেছি কারণ, আমার অভিজ্ঞতায় ডিজাইনের পক্ষে সহজ জিনিসের দিকে নির্ভরতার দিকটি প্রবাহিত করার ক্ষেত্রে এটি প্রায়শই সবচেয়ে বড় বাধা। বিকাশকারীদের এখানে কিছুটা উচ্চাভিলাষী হওয়া খুব সহজ এবং বলে, "আমি তাদের সকলের শাসন করার জন্য ক্রস-প্ল্যাটফর্মের বিমূর্তকরণের নকশা করবো, অন্য বিকাশকারীরা কীভাবে পোর্টিংয়ে কয়েক মাস ব্যয় করবেন তা আমি সমাধান করব, এবং আমি পাচ্ছি এটি ঠিক আছে এবং এটি প্রতিটি এক প্ল্যাটফর্মে যাদুর মতো কাজ করে যা আমরা প্রতিটিটিতে অত্যাধুনিক রেন্ডারিং কৌশলগুলি সমর্থন করি এবং ব্যবহার করি; আমি ইতিমধ্যে এটি আমার মাথায় কল্পনা করেছি।সেক্ষেত্রে তারা ব্যবহারিক সমাধানটিকে প্রতিহত করে যা তা না করা এবং কেবল নির্ভরতার দিকটি সরিয়ে ফেলা এবং কেন্দ্রীয় ডিজাইনের পরিবর্তনগুলি যা সস্তা এবং স্থানীয় পুনরাবৃত্তি পরিবর্তনের পরিবর্তে রূপান্তর করতে পারে তা কার্যকর করার জন্য। বিকাশকারীদের এমন কিছু ধরণের "সাদা পতাকা" প্রবণতা থাকা দরকার যখন কিছু এজাতীয় স্তরের স্তরে ডিজাইন করা এবং তাদের সম্পূর্ণ কৌশলটি পুনর্বিবেচনা করা খুব কঠিন হয়, অন্যথায় তারা প্রচুর শোক ও ব্যথার মধ্যে পড়ে। আমি এই ধরনের উচ্চাভিলাষী এবং যুদ্ধের চেতনাটিকে বিশ্বজয়ের উচ্চাকাঙ্ক্ষাকে ইন্টারফেস ডিজাইনের স্তরে নিয়ে যাওয়ার চেয়ে ডিজাইনের সহজতর আধুনিকায়নের বাস্তবায়নের পরিবর্তনের পরামর্শ দেব।