ইউজার ইন্টারফেস থেকে ক্লাসগুলি ডিকুয়ালিং


27

ক্লাস লেখার ক্ষেত্রে যখন সর্বোত্তম অনুশীলনটি ব্যবহার করা যেতে পারে যা ব্যবহারকারীর ইন্টারফেস সম্পর্কে জানতে পারে। কোনও শ্রেণি কীভাবে নিজেকে আঁকতে পারে তা কিছু সেরা অনুশীলনগুলি ভাঙবে না কারণ এটি ব্যবহারকারী ইন্টারফেসের (কনসোল, জিইউআই, ইত্যাদি) নির্ভর করে?

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

প্রশ্নের কারণ হ'ল আমি নিজেকে সর্বদা আটকে থাকতে এবং ক্লাসগুলিকে কীভাবে সাধারণীকরণ করতে পারি তার জন্য স্তব্ধ হয়ে পড়ে থাকি যাতে তারা সবচেয়ে কার্যকর। এটি আসলে আমার বিরুদ্ধে কাজ করছে এবং আমি "খুব বেশি চেষ্টা করছি" তা ভাবছি।


কেন আপনি ডিকোপল করতে চান? আপনি শুনেছেন যে এটি করা সঠিক জিনিস ছিল বা আপনার অন্যান্য কারণ রয়েছে?
SoylentGray

2
পুরো "শ্রেণিটি কীভাবে নিজেকে আঁকতে হবে" তা কেবল একটি ভয়ঙ্কর, আমার প্রাচীন উদাহরণটি মুছে যাবে। বিশেষত গেম প্রোগ্রামারের স্ট্যাক =)
প্যাট্রিক হিউজ

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

@ পিট - এটি একটি ভাল উত্তর।
SoylentGray

2
@ পেট্রিক: ন্যায্য কথা, আপনি যদি একটি Shapeক্লাস লিখছেন , তবে আপনি সম্ভবত গ্রাফিক্স স্ট্যাক লিখছেন, গ্রাফিক্স স্ট্যাকটিতে কোনও ক্লায়েন্ট লিখছেন না।
কেন ব্লুম

উত্তর:


13

ক্লাস লেখার ক্ষেত্রে যখন সর্বোত্তম অনুশীলনটি ব্যবহার করা যেতে পারে যা ব্যবহারকারীর ইন্টারফেস সম্পর্কে জানতে পারে। কোনও শ্রেণি কীভাবে নিজেকে আঁকতে পারে তা কিছু সেরা অনুশীলনগুলি ভাঙবে না কারণ এটি ব্যবহারকারী ইন্টারফেসের (কনসোল, জিইউআই, ইত্যাদি) নির্ভর করে?

এটি ক্লাস এবং ব্যবহারের ক্ষেত্রে নির্ভর করে। কীভাবে নিজেকে আঁকতে হবে এমন একটি ভিজ্যুয়াল উপাদান অগত্যা একক দায়িত্বের নীতি লঙ্ঘন নয়।

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

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

যদি আমরা এই ক্লাসটি উইন ফর্মগুলি বলার জন্য লিখি তবে আমরা এটি কনসোল অ্যাপ্লিকেশন বা ওয়েব অ্যাপ্লিকেশনটির জন্য পুনরায় ব্যবহার করতে পারি না। এটা কি সঠিক?

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

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

প্রশ্নের কারণ হ'ল আমি নিজেকে সর্বদা আটকে থাকতে এবং ক্লাসগুলিকে কীভাবে সাধারণীকরণ করতে পারি তার জন্য স্তব্ধ হয়ে পড়ে থাকি যাতে তারা সবচেয়ে কার্যকর। এটি আসলে আমার বিরুদ্ধে কাজ করছে এবং আমি "খুব বেশি চেষ্টা করছি" তা ভাবছি।

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

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

সম্পাদনা: আপনি স্থাপত্য এবং নকশা কৌশল যা সর্বোত্তম কার্যাভ্যাস প্রদান করতে পারেন সম্পর্কে আরও পড়তে চান, আমি আপনাকে @Catchops উত্তর পড়তে এবং সম্পর্কে পড়তে কঠিন উইকিপিডিয়ায় চর্চা।

