এমভিসিতে ইউটিলিটি ক্লাস - এএসপি.এনইটি


15

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


3
যে কোনও প্রকল্পে ইউটিলিটি ক্লাস তৈরি হবে কেন? আপনার প্রশ্নের মধ্যে কেন এমভিসি একচেটিয়াভাবে রয়েছে?
ওপড

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

আমি ব্যক্তিগতভাবে ইমেলটি কোনও পরিষেবা প্রেরণাকে বিবেচনা করব, যা ইন্টারফেস IUserNotificationsSender বা তাই দ্বারা বিমুগ্ধ করা হয়েছে .. যথাযথ ত্রুটি পরিচালনা, এসএমটিপি কনফিগারেশন সহ যা কোনও ইউটিলিটি ফাংশনে সত্যিই ফিট করে না ...
সর্বোচ্চ

@ ম্যাক্স তাহলে কোন ইউটিলিটি ফাংশন হিসাবে বিবেচিত হবে? আমি বোঝার চেষ্টা করছি, যেহেতু আমার কাছে মনে হচ্ছে আমি খুব বিভ্রান্ত
ইউজার 60812

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

উত্তর:


11

আপনি না। এবং আপনার নিজের উদাহরণ কেন না তা দেখানোর জন্য একটি নিখুঁত is

আপনি ঠিক ইমেল প্রেরণ করতে চান? সুতরাং আপনি এটি CommunicationUtilitiesস্থির সঙ্গে কোথাও একটি স্ট্যাটিক বর্গ তৈরি SendEmail()। আপনি এমন কিছু শ্রেণি থেকে এই পদ্ধতিটি ব্যবহার করেন যা গুচ্ছ জিনিসগুলি করে, উদাহরণস্বরূপ কোনও ব্যবহারকারীর পাসওয়ার্ড পুনরায় সেট করে এবং ইমেলের মাধ্যমে তাকে একটি নতুন পাঠায়। পারফেক্ট।

এখন, আপনি যদি নিজের ক্লাসটি ইউনিট-টেস্ট করতে চান তবে কি হবে? আপনি পারবেন না, কারণ যতবার আপনি পাসওয়ার্ডটি পুনরায় সেট করে সেই পদ্ধতিটি পরীক্ষা করতে চান, এটি ডাটাবেস পরিবর্তন করে (যা ইউনিট পরীক্ষার জন্য উপযুক্ত নয়) এবং তদুপরি একটি ইমেল প্রেরণ করে (যা আরও খারাপ)।

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

void ResetPassword(UserIdentifier userId)
{
    ...
    new MailSender().SendPasswordReset(userMail, newPassword);
}

তুমি কর:

void ResetPassword(IMailSender sender, UserIdentifier userId)
{
    ...
    sender.SendPasswordReset(userMail, newPassword);
}

যা মক এবং স্টাব ব্যবহার করতে দেয়।

আপনার আইওসি প্রয়োগ করার চেষ্টা করুন CommunicationUtilities। ঠিক আছে, আপনি পারবেন না। এ কারণেই এটি ভেঙে গেছে।


হাই মাইনা, সুতরাং যদি আমি সঠিকভাবে বুঝতে পারি তবে সমস্ত পাইপিং সহ এখনও একটি ব্যাকগ্রাউন্ড শ্রেণি তৈরি করা যথাযথ এবং তারপরে এটি একটি ইন্টারফেসের সাথে বিমূর্ত করুন এবং আপনার প্রথম স্নিপেটের মতো ক্লাস থেকে সরাসরি কল করার পরিবর্তে ইন্টারফেসটি ফাংশনে পাস করুন।
ব্যবহারকারী 60812

1
@ ব্যবহারকারী 60812: সংক্ষেপে, আইওসি সম্পর্কে পড়ুন। একটি সহজ মন্তব্যে পুরো বিষয়টি ব্যাখ্যা করা কঠিন হবে।
আর্সেনী মোরজেনকো

1
স্ট্রিং ট্রুনকেটরের মতো সত্যিকারের জেনেরিক ইউটিলিটি ফাংশন সম্পর্কে কী বলা যায়?
jbyrd

