তাঁর উদ্বেগ ছিল যে ক্লাসের বিশাল সংখ্যক একটি রক্ষণাবেক্ষণ দুঃস্বপ্নে অনুবাদ করবে। আমার মতামতটি হ'ল এটির ঠিক বিপরীত প্রভাব থাকবে।
আমি একেবারে আপনার বন্ধুর পাশে আছি, তবে এটি আমাদের ডোমেন এবং আমরা যে ধরণের সমস্যা ও নকশাগুলি মোকাবিলা করি তার বিষয় হতে পারে এবং বিশেষত কী ধরণের জিনিসগুলি ভবিষ্যতে পরিবর্তনের প্রয়োজন হতে পারে। বিভিন্ন সমস্যা, বিভিন্ন সমাধান। আমি সঠিক বা ভুলতে বিশ্বাস করি না, কেবল প্রোগ্রামাররা তাদের বিশেষ নকশা সমস্যাগুলি সমাধানের জন্য সর্বোত্তম উপায় সন্ধান করার চেষ্টা করছেন। আমি ভিএফএক্সে কাজ করি যা গেম ইঞ্জিনগুলির থেকে খুব বেশি আলাদা নয়।
তবে আমার কাছে যে সমস্যাটি ছিল আমি তার সাথে লড়াই করেছি যা কমপক্ষে কিছুটা সলাইড-কনফর্মিং আর্কিটেকচার (এটি সিওএম-ভিত্তিক ছিল) নামে পরিচিত হতে পারে, সম্ভবত "খুব বেশি শ্রেণি" বা "অনেকগুলি ফাংশন" হিসাবে নির্বিচারে সেদ্ধ হতে পারে might আপনার বন্ধু বর্ণনা করতে পারে। আমি স্পষ্টতই বলব, "অনেকগুলি ইন্টারঅ্যাকশন, এমন অনেক জায়গা যা সম্ভবত দুর্ব্যবহার করতে পারে, এমন অনেকগুলি জায়গা যা সম্ভবত পার্শ্ব প্রতিক্রিয়ার কারণ হতে পারে, অনেকগুলি স্থান যা পরিবর্তনের প্রয়োজন হতে পারে এবং এমন অনেকগুলি স্থান যা আমাদের মনে হয় যা তারা করতে পারে না । "
আমাদের হাতে কয়েকটি মুখ্য বিমূর্ত (এবং খাঁটি) ইন্টারফেস প্রয়োগ করা হয়েছে সাব টাইপের একটি বোট লোড দ্বারা প্রয়োগ করা, যেমন (ইসিএস সুবিধাগুলি সম্পর্কে কথা বলার প্রসঙ্গে এই চিত্রটি তৈরি করেছে, নীচে বাম মন্তব্যটি উপেক্ষা করুন):
যেখানে একটি মোশন ইন্টারফেস বা একটি দৃশ্যের নোড ইন্টারফেস শত শত উপ টাইপ দ্বারা প্রয়োগ করা যেতে পারে: লাইট, ক্যামেরা, মেশস, পদার্থবিজ্ঞান সলভার, শেডার, টেক্সচার, হাড়, আদিম আকার, বক্ররেখা ইত্যাদি etc. ইত্যাদি (এবং প্রায়শই প্রতিটি একাধিক ধরণের ছিল )। এবং চূড়ান্ত সমস্যাটি হ'ল সত্য যে এই ডিজাইনগুলি এত স্থিতিশীল ছিল না। আমাদের পরিবর্তনের প্রয়োজনীয়তা ছিল এবং কখনও কখনও ইন্টারফেসগুলি নিজেই পরিবর্তন করতে হত এবং আপনি যখন 200 সাব টাইপ দ্বারা প্রয়োগ করা একটি বিমূর্ত ইন্টারফেস পরিবর্তন করতে চান, এটি একটি অত্যন্ত ব্যয়বহুল পরিবর্তন। আমরা প্রশমিত করতে শুরু করেছি যে বিমূর্ত বেস ক্লাসগুলির মধ্যে এমন ডিজাইন পরিবর্তনের ব্যয় হ্রাস পেয়েছে তবে তারা এখনও ব্যয়বহুল ছিল।
সুতরাং বিকল্পভাবে আমি গেমিং শিল্পে সাধারণত ব্যবহৃত সত্তা-উপাদান সিস্টেম আর্কিটেকচার অন্বেষণ শুরু করি। এটি সবকিছুকে এর মতো হতে পারে:
ও বাহ! রক্ষণাবেক্ষণের ক্ষেত্রে এটি এমন একটি পার্থক্য ছিল। নির্ভরতা আর বিমূর্তির দিকে প্রবাহিত হয় না , বরং দিকে ডেটা (উপাদান) এর । এবং আমার ক্ষেত্রে কমপক্ষে, পরিবর্তনগুলি প্রয়োজনীয় প্রয়োজনীয়তা সত্ত্বেও ডিজাইনের সামনে দিকনির্দেশনার ক্ষেত্রে তথ্যটি পাওয়া অনেক বেশি স্থিতিশীল এবং সহজ ছিল (যদিও আমরা একই ডেটা দিয়ে যা করতে পারি তা পরিবর্তনের প্রয়োজনীয়তার সাথে ক্রমাগত পরিবর্তিত হয়)।
ইসিএসের সত্তাগুলি উত্তরাধিকারের পরিবর্তে রচনা ব্যবহার করার কারণে, তাদের আসলে কার্যকারিতা ধারণ করার প্রয়োজন নেই। এগুলি হ'ল উপাদানগুলির ধারক মাত্র the এটি এতটা অ্যানালজিকাল 200 উপপ্রকার যা একটি গতি ইন্টারফেসকে 200 সত্তার উদাহরণগুলিতে রূপান্তরিত করে (পৃথক কোডের সাথে পৃথক প্রকার নয়) যা কেবল একটি গতি উপাদান সংরক্ষণ করে (যা গতির সাথে সম্পর্কিত ডেটা ছাড়া কিছুই নয়)। এ PointLight
আর আলাদা শ্রেণি / উপপ্রকার নয়। এটি মোটেই ক্লাস নয়। এটি এমন কোনও সত্তার উদাহরণ যা কেবল স্থান (গতি) এবং পয়েন্ট লাইটের নির্দিষ্ট বৈশিষ্ট্যগুলির সাথে সম্পর্কিত কিছু উপাদান (ডেটা) একত্রিত করে। তাদের সাথে যুক্ত একমাত্র কার্যকারিতা সিস্টেমগুলির অভ্যন্তরে theRenderSystem
যা দৃশ্যটি কীভাবে রেন্ডার করতে হয় তা নির্ধারণ করতে দৃশ্যের হালকা উপাদানগুলির সন্ধান করে।
ইসিএস পদ্ধতির অধীনে প্রয়োজনীয় পরিবর্তনগুলির সাথে প্রায়শই কেবলমাত্র সেই তথ্যটিতে অপারেটিং এক বা দুটি সিস্টেম পরিবর্তন করার প্রয়োজন ছিল বা সাইডে কেবল একটি নতুন সিস্টেম প্রবর্তন করতে হবে, বা নতুন ডেটা প্রয়োজন হলে একটি নতুন উপাদান প্রবর্তন করার প্রয়োজন ছিল।
কমপক্ষে আমার ডোমেনের জন্য, এবং আমি প্রায় নিশ্চিতভাবেই এটি সবার জন্য নয়, এটি বিষয়গুলি এত সহজ করে দিয়েছে কারণ নির্ভরতা স্থিতিশীলতার দিকে প্রবাহিত হয়েছিল (যে জিনিসগুলিতে প্রায়শই পরিবর্তন করার প্রয়োজন পড়েনি)। নির্ভরতা অভিন্ন বিমূর্তের দিকে প্রবাহিত যখন সিওএম আর্কিটেকচার ক্ষেত্রে এটি ছিল না। আমার ক্ষেত্রে আপনি এটি করতে পারেন এমন সমস্ত সম্ভাব্য জিনিসগুলির চেয়ে মোশনের সামনে কী ডেটা প্রয়োজন তা নির্ধারণ করা খুব সহজ, যা প্রায়শই মাস বা বছর ধরে নতুন প্রয়োজনীয়তা আসার সাথে সাথে কিছুটা পরিবর্তিত হয়।
ওওপি-তে কি এমন কিছু মামলা রয়েছে যেখানে কিছু বা সমস্ত সলিড নীতিগুলি সাফ কোডের জন্য নিজেকে ধার দেয় না?
ঠিক আছে, পরিষ্কার কোড আমি বলতে পারি না যেহেতু কিছু লোক ক্লিন কোডকে সলিডের সাথে সমান করে, তবে অবশ্যই কিছু ক্ষেত্রে রয়েছে যেগুলি ইসিএসের মতো করে কার্যকারিতা থেকে ডেটা পৃথক করে এবং ডেটার দিকে অ্যাবস্ট্রাকশন থেকে দূরে নির্ভরতা পুনর্নির্দেশকরণ অবশ্যই জিনিসগুলিকে অনেক সহজ করে তুলতে পারে পরিবর্তন, সুস্পষ্ট মিলনের কারণে, যদি ডেটা বিমূর্তির তুলনায় ডেটা অনেক বেশি স্থিতিশীল হতে চলেছে। অবশ্যই ডেটাগুলির উপর নির্ভরশীলতাগুলি আক্রমণকারীদের বজায় রাখা কঠিন করে তুলতে পারে, তবে ইসিএস ন্যূনতমভাবে সিস্টেম সংস্থার সাথে এটি হ্রাস করতে পারে যা কোনও নির্দিষ্ট ধরণের উপাদানকে অ্যাক্সেস করে এমন সংখ্যার সিস্টেমের সংখ্যা কমিয়ে দেয়।
ডিআইপি যেমন পরামর্শ দেয় তবে নির্ভরতা বিমূর্ততার দিকে প্রবাহিত হওয়া উচিত নয়; নির্ভরতা এমন জিনিসের দিকে প্রবাহিত হওয়া উচিত যা ভবিষ্যতের পরিবর্তনের প্রয়োজনের খুব কমই। এটি সমস্ত ক্ষেত্রে বিমূর্ততা থাকতে পারে বা নাও হতে পারে (এটি অবশ্যই আমার ছিল না)।
- হ্যাঁ, ওওপি নকশার নীতিগুলি রয়েছে যা সলিডের সাথে আংশিকভাবে বিরোধ করে
- হ্যাঁ, ওওপি নকশার নীতিগুলি রয়েছে যা সম্পূর্ণরূপে সলিডের সাথে বিরোধ করে।
আমি নিশ্চিত নই যে ইসিএস সত্যই ওওপি এর স্বাদ। কিছু লোক সেভাবে এটি সংজ্ঞায়িত করেন তবে আমি সংযোজন বৈশিষ্ট্যগুলি এবং কার্যকারিতা (সিস্টেমগুলি) থেকে ডেটা (উপাদানগুলি) পৃথককরণ এবং ডেটা এনক্যাপসুলেশনের অভাবের সাথে সহজাতভাবে একে একে অনেক পৃথক হিসাবে দেখছি। যদি এটিকে ওওপির একটি রূপ হিসাবে বিবেচনা করা হয় তবে আমি মনে করি এটি সলাইডের সাথে খুব কম বিরোধে রয়েছে (কমপক্ষে এসআরপি-র কঠোর ধারণা, খোলা / বন্ধ, লিসকোভ প্রতিস্থাপন এবং ডিআইপি)। তবে আমি আশা করি এটি একটি ক্ষেত্রে এবং ডোমেনের একটি যুক্তিসঙ্গত উদাহরণ যেখানে কমপক্ষে লোকেরা সাধারণত আরও স্বীকৃত ওওপি প্রসঙ্গে তাদের ব্যাখ্যা করবে, সম্ভবত এটি প্রযোজ্য নয় S
কিশোরী ক্লাস
আমি আমার একটি গেমের আর্কিটেকচারটি ব্যাখ্যা করছিলাম যা আমার বন্ধুর অবাক করে দিয়েছিল অনেকগুলি ছোট ছোট ক্লাস এবং বিভিন্ন বিমূর্ত স্তর রয়েছে। আমি যুক্তি দিয়েছিলাম যে এটিই আমার পক্ষে সমস্ত কিছুকে একক দায়িত্ব দেওয়ার দিকে মনোনিবেশ করার এবং উপাদানগুলির মধ্যে সংযোগকে ooিলা করার জন্য ফলাফল।
ইসিএস আমার মতামতকে অনেক চ্যালেঞ্জ করেছে এবং পরিবর্তন করেছে। আপনার মত আমিও ভাবতাম যে রক্ষণাবেক্ষণের খুব ধারণাটি সম্ভব জিনিসের জন্য সহজ বাস্তবায়ন হয় যা অনেকগুলি বোঝায়, এবং আরও অনেকগুলি পরস্পরের উপর নির্ভরশীল জিনিস (এমনকি আন্তঃনির্ভরতা বিমূর্ততার মধ্যে থাকলেও)। সর্বাধিক সরল, সরল বাস্তবায়ন দেখতে যদি আপনি কেবল একটি শ্রেণি বা ফাংশনে জুম করে থাকেন এবং এটি যদি আমরা দেখতে না পাই তবে এটি রিফ্যাক্টর এবং এমনকি এটি আরও পচে যেতে পারে তবে এটি সর্বাধিক অর্থবোধ করে। তবে ফলস্বরূপ বাইরের বিশ্বের কী চলছে তা মিস করা সহজ, কারণ যে কোনও সময় আপনি তুলনামূলকভাবে জটিল যে কোনও কিছুকে 2 বা ততোধিক জিনিসে বিভক্ত করেন, সেই 2 বা ততোধিক বিষয় অবশ্যই অনিবার্যভাবে কিছুতে একে অপরের সাথে আলাপচারিতা করতে হবে (নীচে দেখুন) উপায়, বা বাইরের কিছুতে তাদের সবার সাথে ইন্টারঅ্যাক্ট করতে হবে।
আজকাল আমি খুঁজে পাই যে কোনও কিছুর সরলতার মধ্যে এবং সেখানে কতগুলি জিনিস রয়েছে এবং কতগুলি ইন্টারঅ্যাকশন প্রয়োজন তা একটি ভারসাম্যপূর্ণ কাজ act একটি ইসিএস মধ্যে সিস্টেম বরং অ তুচ্ছ বাস্তবায়নের সঙ্গে প্রবল মত, ডেটার উপর কাজ চালানোর জন্য হতে থাকে PhysicsSystem
বা RenderSystem
বা GuiLayoutSystem
। যাইহোক, এই যে কোনও জটিল পণ্যের মধ্যে তাদের খুব কম পরিমাণের দরকার রয়েছে তা পুরো পেছনের দিকে সহজ পদক্ষেপ এবং সম্পূর্ণ কোডবেসের সামগ্রিক আচরণ সম্পর্কে যুক্তিযুক্ত করে তোলে। এটিতে এখানে এমন কিছু রয়েছে যা প্রস্তাব দিতে পারে যে কম, বাল্কিয়ার ক্লাস (এখনও একটি যুক্তিযুক্ত একক দায়িত্ব পালন করা) এর পক্ষের দিকে ঝুঁকে পড়া খারাপ ধারণা নাও হতে পারে, যদি এর অর্থ বজায় রাখতে এবং যুক্তি করার জন্য কম ক্লাস হয় এবং পুরো জুড়ে কম ইন্টারঅ্যাকশন হয় পদ্ধতি.
ইন্টারঅ্যাকশনগুলি
আমি "সংযুক্তি" পরিবর্তে "মিথস্ক্রিয়া" বলি (যদিও মিথস্ক্রিয়া হ্রাস উভয় হ্রাস করা বোঝায়), যেহেতু আপনি দুটি কংক্রিট অবজেক্টকে ডিকোপল করতে বিমূর্ততা ব্যবহার করতে পারেন তবে তারা এখনও একে অপরের সাথে কথা বলে। তারা এখনও এই অপ্রত্যক্ষ যোগাযোগের প্রক্রিয়াতে পার্শ্ব প্রতিক্রিয়া সৃষ্টি করতে পারে। এবং প্রায়শই আমি দেখতে পাই যে সিস্টেমের নির্ভুলতা সম্পর্কে যুক্তি করার ক্ষমতাটি এই "মিথস্ক্রিয়করণ" এর চেয়ে এই "ইন্টারঅ্যাকশনগুলির" সাথে সম্পর্কিত। মিথস্ক্রিয়া হ্রাস করা আমার পক্ষে পাখির চোখের দর্শন থেকে সমস্ত বিষয়ে যুক্তিযুক্ত বিষয়গুলিকে অনেক সহজ করে তোলে। এর অর্থ হ'ল একে অপরের সাথে কথা বলছে না, এবং সেই দিক থেকে, ইসিএসও "মিথস্ক্রিয়া "টিকে ন্যূনতমতম বেস্টে (কমপক্ষে আমার অভ্যাসের জন্য নয়) কেবল" ইন্টারঅ্যাকশনগুলি "হ্রাস করতে পারে s
এটি বলেছিল, এটি অন্তত আমি এবং আমার ব্যক্তিগত দুর্বলতা হতে পারে। আমি প্রচুর পরিমাণে সিস্টেম তৈরি করতে আমার পক্ষে সবচেয়ে বড় প্রতিবন্ধকতা খুঁজে পেয়েছি এবং এখনও আত্মবিশ্বাসের সাথে তাদের সম্পর্কে যুক্তি দিয়েছি, সেগুলির মাধ্যমে চলাচল করেছি এবং অনুভবযোগ্য ফ্যাশনে যে কোনও জায়গায় যে কোনও সম্ভাব্য পছন্দসই পরিবর্তন আনতে পারব বলে মনে করি রাষ্ট্র এবং সংস্থান পরিচালনার পাশাপাশি is ক্ষতিকর দিক. এটি সবচেয়ে বড় বাধা যেটি শুরু হতে শুরু করে যখন আমি কয়েক হাজার এলওসি থেকে কয়েক লক্ষ এলওসি থেকে কয়েক মিলিয়ন এলওসি পর্যন্ত চলেছি এমনকি এমন কোডের জন্যও যা আমি আমার নিজেরাই পুরোপুরি রচনা করেছি। যদি কোনও কিছু আমাকে অন্য সমস্ত ক্রলের দিকে ধীরে ধীরে নিয়ে যেতে থাকে, তবে এই অর্থে যে এই অ্যাপ্লিকেশনের অবস্থা, ডেটা, পার্শ্ব প্রতিক্রিয়াগুলির দিক দিয়ে কী চলছে তা আমি আর বুঝতে পারি না। এটা ' এটি এমন রোবোটিক সময় নয় যে এটির পরিবর্তনের প্রয়োজন যা আমাকে এতটা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে নামিয়ে দেয় যে সিস্টেমটি যদি আমার মনের পক্ষে এটি নিয়ে যুক্তি করার ক্ষমতা ছাড়িয়ে যায় তবে পরিবর্তনের সম্পূর্ণ প্রভাবগুলি বোঝার অক্ষমতা। এবং ইন্টারঅ্যাকশনগুলি হ্রাস করা হয়েছে, আমার পক্ষে ব্যক্তিগতভাবে এই বিষয়গুলি দ্বারা ব্যক্তিগতভাবে অভিভূত হওয়া ছাড়া পণ্যটিকে আরও বেশি বৈশিষ্ট্যযুক্ত করে পণ্যকে আরও বড় করার অনুমতি দেওয়ার সবচেয়ে কার্যকর উপায় হ'ল একইভাবে ইন্টারঅ্যাকশনগুলি ন্যূনতমভাবে হ্রাস করার সাথে সাথে যে জায়গাগুলির সংখ্যা হ্রাস করতে পারে এমনকি সম্ভাব্যভাবে অ্যাপ্লিকেশনের স্থিতি পরিবর্তন করে এবং পার্শ্ব প্রতিক্রিয়াগুলি যথেষ্ট পরিমাণে সৃষ্টি করে।
এটি এরকম কিছু ঘুরিয়ে দিতে পারে (যেখানে চিত্রের প্রতিটি কিছুর কার্যকারিতা রয়েছে এবং স্পষ্টতই বাস্তব-জগতের দৃশ্যে অনেকগুলি, বহুগুণ বস্তুর সংখ্যা থাকবে এবং এটি একটি "ইন্টারঅ্যাকশন" চিত্র, সংযুক্তি হিসাবে নয় একটির মধ্যে বিমূর্ততা থাকবে):
... এটিতে যেখানে কেবলমাত্র সিস্টেমগুলির কার্যকারিতা রয়েছে (নীল উপাদানগুলি এখন কেবলমাত্র ডেটা, এবং এখন এটি একটি সংমিশ্রণ চিত্র):
এবং এই সমস্তগুলির উপর চিন্তাভাবনা দেখা দিয়েছে এবং হতে পারে আরও কিছু উপকারী ওওপি প্রসঙ্গে এই সুবিধাগুলির কিছু ফ্রেম করার একটি উপায় যা সলাইডের সাথে আরও সামঞ্জস্যপূর্ণ, তবে আমি এখনও নকশাগুলি এবং শব্দগুলি খুঁজে পাইনি, এবং আমি এটি খুঁজে পেয়েছি পরিভাষাটি যেহেতু আমি সরাসরি ওওপির সাথে সম্পর্কিত সমস্ত সম্পর্কে ছুঁড়ে ফেলার অভ্যাস করছিলাম difficult আমি এখানে জনগণের উত্তরগুলি পড়ে এটি সনাক্ত করার চেষ্টা চালিয়ে যাচ্ছি এবং নিজের নিজস্ব গঠনের জন্য যথাসাধ্য চেষ্টা করছি, তবে ইসিএসের প্রকৃতি সম্পর্কে কিছু আকর্ষণীয় বিষয় রয়েছে যা আমি পুরোপুরিভাবে আমার আঙ্গুলটি রাখতে সক্ষম হইনি have এমনকি এটি ব্যবহার না করে এমন স্থাপত্যগুলিতে এমনকি আরও বিস্তৃতভাবে প্রযোজ্য। আমিও আশা করি এই উত্তরটি কোনও ইসিএস প্রচার হিসাবে বন্ধ হবে না! আমি এটি খুব আকর্ষণীয় মনে করি যেহেতু একটি ইসিএস ডিজাইন করা আমার চিন্তাভাবনাগুলিকে সত্যই পরিবর্তন করেছে,