কোনও প্রয়োগের পাশেই লগিং করা কি এসআরপি লঙ্ঘন?


19

চতুর সফ্টওয়্যার বিকাশ এবং সমস্ত নীতি (এসআরপি, ওসিপি, ...) চিন্তা করার সময় আমি নিজেকে জিজ্ঞাসা করি কিভাবে লগিংয়ের চিকিত্সা করা যায়।

কোনও প্রয়োগের পাশেই লগিং করা কি এসআরপি লঙ্ঘন?

আমি বলব yesকারণ বাস্তবায়নটি লগ ছাড়াও চালাতে সক্ষম হওয়া উচিত। তাহলে আমি লগিংকে আরও ভালভাবে কীভাবে বাস্তবায়ন করতে পারি? আমি কিছু নিদর্শনগুলি পরীক্ষা করেছি এবং এই সিদ্ধান্তে পৌঁছেছি যে কোনও ব্যবহারকারীর সংজ্ঞায়িত উপায়ে নীতিগুলি লঙ্ঘন না করা, তবে যে কোনও প্যাটার্ন যা কোনও নীতি লঙ্ঘন করার জন্য পরিচিত তা ব্যবহার করা হ'ল সাজসজ্জার প্যাটার্নটি ব্যবহার করা।

ধরা যাক যে এসআরপি লঙ্ঘন ছাড়াই আমাদের সম্পূর্ণ উপাদানগুলির একটি গুচ্ছ রয়েছে এবং তারপরে আমরা লগিং যুক্ত করতে চাই।

  • উপাদান ক
  • উপাদান বি এ ব্যবহার করে

আমরা এ এর ​​জন্য লগিং চাই, তাই আমরা ইন্টারফেস I প্রয়োগ করে এ দুটি দিয়ে সজ্জিত অন্য একটি উপাদান তৈরি করি I

  • ইন্টারফেস আমি
  • উপাদান এল (সিস্টেমের লগিং উপাদান)
  • উপাদান ক প্রয়োগ করে I
  • উপাদান ডি প্রয়োগ করে I, সজ্জিত / এ ব্যবহার করে, লগিংয়ের জন্য এল ব্যবহার করে
  • উপাদান বি একটি আই ব্যবহার করে

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

অসুবিধা: - আরও উপাদান এবং আরও পরীক্ষা

আমি জানি এটি অন্য একটি মুক্ত আলোচনার প্রশ্ন বলে মনে হচ্ছে, তবে আমি আসলে জানতে চাই যে কেউ ডেকরেটর বা এসআরপি লঙ্ঘনের চেয়ে আরও ভাল লগিং কৌশল ব্যবহার করে কিনা। স্ট্যাটিক সিঙ্গলটন লগার যা ডিফল্ট নললগার হিসাবে হয় এবং সিসলগ-লগিং চাইলে, রানটাইমের সময় একটি বাস্তবায়ন অবজেক্টটি পরিবর্তন করতে পারে?



আমি ইতিমধ্যে এটি পড়েছি এবং উত্তর সন্তোষজনক নয়, দুঃখিত।
আইচ


@ মার্করোগার্স সেই আকর্ষণীয় নিবন্ধটি ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ। চাচা বব 'ক্লিন কোড'-এ বলেছেন, একটি দুর্দান্ত এসআরপি উপাদান একই স্তরের বিমূর্ততায় অন্যান্য উপাদানগুলির সাথে কাজ করছে। আমার কাছে ব্যাখ্যাটি বোঝা সহজ যেহেতু প্রসঙ্গটিও খুব বড় হতে পারে। তবে আমি প্রশ্নের উত্তর দিতে পারি না, কারণ কোনও লগারের প্রসঙ্গ বা বিমূর্ততা কী?
আইচ

