গেমগুলিতে অঙ্কন এবং যুক্তির বিচ্ছেদ


11

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

ধরা যাক আমি একটি সাধারণ পং গেমটি তৈরি করছি। আমার একটা Ballক্লাস এবং Paddleক্লাস ছিল ব্যবসায়ের বিশ্ব বিকাশ থেকে আগত, আমার প্রথম প্রবৃত্তিটি এই শ্রেণীর কোনওটিতেই কোনও অঙ্কন বা ইনপুট হ্যান্ডলিং কোড না রাখাই।

//pseudo code
class Ball
{
   Vector2D position;
   Vector2D velocity;
   Color color;
   void Move(){}
}

বল শ্রেণিতে কিছুই ইনপুট পরিচালনা করে না, বা অঙ্কন নিয়ে কাজ করে। আমার তখন অন্য ক্লাস, আমার Gameক্লাস, বা আমার Scene.m(কোকোস 2 ডি) ছিল যা বলটি নতুন করে দেবে এবং গেম লুপ চলাকালীন, এটি প্রয়োজনীয়ভাবে বলটি চালিত করত।

বিষয়টি যদিও, এক্সএনএ এবং কোকোস 2 ডি উভয়ের জন্য অনেক টিউটোরিয়ালে, আমি এর মতো একটি প্যাটার্ন দেখতে পাচ্ছি:

//pseudo code
class Ball : SomeUpdatableComponent
{
   Vector2D position;
   Vector2D velocity;
   Color color;
   void Update(){}
   void Draw(){}
   void HandleInput(){}
}

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


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

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

1
@ সেফ যদি আপনি ডেটা-ওরিয়েন্টেড ডিজাইনে থাকেন তবে এটি কাজ করে না এবং আপনি যদি অবজেক্ট-ওরিয়েন্টেড ডিজাইন পছন্দ করেন তবে এটি কাজ করে না। চাচা বব এর সলিউড প্রিনপ্লেস দেখুন: butunclebob.com/ArticleS.Uncle
लय.

@tenpn। সেই নিবন্ধ এবং দস্তাবেজের মধ্যে লিঙ্কটি খুব আকর্ষণীয়, আপনাকে ধন্যবাদ!
sebf

উত্তর:


10

আমার প্রশ্ন, এটা কি ঠিক? গেম ডেভলপমেন্টে লোকেদের ব্যবহার করা সেই প্যাটার্নটি কি?

গেম ডেভেলপাররা যা কাজ করে তা ব্যবহার করার প্রবণতা রাখে। এটি কঠোর নয়, তবে ওহে, জাহাজগুলি।

এটি আমার বল ক্লাসকে সব কিছু করার জন্য এটি আমার অভ্যস্ত সমস্ত কিছুর বিরুদ্ধে যায়।

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

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

দায়িত্বের প্রতিনিধিটি প্রোগ্রামারের হাতে; একটি সরল পং গেমের জন্য, এটি উপলব্ধি করে যে প্রতিটি বস্তু তার নিজস্ব অঙ্কন (নিম্ন-স্তরের কল সহ সম্পূর্ণ) পুরোপুরি পরিচালনা করে। এটি স্টাইল এবং বুদ্ধিমানের বিষয়।

তদতিরিক্ত, এই দ্বিতীয় উদাহরণে, যেখানে আমার বল কীভাবে চলাফেরা করতে জানে, আমি কীভাবে প্যাডেলের সাথে সংঘর্ষ সনাক্তকরণ পরিচালনা করব? বল প্যাডল জ্ঞান প্রয়োজন হবে?

সুতরাং, সমস্যাটি সমাধানের একটি প্রাকৃতিক উপায় হ'ল প্রতিটি বস্তু সংঘর্ষগুলি যাচাইয়ের জন্য প্রতিটি বস্তুটিকে কিছুটা প্যারামিটার হিসাবে গ্রহণ করে। এই স্কেলগুলি খারাপভাবে হয় এবং অদ্ভুত ফলাফল হতে পারে।

প্রতিটি শ্রেণি এক ধরণের কলিডেবল ইন্টারফেস বাস্তবায়ন করে এবং তারপরে একটি উচ্চ-স্তরের কোড থাকে যা আপনার গেমের আপডেটের পর্যায়ে সমস্ত কলিডেবল অবজেক্টের উপরে লুপ করে এবং সংঘর্ষগুলি পরিচালনা করে, প্রয়োজনের সাথে অবজেক্টের অবস্থান নির্ধারণ করে।

আবার, আপনার গেমের বিভিন্ন জিনিসের জন্য কীভাবে দায়িত্ব অর্পণ করা দরকার সে সম্পর্কে আপনাকে কেবল একটি ধারণা তৈরি করতে হবে (বা আপনার মন তৈরি করতে হবে)। রেন্ডারিং একটি নিঃসঙ্গ ক্রিয়াকলাপ এবং শূন্যে কোনও বস্তু দ্বারা পরিচালনা করা যায়; সংঘর্ষ এবং পদার্থবিজ্ঞান সাধারণত পারে না।

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

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