এছাড়াও, শুরু করার জন্য, আমি সর্বদা নিম্নলিখিত বইটি সুপারিশ করি: প্রধান ফার্স্ট ডিজাইনের প্যাটার্নস । এটি আপনাকে বিমূর্তকরণ কৌশলগুলি / ওওপি ডিজাইনের অনুশীলনগুলি বুঝতে সহায়তা করবে, এটি জিওএফ বইয়ের চেয়ে বেশি (যা দুর্দান্ত, এটি কেবল নতুনদের জন্য উপযুক্ত নয়)।


1
উত্তম উত্তর, তবে চূড়ান্ত প্রোগ্রামাররা 'বিমূর্ততাগুলিতে রাখেন না যেখানে আমরা জিনিসগুলি পরিবর্তনের প্রত্যাশা করি '। কোডটি DRY করতে আমরা বিমূর্ততাগুলিতে রেখেছি যেখানে জিনিসগুলি পরিবর্তন হচ্ছে changing
কেভিন ক্লাইনে

1
@ কেভিন স্লাইনটি দুর্দান্ত unless
ম্যাগনাস ওলফেল্ট

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

19

আপনি অবশ্যই সঠিক। এবং না, আপনি "ঠিকঠাক চেষ্টা করছেন" :)

একক দায়িত্ব নীতি সম্পর্কে পড়ুন

আপনার শ্রেণীর অভ্যন্তরীণ কাজ এবং এই তথ্যটি যেভাবে ব্যবহারকারীকে উপস্থাপন করা উচিত সেগুলি দুটি দায়িত্ব two

ক্লাস ডিকুয়াল করতে ভয় পাবেন না। কদাচিৎ সমস্যাটি খুব বিমূর্ত এবং হ্রাসপ্রাপ্ত :)

দুটি অত্যন্ত প্রাসঙ্গিক নিদর্শন হ'ল ওয়েব অ্যাপ্লিকেশনগুলির জন্য মডেল – দর্শন – নিয়ামক এবং সিলভারলাইট / ডাব্লুপিএফ-এর জন্য মডেল ভিউ ভিউমডেল el


1
+1 এমনকি আপনি নন-ওয়েব অ্যাপ্লিকেশনগুলির জন্য এমভিসি ব্যবহার করতে পারেন, খুব কমপক্ষে এটি আপনাকে সেই বিষয়গুলিতে ভাবতে সহায়তা করে যা দায়িত্বগুলি পরিষ্কার রাখে।
প্যাট্রিক হিউজেস

এমভিভিএম এমভিসির সিলিমার। এমভিসি বেশিরভাগ ওয়েব অ্যাপের মতো স্টেটলেস অ্যাপ্লিকেশনগুলির জন্য।
বরিস ইয়াঙ্কভ

3
-1 আমার অভিজ্ঞতার মধ্যে অন্যতম সাধারণ সমস্যা অকাল সাধারণীকরণ এবং সাধারণভাবে অতিরিক্ত ইঞ্জিনিয়ারিং।
ডায়েটবুদ্ধা

3
অতিরিক্ত ইঞ্জিনিয়ার করার জন্য আপনাকে প্রথমে কীভাবে ইঞ্জিনিয়ারিং করতে হবে তা জানতে হবে। আমার অভিজ্ঞতায় লোকেরা প্রায়শই 'আন্ডার ইঞ্জিনিয়ার' সফ্টওয়্যার।
বরিস ইয়াঙ্কভ

যদিও আমি সফ্টওয়্যার ডিজাইনের উন্নতি করার প্রচেষ্টাটির প্রশংসা করি, কোনও ক্লাসে কল করার জন্য একটি ইন্টারফেসে একটি কল স্থাপন করে, কোনও শব্দার্থবিহীনভাবে ডিকোপল করে না। গতিশীল টাইপ করা ভাষা ব্যবহার করার পরে কী ঘটে তা বিবেচনা করুন। স্ট্যাক এক্সচেঞ্জের প্রোগ্রামার বিভাগে প্রদত্ত পরামর্শে সুপরিষাল (সিনট্যাকটিক) ডিকোপলিংয়ের উপর এবং সত্যিকারের ডিকোপলিংয়ের উপর খুব বেশি জোর দেওয়া হয়।
ফ্র্যাঙ্ক হিলেমান

