দ্রষ্টব্য: কোড নমুনা সি # তে লিখিত হয়েছে, তবে এটি কোনও বিষয় নয়। আমি ট্যাগ হিসাবে সি # রেখেছি কারণ আমি এর চেয়ে বেশি অ্যাপোপিয়েট পাই না। এটি কোড কাঠামো সম্পর্কে।
আমি ক্লিন কোড পড়ছি এবং আরও ভাল প্রোগ্রামার হওয়ার চেষ্টা করছি।
আমি প্রায়শই নিজেকে একক দায়িত্বের নীতি অনুসরণ করার জন্য লড়াই করতে দেখি (শ্রেণি এবং ক্রিয়াকলাপগুলি কেবল একটি কাজ করা উচিত) বিশেষত ফাংশনে। হয়তো আমার সমস্যাটি হ'ল "একটি জিনিস" ভাল সংজ্ঞাযুক্ত নয়, তবে এখনও ...
একটি উদাহরণ: আমার কাছে একটি ডাটাবেসে ফ্লাফিজির একটি তালিকা রয়েছে। ফ্লাফি কী তা আমরা যত্ন করি না। আমি ফ্লাফির পুনরুদ্ধার করার জন্য একটি ক্লাস চাই। তবে কিছু যুক্তি অনুসারে ফ্লফি বদলে যেতে পারে। কিছু যুক্তির উপর নির্ভর করে এই শ্রেণিটি ক্যাশে থেকে ডেটা ফেরত দেবে বা ডাটাবেস থেকে সর্বশেষটি পাবে। আমরা বলতে পারি যে এটি ফ্লফিগুলি পরিচালনা করে এবং এটি একটি জিনিস। এটিকে সহজ করার জন্য, আসুন বলি লোড হওয়া ডেটা এক ঘন্টার জন্য ভাল, এবং তারপরে অবশ্যই এটি পুনরায় লোড করা উচিত।
class FluffiesManager
{
private Fluffies m_Cache;
private DateTime m_NextReload = DateTime.MinValue;
// ...
public Fluffies GetFluffies()
{
if (NeedsReload())
LoadFluffies();
return m_Cache;
}
private NeedsReload()
{
return (m_NextReload < DateTime.Now);
}
private void LoadFluffies()
{
GetFluffiesFromDb();
UpdateNextLoad();
}
private void UpdateNextLoad()
{
m_NextReload = DatTime.Now + TimeSpan.FromHours(1);
}
// ...
}
GetFluffies()
আমার কাছে ঠিক আছে ব্যবহারকারী কিছু fluffies জন্য জিজ্ঞাসা, আমরা তাদের সরবরাহ। প্রয়োজনে তাদের ডিবি থেকে পুনরুদ্ধার করতে যাওয়া, তবে এটি ফ্লাফিগুলি পাওয়ার একটি অংশ হিসাবে বিবেচনা করা যেতে পারে (অবশ্যই এটি কিছুটা সাবজেক্টিভ)।
NeedsReload()
ঠিক মনে হচ্ছে। আমাদের যদি ফ্লফিগুলি পুনরায় লোড করতে হয় তবে তা পরীক্ষা করে দেখুন। আপডেটনেক্সটলড ঠিক আছে। পরবর্তী পুনরায় লোডের জন্য সময় আপডেট করে। এটি অবশ্যই একটি একক জিনিস।
যাইহোক, আমি অনুভব করি যা করা হয় LoadFluffies()
তা একক জিনিস হিসাবে বর্ণনা করা যায় না। এটি ডেটাবেস থেকে ডেটা পাচ্ছে এবং এটি পরবর্তী পুনরায় লোডের সময় নির্ধারণ করছে। তর্ক করা শক্ত যে পরের পুনরায় লোডের জন্য সময় গণনা করা ডেটা পাওয়ার অংশ। যাইহোক, আমি এটি করার আরও ভাল উপায় খুঁজে পাচ্ছি না (ফাংশনটির নামকরণটি LoadFluffiesAndScheduleNextLoad
আরও ভাল হতে পারে তবে এটি সমস্যাটিকে আরও স্পষ্ট করে তোলে)।
এসআরপি অনুযায়ী এই ক্লাসটি সত্যিই লেখার জন্য কি কোনও মার্জিত সমাধান রয়েছে? আমি কি খুব পেডেন্টিক হচ্ছি?
অথবা আমার ক্লাসটি সত্যই কেবল একটি কাজ করছে না?
DateTime.UtcNow
আপনি দিবালোক সঞ্চয় পরিবর্তনগুলি, বা বর্তমান সময়ের অঞ্চল পরিবর্তন এমনকি এড়িয়ে চলুন।