খুব বেশি নির্ভরতা ইঙ্গিত করতে পারে যে ক্লাস নিজেই খুব বেশি করছে। এটি খুব বেশি করে না করছে কিনা তা নির্ধারণ করার জন্য:
আইডিবি কনটেক্সটফ্যাক্টরি - ডাটাবেসের জন্য প্রসঙ্গ তৈরি করা।
ঠিক আছে, আমরা সম্ভবত একটি ব্যবসায়িক স্তরের ভিতরে আছি যেখানে ক্লাসগুলি ডেটা অ্যাক্সেস স্তরটির সাথে ইন্টারঅ্যাক্ট করে। দেখতে ভাল.
আইএমপ্পার - সত্ত্বা থেকে ডোমেন মডেলগুলিতে ম্যাপিং।
সামগ্রিক চিত্র ছাড়া কিছু বলা মুশকিল। এটি হতে পারে যে আর্কিটেকচারটি ভুল এবং ম্যাপিং সরাসরি ডেটা অ্যাক্সেস লেয়ারের মাধ্যমে করা উচিত, বা এটি সম্ভবত আর্কিটেকচার পুরোপুরি ঠিক আছে। সব ক্ষেত্রে, এখানে এই নির্ভরতা থাকা বোধগম্য হয়।
আরেকটি পছন্দ হবে ক্লাসটিকে দুটি ভাগে ভাগ করা: একটি ম্যাপিংয়ের সাথে ডিল করা, অন্যটি প্রকৃত ব্যবসায়ের যুক্তি নিয়ে কাজ করা। এটি একটি ডি ফ্যাক্টো স্তর তৈরি করবে যা ডাল থেকে বিএলকে আরও আলাদা করবে। ম্যাপিংগুলি জটিল হলে এটি একটি ভাল ধারণা হতে পারে। যদিও বেশিরভাগ ক্ষেত্রে এটি কেবল অকেজো জটিলতা যুক্ত করবে।
আইকলক - ইউনিট পরীক্ষাগুলিতে সহায়তা করার জন্য তারিখের সময়টিকে বিমূর্ত করে দেয়।
কেবলমাত্র বর্তমান সময়টি পেতে আলাদা ইন্টারফেস (এবং শ্রেণি) পাওয়া খুব সম্ভবত কার্যকর নয়। আমি কেবল DateTime.Now
বর্তমান পদ্ধতিগুলির জন্য প্রয়োজনীয় পদ্ধতিগুলিতে পাস করব ।
টাইমজোনস, বা তারিখের সীমা ইত্যাদির মতো কিছু অন্যান্য তথ্য থাকলে পৃথক শ্রেণি বোধগম্য হতে পারে
আইফেরফরমেন্সফ্যাক্টরি - নির্দিষ্ট পদ্ধতির জন্য কার্যকরকরণের সময় পরিমাপ করে।
পরের বিষয়টি দেখুন।
আইলগ - লগিংয়ের জন্য লগ 4 নেট।
এই ধরনের ট্রান্সসিড্যান্ট কার্যকারিতা কাঠামোর সাথে সম্পর্কিত এবং আসল গ্রন্থাগারগুলি রানটাইমের সময় বিনিময়যোগ্য এবং কনফিগারযোগ্য হওয়া উচিত (উদাহরণস্বরূপ .NET এ app.config এর মাধ্যমে)।
দুর্ভাগ্যক্রমে, এটি (এখনও) কেস নয়, যা আপনাকে হয় একটি লাইব্রেরি বাছাই করে এটির সাথে আটকে দেয়, বা প্রয়োজনের পরে লাইব্রেরিগুলিকে অদলবদল করতে সক্ষম করার জন্য একটি বিমূর্ত স্তর তৈরি করে। আপনার উদ্দেশ্যটি যদি বিশেষভাবে গ্রন্থাগারের পছন্দের থেকে স্বতন্ত্র থাকে তবে এর জন্য যান। আপনি যদি নিশ্চিত হন যে আপনি বছরের পর বছর ধরে লাইব্রেরিটি ব্যবহার করা চালিয়ে যান তবে কোনও বিমূর্ততা যুক্ত করবেন না।
লাইব্রেরিটি ব্যবহার করা যদি খুব জটিল হয় তবে একটি মুখের ধরণটি বোঝায় sense
আইকোলিকেশনআউপারফ্যাক্টরি - সংগ্রহ তৈরি করে (এটি আইনেউমারেবল প্রসারিত করে)।
আমি ধরে নেব যে এটি খুব নির্দিষ্ট ডেটা স্ট্রাকচার তৈরি করে যা ডোমেন লজিক দ্বারা ব্যবহৃত হয়। এটি দেখতে কোনও ইউটিলিটি ক্লাসের মতো দেখাচ্ছে। পরিবর্তে, প্রাসঙ্গিক কন্সট্রাক্টরগুলির সাথে ডেটা স্ট্রাকচারে একটি ক্লাস ব্যবহার করুন। আরম্ভের যুক্তি যদি কোনও কনস্ট্রাক্টরের সাথে ফিট করার জন্য কিছুটা জটিল হয় তবে স্থিতিশীল কারখানার পদ্ধতি ব্যবহার করুন factory যুক্তি যদি আরও জটিল হয় তবে কারখানা বা বিল্ডার প্যাটার্নটি ব্যবহার করুন।
আইকিউরিফিল্টারফ্যাক্টরি - ইনপুটের ভিত্তিতে ক্যোয়ারী উত্পন্ন করে যা ডিবিতে কোয়েরি করবে।
এটি ডেটা অ্যাক্সেস লেয়ারে নেই কেন? নামে এখানে কেন Filter
?
IIdentityHelper - লগ ইন করা ব্যবহারকারীকে পুনরুদ্ধার করে।
আমি নিশ্চিত নই কেন এখানে Helper
প্রত্যয় আছে। সমস্ত ক্ষেত্রে, অন্যান্য প্রত্যয়গুলি (( IIdentityManager
)) বিশেষভাবে স্পষ্ট হবে না
যাইহোক, এখানে এই নির্ভরতা থাকা নিখুঁত করে তোলে।
আইফল্ট ফ্যাক্টরি - বিভিন্ন ফল্ট এক্সেক্সশন তৈরি করুন (আমি ডাব্লুসিএফ ব্যবহার করি)।
এটা কি যুক্তি এত জটিল যে এটি একটি কারখানার প্যাটার্ন ব্যবহার করা প্রয়োজন? কেন নির্ভরতা ইনজেকশন ব্যবহার করা হয়? আপনি কি উত্পাদন কোড এবং পরীক্ষাগুলির মধ্যে ব্যাতিক্রমের উত্সকে পরিবর্তন করতে পারবেন? কেন?
আমি refactor যে সহজ মধ্যে চেষ্টা করবে throw new FaultException(...)
। যদি কিছু বৈশ্বিক তথ্য ক্লায়েন্টে প্রচারের আগে সমস্ত ব্যতিক্রমগুলিতে যুক্ত করা উচিত, ডাব্লুসিএফের সম্ভবত একটি ব্যবস্থা রয়েছে যেখানে আপনি একটি অযাচিত ব্যতিক্রম ধরা পড়েন এবং এটিকে পরিবর্তন করে ক্লায়েন্টে পুনর্বিবেচনা করতে পারেন।
সংখ্যা দ্বারা গুণমান পরিমাপ করা সাধারণত আপনি প্রতি মাসে লেখার কোডের লাইনের মাধ্যমে প্রদত্ত হিসাবে খারাপ। আপনার খুব ভালভাবে নকশাকৃত শ্রেণিতে নির্ভরশীলতাগুলির একটি উচ্চ সংখ্যা থাকতে পারে, কারণ আপনার কয়েকটি নির্ভরতা ব্যবহার করে কৃপণ ক্লাস থাকতে পারে।
প্রচুর নির্ভরতা যুক্তিগুলি অনুসরণ করা আরও কঠিন করে তোলে। যদি যুক্তিটি অনুসরণ করা কঠিন হয় তবে ক্লাসটি সম্ভবত খুব বেশি করছে এবং বিভক্ত হওয়া উচিত।