3
"আমার কাছে উত্তর নয়" বা "উত্তরটি সন্তুষ্ট নয়" কিছুটা বরখাস্ত। আপনি কীভাবে বিশেষত অসন্তুষ্টিজনক তা বিবেচনা করতে পারেন (আপনার কী প্রয়োজনের উত্তরটি সেই উত্তরটি পূরণ করেন নি? আপনার প্রশ্নটি সম্পর্কে বিশেষত কোনটি বিশেষ?) তারপরে আপনার প্রয়োজনীয়তা / অনন্য দিকটি স্পষ্টভাবে ব্যাখ্যা করা হয়েছে কিনা তা নিশ্চিত করার জন্য আপনার প্রশ্নটি সম্পাদনা করুন। উদ্দেশ্যটি হ'ল আপনার প্রশ্নটি আরও স্পষ্টতর এবং আরও বেশি কেন্দ্রীভূত করার জন্য এটির উন্নতি করার জন্য আপনার সম্পাদনা করা, বয়লারপ্লেট জিজ্ঞাসা না করা আপনার প্রশ্নটি অন্যরকম / কেন তা সমর্থনযোগ্যতা ছাড়াই বন্ধ করা উচিত নয় as (আপনি অন্যান্য উত্তরের বিষয়েও মন্তব্য করতে পারেন))
ডিডাব্লু

উত্তর:


-1

হ্যাঁ এটি এসআরপি লঙ্ঘন কারণ লগিং ক্রস কাটা উদ্বেগ।

সঠিক উপায়টি হ'ল লগার শ্রেণিতে (ইন্টারসেপশন) লগিং অর্পণ করা যার একমাত্র উদ্দেশ্য লগ করা - এসআরপি মেনে চলা।

একটি ভাল উদাহরণের জন্য এই লিঙ্কটি দেখুন: https://msdn.microsoft.com/en-us/library/dn178467%28v=pandp.30 %29.aspx

এখানে একটি সংক্ষিপ্ত উদাহরণ :

public interface ITenantStore
{
    Tenant GetTenant(string tenant);
    void SaveTenant(Tenant tenant);
}

public class TenantStore : ITenantStore
{
    public Tenant GetTenant(string tenant)
    {....}

    public void SaveTenant(Tenant tenant)
    {....}
} 

public class TenantStoreLogger : ITenantStore
{
    private readonly ILogger _logger; //dep inj
    private readonly ITenantStore _tenantStore;

    public TenantStoreLogger(ITenantStore tenantStore)
    {
        _tenantStore = tenantStore;
    }

    public Tenant GetTenant(string tenant)
    {
        _logger.Log("reading tenant " + tenant.id);
        return _tenantStore.GetTenant(tenant);
    }

    public void SaveTenant(Tenant tenant)
    {
        _tenantStore.SaveTenant(tenant);
        _logger.Log("saving tenant " + tenant.id);
    }
}

বেনিফিট অন্তর্ভুক্ত

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

সুন্দর লিঙ্কের জন্য আপনাকে ধন্যবাদ। পৃষ্ঠার চিত্র 1 হ'ল আসলে আমি আমার প্রিয় সমাধানটি বলব। ক্রস কাটা উদ্বেগের তালিকা (লগিং, ক্যাশিং ইত্যাদি) এবং ডেকরেটার প্যাটার্নটি সর্বাধিক জেনারিক সমাধান এবং আমি আমার চিন্তাগুলির সাথে পুরোপুরি ভুল না হওয়ার জন্য খুশি, যদিও বৃহত্তর সম্প্রদায় সেই বিমূর্তিটি এবং ইনলাইন লগিংটি বাদ দিতে চাই ।
আইচ

2
আমি আপনাকে কোথাও _ লগার ভেরিয়েবল বরাদ্দ করতে দেখছি না। আপনি কি কনস্ট্রাক্টর ইঞ্জেকশন ব্যবহারের পরিকল্পনা করছেন এবং ভুলে গেছেন? যদি তা হয় তবে আপনি সম্ভবত একটি সংকলক সতর্কতা পেয়ে যাবেন।
ব্যবহারকারী 2023861