2
@ মাইনমা ​​- দুঃখিত, আমি অনুসরণ করি না। হ্যাঁ, আমি যা চাই তার লাইনের পাশাপাশি। তবে ট্রানসেট () সি # তে অন্তর্নির্মিত নয়, তাই আমি ভাবছিলাম যে কোনও ধরণের ইউটিলিটি শ্রেণিতে এই জাতীয় জেনারেল ইউটিলিটি ফাংশনটি আটকে রাখা কি বুদ্ধিমান হবে।
jbyrd

2
এই উত্তরটি সমস্যাটিকে সংজ্ঞায়িত করে নির্দিষ্ট করে দিয়েছে যে এই বিশেষ ক্ষেত্রে কোনও ব্যবহার শ্রেণীর প্রয়োজন নেই। তবে সাধারণভাবে সর্বদা কিছু "সহায়ক" শৈলী পদ্ধতি রয়েছে যা কোথাও ফিট হয় না।
usr ডিরেক্টরির

9

প্রশ্নটি একটি বৈধ একটি, এমনকি দেওয়া উদাহরণটি না থাকলেও। ময়নার দেওয়া উত্তরটি নির্ভুল, খুব নির্দিষ্ট প্রসঙ্গে, যা আমার কাছে নয়, বলেছিলেন "ইউটিলিটি" শ্রেণির জন্য উপযুক্ত প্রসঙ্গ context

ব্যক্তিগতভাবে, আমি একটি ফোল্ডার তৈরি করি Helpersযেখানে আমি যে কোনও জায়গা থেকে যেমন এক্সটেনশনের মতো ডেকে ফাংশনগুলি রেখেছি সে ক্ষেত্রে হ্যাঁ, তারা স্থির।

এখন, যদি এর থেকে আরও ভাল উপায় থাকে তবে আমি শিখতে পেরে আনন্দিত হব তবে এখন পর্যন্ত:

  • এক্সটেনশানগুলির সাথে আমি কিছুই ভুল দেখছি না।
  • আমি একটি নির্দিষ্ট ফোল্ডারে তাদের গ্রুপিংয়ে কোনও ভুল দেখছি না।

এখন, একটি এক্সটেনশানটি কেবল সিনট্যাক্সিক চিনি, এটি ক্লাসিক ফাংশনও হতে পারে।


6

পূর্বে প্রদত্ত উত্তরের কোনওটিই আসল প্রশ্নের উত্তর দেয় না। ব্যবহারকারী 60812 কেবল কোনও এমভিসি প্রকল্পের ভিতরে কোনও ইউটিলিটি ক্লাস রাখবে তা জিজ্ঞাসা করা হয়েছিল। প্রত্যেকেই একক উদাহরণ ধরেছিলেন এবং হাতছাড়া প্রশ্ন ব্যতীত সমস্ত কিছু নিয়ে ছুটে আসেন।

@ ব্যবহারকারী 60812, আপনি চান বিমূর্ততার স্তরের উপর নির্ভর করে, আমি চাই:

  • ক) একটি ফোল্ডার তৈরি করুন এবং সেই ফোল্ডারের মধ্যে ইউটিলিটি ক্লাস তৈরি করুন
  • খ) ইউটিলিটি ক্লাস (সমাবেশ পুনরায় ব্যবহারের ইচ্ছা অনুমান করে) ধরে রাখার জন্য একটি প্রকল্প তৈরি করুন।
  • গ) আপনার ইউটিলিটিগুলি কোনও পরিষেবা আর্কিটেকচারে এক্সট্রপোলেট করুন এবং তাদের কাছে কল করুন

আরও ভাল উত্তর সহ একটি অনুরূপ প্রশ্নের লিঙ্ক এখানে

এই প্রোগ্রামটিতে


1

ইউটিলিটিগুলির জন্য স্ট্যাটিক ক্লাস তৈরি করবেন না। পরিসংখ্যান বেশিরভাগ ক্ষেত্রেই খারাপ। তাদের পরিচালকদেরও বলবেন না। আপনি যেভাবে কাজ করছেন তা এটিকে একটি লজিকাল নেমস্পেসে স্থাপন করা উচিত।

উদাহরণ স্বরূপ:

namespace Application.Notifications.Email
{
   public interface ISendEmailCommand
   {
      void Execute(Email email);
   }
}

ইমেল ঠিকানা, বিষয় এবং দেহ পৃথক উদ্বেগ, তাই এর জন্য আমার একটি বর্গ কাঠামো থাকবে, সুতরাং আমি কেন Email emailউপরে উদাহরণ হিসাবে ব্যবহার করেছি ।


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