7

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

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

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


5

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

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

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

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

এমন একটি আর্কিটেকচার তৈরি করা সম্ভব যা সাধারণ ব্যবসায়ের নিয়ম এবং ডেটা অ্যাক্সেস ধারণ করে তবে এই কনস্ট্রাক্টগুলি ব্যবহার করে ব্যবহারকারীর ইন্টারফেসগুলির বিভিন্ন প্রয়োগ রয়েছে। এটি সত্যই এটি বাস্তবায়ন করে এমন একটি দলে থাকতে এবং এটি বুঝতে সত্যই এটি কার্যকরভাবে সহায়তা করে।

এটি এমন একটি প্রশ্নের মাত্র দ্রুত উচ্চ-স্তরের উত্তর যা আরও বিস্তারিত উত্তরের দাবি রাখে। আমি আপনাকে এই নিদর্শনগুলি আরও দেখার জন্য উত্সাহিত করি। এই প্যাটারগুলির আরও কিছু কংক্রিট বাস্তবায়ন এমভিসি এবং এমভিভিএমের পরিচিত নামগুলি পাওয়া যায়।

শুভকামনা!


আমি এটাকে পছন্দ করি যখন কেউ কেন (ব্যঙ্গাত্মক, অবশ্যই) কোনও মন্তব্য না করেই কোনও কিছুকে আটকায়। আমি যে নীতিগুলি বলেছি সেগুলি সত্য - নীচে চলা লোকটি দয়া করে উঠে দাঁড়িয়ে কেন বলবে।
41

2

ক্লাস লেখার ক্ষেত্রে যখন সর্বোত্তম অনুশীলনটি ব্যবহার করা যেতে পারে যা ব্যবহারকারীর ইন্টারফেস সম্পর্কে জানতে পারে।

কোনও শ্রেণি কীভাবে নিজেকে আঁকতে পারে তা কিছু সেরা অনুশীলনগুলি ভাঙবে না কারণ এটি ব্যবহারকারী ইন্টারফেসের (কনসোল, জিইউআই, ইত্যাদি) নির্ভর করে?

এই ক্ষেত্রে আপনি এখনও এমভিসি / এমভিভিএম ব্যবহার করতে পারেন এবং সাধারণ ইন্টারফেস ব্যবহার করে বিভিন্ন ইউআই বাস্তবায়ন ইনজেক্ট করতে পারেন:

public interface IAgnosticChartDrawing
{
   public void Draw(ChartProperties chartProperties);
   event EventHandler ChartPanned;
}

public class GuiChartDrawer : UserControl, IAgnosticChartDrawing
{
    public void Draw(ChartProperties chartProperties)
    {
        //GDI, GTK or something else...
    }

    //Implement event based on mouse actions
}

public class ConsoleChartDrawer : IAgnosticChartDrawing
{
    public void Draw(ChartProperties chartProperties)
    {
        //'Draw' using characters and symbols...
    }

    //Implement event based on keyboard actions
}

IAgnosticChartDrawing guiView = new GuiChartDrawer();
IAgnosticChartDrawing conView = new ConsoleChartDrawer();

Model model = new FinancialModel();

SampleController controllerGUI = new SampleController(model, guiView);
SampleController controllerConsole = new SampleController(model, conView);

নতুন প্রকারের জিইউআই যুক্ত করতে সক্ষম হওয়ার পরে আপনি নিজের কন্ট্রোলার এবং মডেল যুক্তিটি পুনরায় ব্যবহার করতে সক্ষম হবেন।


2

এটি করার জন্য বিভিন্ন নিদর্শন রয়েছে: এমভিপি, এমভিসি, এমভিভিএম, ইত্যাদি ...

মার্টিন ফাউলারের (বড় নাম) পড়ার জন্য একটি চমৎকার নিবন্ধটি জিইউআই আর্কিটেকচার: http://www.martinfowler.com/eaaDev/uiArchs.html