27
টেন্যান্টস্টোরকে সাধারণ উদ্দেশ্যে লগারের পরিবর্তে লগার, যার জন্য এন + 1 ক্লাসের প্রয়োজন হয় (যখন আপনি ল্যান্ডলর্ডস্টোর, একটি ফুস্টোর, একটি বারস্টোর ইত্যাদি যোগ করেন) আপনার একটি টেন্যান্টস্টোর লগার একটি টেন্যান্টস্টোরের সাথে ডাইপড থাকে, একটি ফোরস্টোরলগার একটি ফুস্টোরের সাথে ডাইপড হয় , ইত্যাদি ... 2N ক্লাসের প্রয়োজন। আমি যতদূর বলতে পারি শূন্য সুবিধার জন্য। যখন আপনি নো-লগিং ইউনিট পরীক্ষা করতে চান, আপনাকে কেবল একটি নললগার কনফিগার করার পরিবর্তে এন ক্লাসগুলি পুনরায় চালু করতে হবে। আইএমও, এটি খুব খারাপ পদ্ধতির approach
user949300

6
প্রতিটি একক শ্রেণীর জন্য যা করার জন্য লগিংয়ের প্রয়োজন তা আপনার কোড বেসের জটিলতা তাত্পর্যপূর্ণভাবে বাড়িয়ে তোলে (যদি না খুব কম ক্লাসে লগিং থাকে যে আপনি এটিকে আর ক্রস কাটিং উদ্বেগও বলবেন না)। এটি শেষ পর্যন্ত কেবল সংখ্যক ইন্টারফেসের বজায় রাখার জন্য কোডটিকে কম রক্ষণাবেক্ষণ করে তোলে যা একক দায়িত্বের নীতিটি তৈরি করা সমস্ত কিছুর বিরুদ্ধে যায়।
jpmc26

9
Downvoted। আপনি ভাড়াটে শ্রেণি থেকে লগিং উদ্বেগ সরিয়ে ফেলেছেন, কিন্তু এখন আপনার TenantStoreLoggerপ্রতিবার TenantStoreপরিবর্তন হবে। আপনি প্রাথমিক সমাধানের চেয়ে উদ্বেগগুলি আর আলাদা করছেন না।
লরেন্ট এলএ রিজ্জা

61

আমি বলব আপনি এসআরপিকে খুব গুরুত্বের সাথে নিচ্ছেন। যদি আপনার কোডটি পরিপাটি থাকে যে লগিংটি এসআরপি-র একমাত্র "লঙ্ঘন" হয় তবে আপনি অন্য সমস্ত প্রোগ্রামারদের 99% এর চেয়ে ভাল করছেন, এবং আপনার নিজের পিছনে থাপ্পড় দেওয়া উচিত।

এসআরপি এর মূল বিষয় হ'ল ভয়ঙ্কর স্প্যাগেটি কোড এড়ানোর জন্য যেখানে বিভিন্ন জিনিস করে এমন কোডগুলি একসাথে মিশ্রিত হয়। ফাংশনাল কোডের সাথে লগিং মেশানো আমার জন্য কোনও অ্যালার্ম ঘন্টা বাজায় না।


19
@ আইচ: আপনার পছন্দগুলি হ'ল আপনার ক্লাসে লগিংকে হার্ড-ওয়্যার করা, কোনও হ্যান্ডেলটি কোনও লগারে পাস করা বা কোনও কিছুই লগইন করা নয়। আপনি যদি অন্য কিছুর ব্যয়ে এসআরপি সম্পর্কে অতি-কঠোর হতে চলেছেন তবে আমি কখনও কোনও কিছু লগ না করার পরামর্শ দেব। আপনার সফ্টওয়্যারটি কী করছে সে সম্পর্কে আপনার যা যা জানা দরকার তা ডিবাগারের সাথে নুডলড করা যায়। এসআরপিতে পি মানে "নীতি," নয় "প্রকৃতির দৈহিক আইন যা কখনই ভাঙতে হবে না।
ব্লারফ্লার