আবার যা কিছু কাজ করে তা আপনার পক্ষে সহজ।


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

5

আমি সম্প্রতি একটি 'সত্তা সিস্টেম' ব্যবহার করে একটি সাধারণ স্পেস আক্রমণকারী গেম তৈরি করেছি made এটি এমন একটি প্যাটার্ন যা গুণাবলী এবং আচরণগুলি অত্যন্ত ভালভাবে পৃথক করে। এটি সম্পূর্ণরূপে বুঝতে আমার কয়েকটা পুনরাবৃত্তি লাগল, তবে আপনি যখন কয়েকটি উপাদান ডিজাইন করেছেন এটি আপনার বিদ্যমান উপাদানগুলি ব্যবহার করে নতুন অবজেক্ট রচনা করা অত্যন্ত সহজ হয়ে যায়।

আপনার এটি পড়া উচিত:

http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/

এটি অত্যন্ত জ্ঞাতযোগ্য লোক দ্বারা প্রায়শই আপডেট করা হয়। এটি কংক্রিট কোড উদাহরণগুলির সাথে একমাত্র সত্তা সিস্টেম আলোচনা।

আমার পুনরাবৃত্তি নিম্নলিখিত হিসাবে গিয়েছিল:

প্রথম পুনরাবৃত্তির একটি "সত্তা সিস্টেম" অবজেক্ট ছিল যা আদমের বর্ণনা অনুসারে ছিল; তবে আমার উপাদানগুলির এখনও পদ্ধতি রয়েছে - আমার 'রেন্ডারযোগ্য' উপাদানটির একটি পেইন্ট () পদ্ধতি ছিল, এবং আমার অবস্থানের উপাদানটির একটি চাল () পদ্ধতি এবং ইত্যাদি ছিল When উপাদানগুলি এবং উপাদান আপডেটগুলি কার্যকর করার ক্রম ক্রম .... খুব অগোছালো mess

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

যাইহোক পুনরাবৃত্তির জন্য # 2 এটি আমি ব্লগ থেকে সংগ্রহ করেছি:

সত্ত্বা ম্যানেজার - উপাদান "ডাটাবেস" হিসাবে কাজ করে যা নির্দিষ্ট সংস্থার উপাদান রয়েছে এমন সত্তাগুলির জন্য অনুসন্ধান করা যেতে পারে। এটি দ্রুত অ্যাক্সেসের জন্য মেমরির একটি ইন-মেমরির ডেটাবেস দ্বারা সমর্থিতও হতে পারে ... আরও তথ্যের জন্য টি-মেশিনের অংশ 5 দেখুন।

এনটিটিসিস্টেম - প্রতিটি সিস্টেম মূলত কেবলমাত্র একটি পদ্ধতি যা এনটাইটের সেটগুলিতে কাজ করে। প্রতিটি সিস্টেম কাজ করার জন্য কোনও সত্তার x, y এবং z এর উপাদান ব্যবহার করবে। সুতরাং আপনি এক্স, y এবং z উপাদানগুলির সাথে সত্ত্বার জন্য ম্যানেজারকে জিজ্ঞাসা করবেন তারপরে ফলাফলটি সিস্টেমে প্রেরণ করবেন।

সত্তা - লম্বা মত একটি আইডি। সত্তা হ'ল উপাদানগুলির একটি সেটকে একটি সত্তাকে একত্রে ভাগ করে।

উপাদান - ক্ষেত্রের একটি সেট .... কোন আচরণ! যখন আপনি আচরণগুলি যুক্ত করা শুরু করেন এটি অগোছালো হয়ে উঠতে শুরু করে ... এমনকি একটি সাধারণ স্পেস আক্রমণকারী খেলায়।

সম্পাদনা করুন : যাইহোক, 'ডিটি' হ'ল শেষ প্রধান লুপের অনুরোধের পর থেকে ব-দ্বীপের সময়

সুতরাং আমার প্রধান আক্রমণকারী লুপটি হ'ল:

Collection<Entity> entitiesWithGuns = manager.getEntitiesWith(Gun.class);
Collection<Entity> entitiesWithDamagable =
manager.getEntitiesWith(BulletDamagable.class);
Collection<Entity> entitiesWithInvadorDamagable = manager.getEntitiesWith(InvadorDamagable.class);

keyboardShipControllerSystem.update(entitiesWithGuns, dt);
touchInputSystem.update(entitiesWithGuns, dt);
Collection<Entity> entitiesWithInvadorMovement = manager.getEntitiesWith(InvadorMovement.class);
invadorMovementSystem.update(entitiesWithInvadorMovement);