এমভিপির এখনও উল্লেখ করা হয়নি তবে এটি অবশ্যই উদ্ধৃত হওয়ার যোগ্য: এটি একবার দেখুন।

এটি গুগল ওয়েব টুলকিটের বিকাশকারীদের ব্যবহারের জন্য প্রস্তাবিত প্যাটার্ন এটি সত্যই ঝরঝরে।

এই পদ্ধতির কেন এখানে কার্যকর তা সম্পর্কে আপনি আসল কোড, বাস্তব উদাহরণ এবং যুক্তি খুঁজে পেতে পারেন:

http://code.google.com/webtoolkit/articles/mvp-architecture.html

http://code.google.com/webtoolkit/articles/mvp-architecture-2.html

এই বা অনুরূপ পদ্ধতির অনুসরণের একটি সুবিধা যা এখানে যথেষ্ট চাপ দেওয়া হয়নি তা হ'ল টেস্টাবিলিটি! অনেক ক্ষেত্রে আমি বলব যে এটিই মূল সুবিধা!


1
লিঙ্কগুলির জন্য +1। আমি এমভিভিএম সম্পর্কে এমএসডিএন তে একটি অনুরূপ নিবন্ধ পড়ছিলাম এবং এই গুগল নিবন্ধগুলি কিছুটা ভিন্ন প্যাটার্নে হলেও আরও ভাল।
পিট

1

এটি এমন এক জায়গার যেখানে ওওপি বিমূর্তিতে ভাল কাজ করতে ব্যর্থ । ওওপি পলিমারফিজমে একক চলক ('এটি') এর উপর গতিশীল প্রেরণ ব্যবহার করা হয়। যদি পলিমার্ফিজমটি শেপকে ভিত্তি করে গড়ে তোলা হয় তবে আপনি রেন্ডারারে পলিমর্ফিক-মিত্র প্রেরণ করতে পারবেন না (কনসোল, জিইউআই ইত্যাদি)।

একটি প্রোগ্রামিং সিস্টেম বিবেচনা করুন যা দুটি বা ততোধিক ভেরিয়েবলের উপর প্রেরণ করতে পারে:

poly_draw(Shape s, Renderer r)

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

বেশিরভাগ ওওপি ভাষাগুলি উপরের মতো কিছু সমর্থন করে না (কয়েকটি করেন তবে সেগুলি মূলধারার নয়)। আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি একটি কাজের লক্ষ্যের জন্য দর্শনার্থী প্যাটার্নটি একবার দেখুন ।


1

... অঙ্কন () পদ্ধতিটি ইউজার ইন্টারফেসের উপর নির্ভর করে না? যদি আমরা এই ক্লাসটি উইন ফর্মগুলি বলার জন্য লিখি তবে আমরা এটি কনসোল অ্যাপ্লিকেশন বা ওয়েব অ্যাপ্লিকেশনটির জন্য পুনরায় ব্যবহার করতে পারি না। এটা কি সঠিক?

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

... আমি নিজেকে সর্বদা আটকে থাকতে এবং ক্লাসগুলিকে কীভাবে সাধারণীকরণ করতে পারি তার জন্য স্তব্ধ হয়ে পড়েছি যাতে তারা সবচেয়ে দরকারী।

ঠিক আছে আমার উপরে উপরোক্ত বিষয়গুলি হ'ল আমরা যে ভিউ-কন্ট্রোলার কাপলিংয়ের কথা বলছি তা ঠিক এবং আরও বেশি, এটি আধুনিক ডিজাইনে বরং ট্রেন্ডি

যদিও, বছর দু'বছর আগেও আমি সে সম্পর্কে অনিরাপদ বোধ করেছি। নিদর্শন এবং ওও ডিজাইনের বিষয়ে সান ফোরামে আলোচনার পরে আমি আমার মন পরিবর্তন করেছি।