3
@ আইচ: আপনার প্রয়োজন অনুসারে আপনার ক্লাসে লগিং সন্ধান করতে সক্ষম হওয়া উচিত, অন্যথায় আপনি YAGNI লঙ্ঘন করছেন। যদি লগিংটি টেবিলে থাকে তবে আপনি ক্লাসের যে কোনও প্রয়োজনের জন্য যেমন বৈধ লগার হ্যান্ডেল সরবরাহ করেন, ততটা পরীক্ষায় উত্তীর্ণ এমন শ্রেণীর চেয়ে পছন্দসই। এটি প্রকৃত লগ এন্ট্রি তৈরি করে বা বিট বালতিতে ফেলে দেয় তা আপনার শ্রেণীর উদাহরণটি কীভাবে ইনস্ট্যান্ট করেছে তা উদ্বেগ; ক্লাস নিজেই যত্ন নেওয়া উচিত নয়।
ব্লারফ্লার

3
@ আইচ ইউনিট পরীক্ষার বিষয়ে আপনার প্রশ্নের উত্তর দিতে:, আপনি যা করেন তা হ'ল প্রাক্কলিত Do you mock the logger?। আপনার এমন একটি ILoggerইন্টারফেস থাকা উচিত যা লগার কী করে তা সংজ্ঞায়িত করে। পরীক্ষার অধীনে কোডটি ILoggerআপনার নির্দিষ্ট করে একটি ইনজেকশনে আসে । পরীক্ষার জন্য, আপনার আছে class TestLogger : ILogger। এই সম্পর্কে দুর্দান্ত জিনিস হ'ল TestLoggerশেষ স্ট্রিং বা ত্রুটিযুক্ত লগের মতো বিষয়গুলি প্রকাশ করতে পারে। পরীক্ষাগুলি যাচাই করতে পারে যে পরীক্ষার অধীনে কোডটি সঠিকভাবে লগইন করছে। উদাহরণস্বরূপ, একটি পরীক্ষা হতে পারে UserSignInTimeGetsLogged(), যেখানে পরীক্ষাগুলি লগডের TestLoggerজন্য পরীক্ষা করে।
কার্টিসএইচএক্স

5
99% কিছুটা কম বলে মনে হচ্ছে। আপনি সম্ভবত সমস্ত প্রোগ্রামারগুলির 100% এর চেয়ে ভাল।
পল ড্রাগার

2
বিচক্ষণতার জন্য +1 আমাদের আরও এই ধরণের চিন্তাভাবনা দরকার: শব্দ এবং বিমূর্ত নীতিগুলিতে কম ফোকাস এবং একটি রক্ষণাবেক্ষণযোগ্য কোড বেস থাকার বিষয়ে আরও ফোকাস ।
jpmc26

15

না, এটি এসআরপি লঙ্ঘন নয়।

লগতে আপনি যে বার্তাগুলি প্রেরণ করেন সেগুলি পার্শ্ববর্তী কোডের একই কারণে পরিবর্তন করা উচিত।

এসআরপি লঙ্ঘন কী তা সরাসরি কোডে লগ করার জন্য একটি নির্দিষ্ট গ্রন্থাগার ব্যবহার করছে। আপনি যদি লগিংয়ের পদ্ধতি পরিবর্তন করার সিদ্ধান্ত নেন, এসআরপি জানিয়েছে যে এটি আপনার ব্যবসায়ের কোডকে প্রভাবিত করবে না।

কিছু প্রকারের বিমূর্ততা Loggerআপনার প্রয়োগের কোডে অ্যাক্সেসযোগ্য হওয়া উচিত এবং আপনার প্রয়োগটি কেবলমাত্র "লগতে এই বার্তাটি প্রেরণ করুন" তা বলা হয়েছে, এটি কীভাবে হয়েছে তা নিয়ে কোনও উদ্বেগ নেই। লগিংয়ের সঠিক উপায় (এমনকি টাইমস্ট্যাম্পিং) সম্পর্কে সিদ্ধান্ত নেওয়া আপনার বাস্তবায়নের দায়িত্ব নয়।

