আমি এমন একটি কার্ড গেম মডেল করার চেষ্টা করছি যেখানে কার্ডগুলিতে দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য রয়েছে:
প্রথমটি একটি প্রভাব। গেমের স্থিতিতে এই পরিবর্তনগুলি যা আপনি কার্ড খেললে ঘটে। প্রভাবের জন্য ইন্টারফেসটি নিম্নরূপ:
boolean isPlayable(Player p, GameState gs);
void play(Player p, GameState gs);
এবং আপনি যদি কার্ডটির ব্যয়টি পূরণ করতে পারেন এবং এর সমস্ত প্রভাব খেলতে পারা যায় তবে আপনি কার্ডটিকে প্লেযোগ্য হিসাবে বিবেচনা করতে পারেন। তাই ভালো:
// in Card class
boolean isPlayable(Player p, GameState gs) {
if(p.resource < this.cost) return false;
for(Effect e : this.effects) {
if(!e.isPlayable(p,gs)) return false;
}
return true;
}
ঠিক আছে, এখন পর্যন্ত, বেশ সহজ।
কার্ডের বৈশিষ্ট্যগুলির অন্যান্য সেট হ'ল ক্ষমতা। এই ক্ষমতাগুলি গেমের রাজ্যে পরিবর্তন যা আপনি ইচ্ছায় সক্রিয় করতে পারেন। এগুলির জন্য ইন্টারফেসটি নিয়ে এসে আমি বুঝতে পেরেছিলাম যে তাদের সক্রিয় করা যায় কিনা তা নির্ধারণের জন্য তাদের একটি পদ্ধতি এবং অ্যাক্টিভেশন বাস্তবায়নের জন্য একটি পদ্ধতি প্রয়োজন। এটি সত্তা শেষ
boolean isActivatable(Player p, GameState gs);
void activate(Player p, GameState gs);
এবং আমি বুঝতে পারি যে এটি "প্লে" পরিবর্তে "অ্যাক্টিভেট" বলার ব্যতিক্রম Ability
এবং Effect
ঠিক একই স্বাক্ষর রয়েছে।
অভিন্ন স্বাক্ষর সহ একাধিক ইন্টারফেস রাখা কি খারাপ জিনিস? আমার কেবল একটি ব্যবহার করা উচিত এবং একই ইন্টারফেসের দুটি সেট থাকা উচিত? যেমন:
Set<Effect> effects;
Set<Effect> abilities;
যদি তাই হয়, কি refactoring পদক্ষেপ আমি রাস্তা যদি তারা অ অভিন্ন (আরও বৈশিষ্ট্য মুক্তি হয়) করা যায়, বিশেষ করে তারা বিপথগামী (তারা উভয় লাভ কিছু অন্যান্য উচিত না অর্থাৎ, যেমন শুধুমাত্র একটি হত্তন উল্টোদিকে নিতে হবে এবং অন্যটি একটি সম্পূর্ণ উপসেট হচ্ছে)? আমি বিশেষত উদ্বিগ্ন যে এগুলির সংমিশ্রণটি কিছু পরিবর্তন হওয়ার সাথে সাথে অ-টেকসই হবে।
সূক্ষ্ম মুদ্রণ:
আমি জানি যে এই প্রশ্নটি গেম ডেভেলপমেন্টের দ্বারা উদ্ভূত হয়েছে তবে আমি অনুভব করি যে এটি এমন এক ধরণের সমস্যা যা সহজেই অ-গেম ডেভেলপমেন্টে সহজেই আঁকিয়ে উঠতে পারে, বিশেষত যখন একটি অ্যাপ্লিকেশনে একাধিক ক্লায়েন্টের ব্যবসায়ের মডেলগুলিকে সামঞ্জস্য করার চেষ্টা করা হয় ঠিক তেমনটি ঘটানোর সাথে সাথে happens প্রতিটি প্রকল্প আমি একাধিক ব্যবসায়ের প্রভাব নিয়ে করেছি ... এছাড়াও, ব্যবহৃত স্নিপেটগুলি হ'ল জাভা স্নিপেটস, তবে এটি কেবলমাত্র বহুগুণ অবজেক্ট ওরিয়েন্টেড ভাষার ক্ষেত্রে প্রয়োগ হতে পারে।