আপনি যদি আগ্রহী হন তবে এই ফোরামটি নিজে চেষ্টা করে দেখুন - এটি এখন ওরাকলে ( লিঙ্ক ) স্থানান্তরিত হয়েছে । আপনি যদি সেখানে পৌঁছে যান, লোক সাইশকে পিং করার চেষ্টা করুন - তারপরে, এই জটিল বিষয়গুলি সম্পর্কে তার ব্যাখ্যা আমার পক্ষে সবচেয়ে বেশি কার্যকর হয়েছিল। তিনি এখনও অংশ নিচ্ছেন কিনা তা আমি বলতে পারছি না - আমি নিজে বেশ কিছুদিন সেখানে ছিলাম না


1

কিন্তু ব্যবহারকারী ইন্টারফেস কিসের উপর ড্র () পদ্ধতিটি খুব বেশি নির্ভর করে না?

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

একটি সংযোগের দৃষ্টিকোণ থেকে আমার কাছে প্রশ্নটি হ'ল এই ধরণের তথ্যের উপর কে / কী নির্ভর করবে এবং কী পরিমাণ বিশদে (কীভাবে বিমূর্ত, উদাহরণস্বরূপ)?

অঙ্কন / রেন্ডারিং সক্ষমতার বিমূর্তকরণ