আপনার বাস্তবায়নের পরেও এটি জানা উচিত নয় যে লগার এটিতে বার্তা প্রেরণ করছে কিনা NullLogger

বলেছে।

আমি খুব দ্রুত ক্রস কাটিয়া উদ্বেগ হিসাবে লগিং বন্ধ করব না । আপনার বাস্তবায়ন কোডে ঘটে যাওয়া নির্দিষ্ট ইভেন্টগুলি সনাক্ত করতে লগগুলি প্রেরণ করা বাস্তবায়ন কোডের অন্তর্ভুক্ত।

ক্রস কাটিয়া উদ্বেগ কী, ওটিওএইচ, এক্সিকিউশন ট্রেসিং : লগিং প্রতিটি পদ্ধতিতে প্রবেশ করে এবং প্রস্থান করে। এটি করার জন্য এওপিকে সেরা স্থান দেওয়া হয়েছে।


আসুন ধরা যাক লগার বার্তাটি 'লগইন ব্যবহারকারী xyz', যা একটি লগারে প্রেরণ করা হয় যা একটি টাইমস্ট্যাম্প প্রিপেন্ড করে ইত্যাদি you আপনি কি জানেন যে 'লগইন' বাস্তবায়নের অর্থ কী? এটি কি কোনও কুকি বা অন্য কোনও প্রক্রিয়া নিয়ে সেশন শুরু করছে? আমি মনে করি একটি লগইন বাস্তবায়নের বিভিন্ন উপায় রয়েছে, সুতরাং ব্যবহারকারীর লগ ইন হওয়া বাস্তবায়নের সাথে যুক্তিযুক্ত যুক্তিযুক্ত কিছুই নেই different এটি বিভিন্ন উপাদান সাজানোর আরও একটি দুর্দান্ত উদাহরণ (ওআউথলগিন, সেশনলোগিন, বেসিক অনুমোদনের লোগিন বলুন) একই জিনিস করছেন Loginএকই লগার দিয়ে সজ্জিত একটি আন্তঃ পৃষ্ঠ হিসাবে ।
আইচ

এটি "লগইন ব্যবহারকারী xyz" বার্তাটির অর্থ কী তা নির্ভর করে। এটি যদি লগইন সফল হয়েছে তা চিহ্নিত করে, লগতে বার্তা প্রেরণ লগইন ব্যবহারের ক্ষেত্রে সম্পর্কিত। স্ট্রিং হিসাবে লগইন তথ্য উপস্থাপনের নির্দিষ্ট উপায় (OAuth, সেশন, LDAP, NTLM, আঙুলের ছাপ, হামস্টার চাকা) শংসাপত্র বা লগইন কৌশল প্রতিনিধিত্বকারী নির্দিষ্ট শ্রেণীর অন্তর্গত। এটি অপসারণ করার কোন বাধ্যতামূলক প্রয়োজন নেই। এই সিপিসিফিক কেস কোনও ক্রস কাটা উদ্বেগ নয়। এটি লগইন ব্যবহারের ক্ষেত্রে সুনির্দিষ্ট।
লরেন্ট এলএ রিজ্জা

7

লগিং প্রায়শই একটি ক্রস কাটিয়া উদ্বেগ হিসাবে বিবেচিত হয় আমি লগিংকে বাস্তবায়ন থেকে পৃথক করার জন্য এওপি ব্যবহারের পরামর্শ দেব।

ভাষার উপর নির্ভর করে আপনি এটি সম্পাদন করতে একটি ইন্টারসেপ্টর বা কিছু এওপি ফ্রেমওয়ার্ক (যেমন জাভাতে AspectJ) ব্যবহার করবেন।

