প্রথমে, দয়া করে নোট করুন যে এর মতো কিছু করা লেনদেনের আইনentity.underlyingEntity.underlyingEntity.method()
অনুযায়ী কোড গন্ধ হিসাবে বিবেচিত হয় । এইভাবে, আপনি গ্রাহকের কাছে প্রচুর বাস্তবায়ন বিবরণ প্রকাশ করছেন। এবং এই জাতীয় ব্যবস্থার প্রতিটি সম্প্রসারণ বা সংশোধন করার প্রয়োজনীয়তা অনেক ক্ষতি করবে।
সুতরাং এটি দেওয়া, আমি আপনাকে কোডসইনচায়োসের মতামত অনুসারে একটি HasRole
বা IsAdmin
পদ্ধতি থাকার পরামর্শ User
দিচ্ছি। এইভাবে, ব্যবহারকারীর উপর কীভাবে ভূমিকাগুলি প্রয়োগ করা হয় তা ভোক্তার জন্য বাস্তবায়নের বিশদটি থেকে যায়। এবং ব্যবহারকারীকে তার ভূমিকার বিবরণ সম্পর্কে জিজ্ঞাসা করার পরিবর্তে তার ভূমিকা কী তা জিজ্ঞাসা করা এবং তার ভিত্তিতে সিদ্ধান্ত নেওয়া আরও স্বাভাবিক মনে হয়।
প্রয়োজন না হলে দয়া করে string
এর ব্যবহার এড়াতে দয়া করে । name
পরিবর্তনশীল একটি ভাল উদাহরণ string
কারণ বিষয়বস্তু আগে অজানা। অন্যদিকে, role
আপনার দুটি স্বতন্ত্র মান রয়েছে যা সংকলনের সময়ে সুপরিচিত, আপনি আরও শক্তিশালী টাইপিং ব্যবহার করতে চাইবেন। এখানেই গণনার ধরণ আসে ...
তুলনা করা
public bool HasRole(string role)
সঙ্গে
public enum Role { Admin, User }
public bool HasRole(Role role)
দ্বিতীয় কেসটি আমাকে আরও অনেক ধারণা দেয় যে আমার চারপাশে কী ঘটবে। string
আপনার ভূমিকার ধ্রুবক সম্পর্কে যদি আমার কোনও ধারণা না থাকে তবে এটি ভুলভাবে আমাকে একটি অবৈধ পাস করতে বাধা দেয় ।
এরপরে ভূমিকাটি কীভাবে প্রদর্শিত হবে তার সিদ্ধান্ত। আপনি হয় ব্যবহারকারীর উপর সরাসরি সঞ্চিত এনাম ব্যবহার করতে পারেন:
public enum Role
{
Admin,
User
}
public class User
{
private Role _role;
public bool HasRole(Role role)
{
return _role == role;
}
// or
public bool IsAdmin()
{
return _role == Role.Admin;
}
}
অন্যদিকে, আপনি যদি নিজের ভূমিকাটি নিজেই আচরণ করতে চান তবে অবশ্যই এটির ধরণের কীভাবে সিদ্ধান্ত নেওয়া হচ্ছে তার বিশদটি অবশ্যই লুকিয়ে রাখা উচিত:
public enum RoleType
{
User,
Admin
}
public class Role
{
private RoleType _roleType;
public bool IsAdmin()
{
return _roleType == RoleType.Admin;
}
public bool IsUser()
{
return _roleType == RoleType.User;
}
// more role-specific logic...
}
public class User
{
private Role _role;
public bool IsAdmin()
{
return _role.IsAdmin();
}
public bool IsUser()
{
return _role.IsUser();
}
}
এটি তবে বেশ ভার্জোজ এবং প্রতিটি ভূমিকা সংযোজন নিয়ে জটিলতা বৃদ্ধি পাবে - আপনি যখন ডেমিটারের আইনটি পুরোপুরি মেনে চলার চেষ্টা করবেন তখন কোডটি কীভাবে শেষ হয়। সিস্টেমের মডেলিংয়ের কংক্রিট প্রয়োজনীয়তার উপর ভিত্তি করে আপনার নকশাটি উন্নত করা উচিত।
আপনার প্রশ্ন অনুসারে, আমি অনুমান করি যে আপনি সরাসরি এনামের সাথে প্রথম বিকল্পটি নিয়ে যেতে চান User
। আপনার যদি আরও যুক্তি প্রয়োজন Role
, দ্বিতীয় বিকল্পটি একটি সূচনা পয়েন্ট হিসাবে বিবেচনা করা উচিত।
User.HasRole(Role.Admin)
।