Collection<Entity> entitiesWithVelocity = manager.getEntitiesWith(Velocity.class);
movementSystem.move(entitiesWithVelocity, dt);
gunSystem.update(entitiesWithGuns, System.currentTimeMillis());
Collection<Entity> entitiesWithPositionAndForm = manager.getEntitiesWith(Position.class, Form.class);
collisionSystem.checkCollisions(entitiesWithPositionAndForm);

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

আমি তোমাকে পছন্দ করি; আমি একটি পাকা বিকাশকারী কিন্তু গেম লেখার অভিজ্ঞতা নেই। আমি গবেষণায় কিছু সময় ব্যয় করেছি যা বিভিন্ন ধরণের নকশাগুলি দিয়েছিল এবং এটি আমার নজরে পড়ে। কোনওভাবেই এটি করার একমাত্র উপায় নয়, তবে আমি এটি খুব স্বজ্ঞাত এবং দৃust়ভাবে পেয়েছি। আমি বিশ্বাস করি যে "গেম প্রোগ্রামিং রত্ন" সিরিজের 6 টি বইতে এই প্যাটার্নটি আনুষ্ঠানিকভাবে আলোচিত হয়েছিল - http://www.amazon.com/Game-Programming-Gems/dp/1584500492 । আমি নিজে কোনও বই পড়ি না তবে শুনেছি সেগুলি গেম প্রোগ্রামিংয়ের ডি-ফ্যাক্টো রেফারেন্স।


1

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

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

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

আবার, আমি আপনাকে যা আপনার কাছে সবচেয়ে স্বাভাবিক বলে মনে হয় তা লিখার পরামর্শ দিই।


আমি মনে করি আপনি আমার প্রশ্নটি ভুল বুঝেছেন। আমি বলছি আমি এমন ক্লাস করতে চাই না যা নিজেরাই সবকিছু করে। আমি বলের মতো পড়ে গিয়েছিলাম এমন একটি বলের যৌক্তিক উপস্থাপনা হওয়া উচিত, তবে এটি গেম লুপ, ইনপুট হ্যান্ডলিং ইত্যাদি সম্পর্কে কিছুই জানে না ...
বিফ্রি

ন্যায়সঙ্গত হওয়ার জন্য, ব্যবসায়ের প্রোগ্রামিংয়ে আপনি এটিকে সিদ্ধ করে রাখলে, দুটি ট্রেন রয়েছে: ব্যবসায়িক অবজেক্ট যা নিজের উপর যুক্তি চাপায়, চালিয়ে যায় এবং ডিটিও + অ্যাপলোগিক + রিপোজিটরি / পার্সেন্ট্যান্স স্তর ...
নট

1

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

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

বেশিরভাগ লোকেরা একটি ইনপুট ক্লাস ব্যবহার করেন যার ফলাফল কোনও পরিষেবা বা স্ট্যাটিক শ্রেণীর মাধ্যমে গেমের সমস্ত সামগ্রীর জন্য উপলব্ধ।


0

আমি মনে করি আপনি ব্যবসায়ের বিশ্বে সম্ভবত যা ব্যবহার করছেন তা বিমূর্তি এবং বাস্তবায়ন পৃথক করছে।

গেম ডেভ ওয়ার্ল্ডে আপনি সাধারণত গতির দিক দিয়ে ভাবতে চান। আপনার কাছে যত বেশি অবজেক্টস রয়েছে তত বেশি প্রসঙ্গের স্যুইচগুলি ঘটবে যা বর্তমান লোডের উপর নির্ভর করে জিনিসগুলিকে ধীর করতে পারে।

এটি কেবলমাত্র আমার জল্পনা থেকেই যেহেতু আমি একজন গেম ডেভেলপার তবে একজন পেশাদার বিকাশকারী।


0

না, এটি 'সঠিক' বা 'ভুল' নয়, এটি কেবল একটি সরলকরণ।

কিছু ব্যবসায়ের কোড হুবহু হ'ল, আপনি যদি এমন কোনও সিস্টেমের সাথে কাজ করছেন যা জোর করে উপস্থাপনা এবং যুক্তি পৃথক করে।

এখানে, একটি ভিবি.এনইটি উদাহরণ, যেখানে "বিজনেস লজিক" (একটি সংখ্যা যুক্ত করা) একটি জিইউআই ইভেন্ট হ্যান্ডলারটিতে লেখা আছে - http://www.homeandlearn.co.uk/net/nets1p12.html

আমি কীভাবে বিভিন্ন উপাদানগুলির জটিলতাগুলি মোকাবিলা করব, যদি প্রতিটি স্বতন্ত্র উপাদান নিজেরাই সবকিছু করে?

যদি এবং কখন এটি জটিল হয়, তবে আপনি এটিকে ফ্যাক্ট করতে পারেন।

class Ball
{
    GraphicalModel ballVisual;
    void Draw()
    {
        ballVisual.Draw();
    }
};

0

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.