প্রশ্নটি হ'ল এটি যদি ঝামেলার পক্ষে মূল্যবান হয়। নোট করুন যে এই বিচ্ছেদটি আপনার প্রকল্পের জটিলতা বাড়িয়ে তুলবে যখন খুব অল্প সুবিধা দেয়।


2
আমি দেখেছি বেশিরভাগ এওপি কোডটি ছিল প্রতিটি পদ্ধতির প্রতিটি প্রবেশ এবং প্রস্থান পদক্ষেপ লগ করা about আমি কেবল কিছু ব্যবসায়িক লজিক অংশ লগ করতে চাই। সুতরাং সম্ভবত এটি কেবল বর্ণিত পদ্ধতিগুলিতে লগ করা সম্ভব তবে এওপি মোটেও কেবল স্ক্রিপ্টিং ভাষা এবং ভার্চুয়াল মেশিনের পরিবেশে উপস্থিত থাকতে পারে, তাই না? যেমন সি ++ এটি অসম্ভব। আমি স্বীকার করি যে আমি এওপি পদ্ধতির সাথে খুব সন্তুষ্ট নই, তবে সম্ভবত কোনও পরিষ্কার সমাধান নেই।
আইচ

1
@Aitch। "সি ++ এটি অসম্ভব।" : আপনি যদি "এওপ সি ++" গুগল করেন তবে আপনি এটি সম্পর্কে নিবন্ধগুলি পাবেন। "... আমি যে এওপি কোড দেখেছি তা হ'ল প্রতিটি পদ্ধতির প্রতিটি প্রবেশ এবং প্রস্থান পদক্ষেপটি লগ করা। আমি কেবল কিছু ব্যবসায়িক লজিক অংশ লগইন করতে চাই" " অ্যাওপ আপনাকে পরিবর্তিত করার পদ্ধতিগুলি খুঁজতে প্যাটার্নগুলি নির্ধারণ করতে দেয়। নামস্থান থেকে সব পদ্ধতি মানে ওই "my.busininess *।"
k3b

1
লগিং প্রায়শই কোনও ক্রস উদ্বেগ নয়, বিশেষত যখন আপনি চান আপনার লগটিতে আকর্ষণীয় তথ্য থাকতে পারে, যেমন একটি ব্যতিক্রম স্ট্যাক ট্রেসের মধ্যে থাকা তথ্যের চেয়ে আরও বেশি তথ্য।
লরেন্ট এলএ রিজ্জা

5

এই ভাল লাগছে। আপনি মোটামুটি স্ট্যান্ডার্ড লগিং ডেকরেটর বর্ণনা করছেন। তোমার আছে:

উপাদান এল (সিস্টেমের লগিং উপাদান)

এটির একটি দায়িত্ব রয়েছে: লগিং তথ্য যা এটি পাস করা হয়।

উপাদান ক প্রয়োগ করে I

এটির একটি দায়িত্ব রয়েছে: ইন্টারফেস I এর একটি বাস্তবায়ন সরবরাহ (আমি ধরে নিচ্ছি যে আমি যথাযথভাবে এসআরপি-অনুগত, এটি)।

এটি গুরুত্বপূর্ণ অংশ:

উপাদান ডি প্রয়োগ করে I, সজ্জিত / এ ব্যবহার করে, লগিংয়ের জন্য এল ব্যবহার করে

যখন এইভাবে বলা হয়েছে, এটি জটিল শোনাচ্ছে তবে এটিকে দেখুন: কম্পোনেন্ট ডি একটি কাজ করে: এ এবং এলকে একত্রিত করে।

  • উপাদান ডি লগ করে না; এটি এলকে প্রতিনিধিত্ব করে
  • উপাদান ডি নিজেই প্রয়োগ করে না; এটি এটিকে প্রতিনিধিত্ব করে