কারণ যদি উচ্চ-স্তরের অঙ্কন কোডটি কেবলমাত্র খুব বিমূর্তের উপর নির্ভর করে, যে বিমূর্ততাটি আপনি টার্গেট করতে চান সেই সমস্ত প্ল্যাটফর্মে (কংক্রিট প্রয়োগের বিকল্পের মাধ্যমে) কাজ করতে সক্ষম হতে পারে। একটি অনুমোদিত উদাহরণ হিসাবে, কিছু খুব বিমূর্ত IDrawerইন্টারফেস প্লট আকারের মতো কাজ করতে কনসোল এবং জিইউআই উভয় API উভয়ই প্রয়োগ করতে সক্ষম হতে পারে (কনসোলের প্রয়োগটি ASCII আর্টের সাথে কিছু 80xN "চিত্রের মতো কনসোলকে চিকিত্সা করতে পারে)। অবশ্যই এটি একটি স্বতঃস্ফূর্ত উদাহরণ যেহেতু সাধারণত আপনি যা করতে চান তা কোনও চিত্র / ফ্রেম বাফারের মতো কনসোল আউটপুটকে চিকিত্সা করা হয় না; সাধারণত বেশিরভাগ ব্যবহারকারীর শেষের জন্য কনসোলগুলিতে আরও পাঠ্য-ভিত্তিক ইন্টারঅ্যাকশন প্রয়োজন।

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

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

নির্ভরশীলতা স্থিতিশীল, "সহজ" ডিজাইনগুলির দিকে প্রবাহিত করা

আমার ক্ষেত্রে আমি শেষ দৃশ্যে আছি। আমরা মূলত বিভিন্ন অন্তর্নিহিত ক্ষমতা এবং API গুলি সহ প্রচুর বিভিন্ন হার্ডওয়্যারকে টার্গেট করি এবং এগুলির সমস্ত শাসন করার জন্য একটি রেন্ডারিং / অঙ্কন বিমূর্ততা নিয়ে আসার চেষ্টা করা সীমান্তরেখা হতাশ (আমরা সম্ভবত বিশ্ব-বিখ্যাত হয়ে উঠতে পারি যে এটি কার্যকরভাবে কার্যকর হবে কারণ এটি একটি খেলা হবে শিল্পে পরিবর্তনকারী)। তাই শেষ জিনিস আমি আমার ক্ষেত্রে আপনি চান সাদৃশ্যমূলক মত হল Shapeবা Modelবা Particle Emitterযে জানেন কিভাবে নিজেই আঁকা, যদিও তা প্রকাশ করা হয় যে, সবচেয়ে বিমূর্ত ভাবে সম্ভব সর্বোচ্চ স্তরের অঙ্কন এবং ...

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

অসুবিধা সহজ উপর নির্ভর করে, সহজ নয় কঠিনের উপর নির্ভর করে

সুতরাং পরিবর্তে আমরা যা করি তা হ'ল নির্ভরতাগুলি এমন জিনিসগুলির দিকে প্রবাহিত করা যায় যা ডিজাইন করা সহজ। একটি বিমূর্ত "মডেল" ডিজাইন করা অনেক সহজ, যা কেবল বহুভুজ এবং উপকরণগুলির মতো জিনিসগুলি সংরক্ষণের উপর দৃষ্টি নিবদ্ধ করে এবং নকশাটিকে সঠিকভাবে পেতে একটি বিমূর্ত "রেন্ডারার" ডিজাইন করা যা কার্যকরভাবে প্রয়োগ করা যেতে পারে (বিকল্প পরিবর্তিত কংক্রিট সাব টাইপের মাধ্যমে) পরিষেবা অঙ্কনে to একটি পিসি থেকে পিএসপি হিসাবে পৃথক হিসাবে হার্ডওয়্যার জন্য অনুরূপ অনুরোধ।

এখানে চিত্র বর্ণনা লিখুন

তাই আমরা নির্ভরযোগ্যতাগুলি এমন জিনিসগুলি থেকে দূরে সরিয়ে ফেলি যা নকশা করা কঠিন। বিমূর্ত মডেলগুলি তৈরি করার পরিবর্তে তারা কীভাবে একটি বিমূর্ত রেন্ডারার ডিজাইনের প্রতি তাদের আঁকতে হয় তা জানেন এবং তারা যে সমস্ত ডিজাইনের পরিবর্তে প্রয়োগ করেন (এবং যদি সে নকশাটি পরিবর্তিত হয় তবে তাদের বাস্তবায়ন ভেঙে দেয়), তার পরিবর্তে আমাদের কাছে একটি বিমূর্ত রেন্ডার রয়েছে যা আমাদের দৃশ্যের প্রতিটি বিমূর্ত বস্তুকে কীভাবে আঁকতে জানে ( মডেল, কণা নির্গমনকারী, ইত্যাদি) এবং তাই আমরা তখন পিসিগুলির জন্য একটি ওপেনলএল রেন্ডারার RendererGlসাব টাইপ RendererPsp, পিএসপির জন্য আরেকটি, মোবাইল ফোনের জন্য অন্য ইত্যাদি প্রয়োগ করতে পারি that সেক্ষেত্রে নির্ভরতা স্থিতিশীল ডিজাইনের দিকে প্রবাহিত হচ্ছে, সঠিক হওয়া সহজ, আমাদের দৃশ্যে রেন্ডারার থেকে শুরু করে বিভিন্ন ধরণের সত্তা (মডেল, কণা, টেক্সচার ইত্যাদি), অন্যভাবে নয় not

এখানে চিত্র বর্ণনা লিখুন

  • আমি চাচা বব-এর অ্যাফেরেন্ট / অ্যাফেরেন্ট কাপলিংস মেট্রিকের থেকে কিছুটা আলাদা অর্থে "স্থিতিশীলতা / অস্থিরতা" ব্যবহার করছি যা আমি যতদূর বুঝতে পারি পরিবর্তন পরিবর্তনের অসুবিধা পরিমাপ করছে। আমি তার পরিবর্তনের প্রয়োজনীয়তার সম্ভাবনা সম্পর্কে আরও কথা বলছি, যদিও তার স্থায়িত্ব মেট্রিক সেখানে কার্যকর। "পরিবর্তনের সম্ভাবনা" যখন "পরিবর্তনের স্বাচ্ছন্দ্যের" সাথে সমানুপাতিক হয় (উদাঃ: যে জিনিসগুলির ক্ষেত্রে সবচেয়ে বেশি পরিবর্তন প্রয়োজন হয় তা চাচা বব'র মেট্রিক থেকে সর্বাধিক অস্থিতিশীলতা এবং অভিজাত যুগলগুলি থাকে), তবে এই জাতীয় কোনও সম্ভাব্য পরিবর্তনগুলি সস্তা এবং অ-অনুপ্রেরণীয় , কোনও কেন্দ্রীয় ডিজাইন স্পর্শ না করে কেবল একটি বাস্তবায়ন প্রতিস্থাপনের প্রয়োজন।

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

একক দায়িত্বের নীতি

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

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

বিকাশকারী গর্ব

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


1
"ডিজাইন করা কঠিন বিষয়গুলি থেকে নির্ভরতাগুলি উল্টে ফেলুন" ধারণাটি আমি বুঝতে পারি না, আপনি কি কেবল উত্তরাধিকারের বিষয়ে কথা বলছেন? পিএসপি / ওপেনজিএল এর উদাহরণ ব্যবহার করে আপনি বোঝানোর অর্থ একটি তৈরির পরিবর্তে OpenGLBillboardআপনি এমন কোনও তৈরি করবেন OpenGLRendererযা কোনও ধরণের আঁকতে জানে IBillBoard? কিন্তু এটি কি যুক্তি সংযুক্ত করে তা করবে IBillBoard, বা এটির IBillBoardশর্তসাপেক্ষে বিশাল সুইচ বা প্রকার থাকবে? এটাই বুঝতে আমার পক্ষে কষ্ট হয়, কারণ এটি মোটেই রক্ষণাবেক্ষণ বলে মনে হয় না!
স্টিভ চ্যামিলার্ড

@ স্টিভচ্যামিলার্ড পার্থক্যটি বলুন, পিএসপি (সীমাবদ্ধ হার্ডওয়্যার) অবশ্যই পুরাতন স্কুল স্ক্রিন্ডার স্বচ্ছতা এবং রেন্ডারিং মূল্যায়নের একটি পৃথক ক্রম ব্যবহার করে ভলিউম আদিমগুলি পরিচালনা করতে হবে: ডিজিটাল্রুন . github.io/ ডিজিটালরুন- ডকুমেন্টেশন / মিডিয়া / … আপনার যখন এমন একটি কেন্দ্র রয়েছে RendererPspযা আপনার গেমের দৃশ্যের উচ্চ-স্তরের বিমূর্ততাগুলি জানে, তখন এটি পিএসপিতে বিশ্বাসযোগ্য মনে হয় এমন জিনিসগুলিকে এমনভাবে রেন্ডার করার জন্য সমস্ত জাদু এবং ব্যাকফ্ল্যাপগুলি করতে পারে ....
ড্রাগন এনার্জি

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

1
ঠিক আছে, আমি এখন এটি পেয়েছিলাম বলে মনে করি। মূলত আপনি বলছেন যে এই জাতীয় উদ্বেগগুলি (যেমন হার্ডওয়্যার) এত উচ্চ স্তরের যে নিম্ন স্তরের অবজেক্টগুলি যেমন BillBoardনির্ভর করে তার উপর নির্ভর করে যা করা সত্যিই কঠিন? যদিও একটি IRendererইতিমধ্যে উচ্চ স্তরের এবং খুব কম সমস্যা নিয়ে এই উদ্বেগগুলির উপর নির্ভর করতে পারে?
স্টিভ চ্যামিলার্ড

1
পৃথক প্ল্যাটফর্মগুলি, বৈদ্যুতিন হার্ডওয়্যার ক্ষমতাগুলি সম্পর্কিত উদ্বেগের উদ্বেগগুলির সাথে, এমন কোনও ডিজাইন করা খুব শক্ত যে আমি যেখানেই বস, সেখানে কী করা উচিত তা জানান। আমার পক্ষে এটি বলা খুব সহজ, "আরে, আমি এই জাতীয় ধরণের জলযুক্ত কণা সহ মেঘলা / কুয়াশাচ্ছন্ন জিনিস এবং আমাকে দেখতে সুন্দর দেখাতে চেষ্টা করুন, আমার ঘাড়ে যা আমি ইদানীং শেভ করেনি তা ক্যাপচার করি না", এবং উপস্থাপককে এটির মতো সীমাবদ্ধতার পরিপ্রেক্ষিতে কীভাবে আমাকে সুন্দর এবং যথাসম্ভব বাস্তব উপায়ে রেন্ডার করতে হবে তা নির্ধারণ করুন। এটি করার জন্য যে কোনও প্রয়াসই প্রায় নিশ্চিতভাবেই একটি পাল্টা-উত্পাদনশীল পথে ফলাফল করবে।
ড্রাগন এনার্জি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.