শুধুমাত্র দায়িত্ব উপাদান ডি আছে নিশ্চিত যে যখন একটি ব্যবহার করা হয় এল বিজ্ঞাপিত করা হয় করা হয়। এ এবং এল এর বাস্তবায়ন উভয় জায়গায়। এটি সম্পূর্ণ এসআরপি-সম্মতিযুক্ত, পাশাপাশি ওসিপির একটি ঝরঝরে উদাহরণ এবং সাজসজ্জারের একটি দুর্দান্ত সাধারণ ব্যবহার।

একটি গুরুত্বপূর্ণ সতর্কতামূলক: যখন ডি আপনার লগিং উপাদান এল ব্যবহার করে, এটি এমনভাবে করা উচিত যাতে আপনি কীভাবে লগইন করছেন তা পরিবর্তন করতে দেয় । এটি করার সহজ উপায় হ'ল এল দ্বারা প্রয়োগ করা একটি ইন্টারফেস আইএল হ'ল তারপরে:

  • উপাদান ডি লগ করার জন্য একটি আইএল ব্যবহার করে; এল একটি উদাহরণ সরবরাহ করা হয়
  • উপাদান ডি কার্যকারিতা সরবরাহ করতে একটি আই ব্যবহার করে; এ এর একটি উদাহরণ সরবরাহ করা হয়েছে
  • উপাদান বি একটি আই ব্যবহার করে; ডি একটি উদাহরণ সরবরাহ করা হয়

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


আমি আসলে কেবল সি # জানি যাতে দেশীয় প্রতিনিধিদের সমর্থন রয়েছে। এজন্যই আমি লিখেছি D implements I। আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ।
এইচ

1

আপনার ক্রস কাটার উদ্বেগ হওয়ায় অবশ্যই এটি এসআরপি লঙ্ঘন। তবে আপনি এমন কোনও শ্রেণি তৈরি করতে পারেন যা কোনও ক্রিয়াকলাপ সম্পাদনের সাথে লগিং রচনার জন্য দায়ী।

উদাহরণ:

class Logger {
   ActuallLogger logger;
   public Action ComposeLog(string msg, Action action) {
      return () => {
          logger.debug(msg);
          action();
      };
   }
}

2
Downvoted। লগিং প্রকৃতপক্ষে একটি ক্রস কাটা উদ্বেগ। আপনার কোডটিতে পদ্ধতি কলগুলি সিকোয়েন্সিংয়েরও তাই। এসআরপি লঙ্ঘন দাবি করার পক্ষে এটি যথেষ্ট কারণ নয়। আপনার অ্যাপ্লিকেশনটিতে কোনও নির্দিষ্ট ইভেন্টের উপস্থিতি লগ করা কোনও ক্রস-কাটিং উদ্বেগ নয়। এই বার্তাগুলি যে কোনও আগ্রহী ব্যবহারকারীর কাছে পৌঁছে দেওয়া সত্যই একটি পৃথক উদ্বেগ, এবং এটি বাস্তবায়ন কোডে বর্ণনা করা এসআরপি লঙ্ঘন।
লরেন্ট এলএ রিজ্জা

"সিকোয়েন্সিং পদ্ধতি কল" বা কার্যকরী রচনা ক্রস কাটিয়া উদ্বেগ নয় বরং বাস্তবায়নের বিশদ। আমি তৈরি করা ফাংশনের দায়িত্ব হ'ল কোনও ক্রিয়া সহ লগ স্টেটমেন্ট রচনা করা। এই ফাংশনটি কী করে তা বর্ণনা করার জন্য আমার "এবং" শব্দটি ব্যবহার করার দরকার নেই।
পল নিকোনোইজিক

এটি বাস্তবায়নের বিশদ নয়। এটি আপনার কোড আকারে গভীর প্রভাব ফেলে।
লরেন্ট এলএ রিজ্জা

আমি মনে করি যে আমি "এই ফাংশনটি কী করে" এর দৃষ্টিকোণ থেকে এসআরপিকে দেখছি যেখানে আপনি এসআরপিকে "এই ফাংশনটি কীভাবে এটি করে" এর দৃষ্টিকোণ থেকে দেখছেন।
পল নিকোনোইচিজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.