এক্সএমএল মন্তব্যগুলি প্রয়োজনীয় ডকুমেন্টেশন?


10

আমি ডকুমেন্টেশনের জন্য এক্সএমএল মন্তব্যগুলির প্রয়োজনের অনুরাগী হয়ে থাকতাম। আমি তখন থেকে দুটি প্রধান কারণে আমার মন পরিবর্তন করেছি:

  1. ভাল কোডের মতো, পদ্ধতিগুলি স্ব-বর্ণনামূলক হওয়া উচিত।
  2. অনুশীলনে, বেশিরভাগ এক্সএমএল মন্তব্যগুলি অকেজো শব্দ যা কোনও অতিরিক্ত মান দেয় না।

অনেক সময় আমরা জেনেরিক মন্তব্যগুলি উত্পন্ন করার জন্য কেবল ঘোস্টডক ব্যবহার করি এবং অকেজো শব্দের অর্থ এই:

    /// <summary>
    /// Gets or sets the unit of measure.
    /// </summary>
    /// <value>
    /// The unit of measure.
    /// </value>
    public string UnitOfMeasure { get; set; }

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

আমি এই নিবন্ধ থেকে এই অংশটুকু পছন্দ :

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

কোডটি নিজে থেকে নিজেই ব্যাখ্যা করার জন্য পর্যাপ্ত না হলে আমাদের কেবল এক্সএমএল মন্তব্য ব্যবহার করা উচিত তা ভাবতে ভুল হয়?

আমি বিশ্বাস করি এটি একটি ভাল উদাহরণ যেখানে এক্সএমএল মন্তব্যগুলি সুন্দর কোডটিকে কুৎসিত করে তোলে। এটি একটি ক্লাস লাগে ...

public class RawMaterialLabel : EntityBase
{
    public long     Id                      { get; set; }
    public string   ManufacturerId          { get; set; }
    public string   PartNumber              { get; set; }
    public string   Quantity                { get; set; }
    public string   UnitOfMeasure           { get; set; }
    public string   LotNumber               { get; set; }
    public string   SublotNumber            { get; set; }
    public int      LabelSerialNumber       { get; set; }
    public string   PurchaseOrderNumber     { get; set; }
    public string   PurchaseOrderLineNumber { get; set; }
    public DateTime ManufacturingDate       { get; set; }
    public string   LastModifiedUser        { get; set; }
    public DateTime LastModifiedTime        { get; set; }
    public Binary   VersionNumber           { get; set; }

    public ICollection<LotEquipmentScan> LotEquipmentScans { get; private set; }
}

... এবং এটি এ পরিণত:

/// <summary>
/// Container for properties of a raw material label
/// </summary>
public class RawMaterialLabel : EntityBase
{
    /// <summary>
    /// Gets or sets the id.
    /// </summary>
    /// <value>
    /// The id.
    /// </value>
    public long Id { get; set; }

    /// <summary>
    /// Gets or sets the manufacturer id.
    /// </summary>
    /// <value>
    /// The manufacturer id.
    /// </value>
    public string ManufacturerId { get; set; }

    /// <summary>
    /// Gets or sets the part number.
    /// </summary>
    /// <value>
    /// The part number.
    /// </value>
    public string PartNumber { get; set; }

    /// <summary>
    /// Gets or sets the quantity.
    /// </summary>
    /// <value>
    /// The quantity.
    /// </value>
    public string Quantity { get; set; }

    /// <summary>
    /// Gets or sets the unit of measure.
    /// </summary>
    /// <value>
    /// The unit of measure.
    /// </value>
    public string UnitOfMeasure { get; set; }

    /// <summary>
    /// Gets or sets the lot number.
    /// </summary>
    /// <value>
    /// The lot number.
    /// </value>
    public string LotNumber { get; set; }

    /// <summary>
    /// Gets or sets the sublot number.
    /// </summary>
    /// <value>
    /// The sublot number.
    /// </value>
    public string SublotNumber { get; set; }

    /// <summary>
    /// Gets or sets the label serial number.
    /// </summary>
    /// <value>
    /// The label serial number.
    /// </value>
    public int LabelSerialNumber { get; set; }

    /// <summary>
    /// Gets or sets the purchase order number.
    /// </summary>
    /// <value>
    /// The purchase order number.
    /// </value>
    public string PurchaseOrderNumber { get; set; }

    /// <summary>
    /// Gets or sets the purchase order line number.
    /// </summary>
    /// <value>
    /// The purchase order line number.
    /// </value>
    public string PurchaseOrderLineNumber { get; set; }

    /// <summary>
    /// Gets or sets the manufacturing date.
    /// </summary>
    /// <value>
    /// The manufacturing date.
    /// </value>
    public DateTime ManufacturingDate { get; set; }

    /// <summary>
    /// Gets or sets the last modified user.
    /// </summary>
    /// <value>
    /// The last modified user.
    /// </value>
    public string LastModifiedUser { get; set; }

    /// <summary>
    /// Gets or sets the last modified time.
    /// </summary>
    /// <value>
    /// The last modified time.
    /// </value>
    public DateTime LastModifiedTime { get; set; }

    /// <summary>
    /// Gets or sets the version number.
    /// </summary>
    /// <value>
    /// The version number.
    /// </value>
    public Binary VersionNumber { get; set; }

    /// <summary>
    /// Gets the lot equipment scans.
    /// </summary>
    /// <value>
    /// The lot equipment scans.
    /// </value>
    public ICollection<LotEquipmentScan> LotEquipmentScans { get; private set; }
}

2
আমি যুক্তি দেব যে এক্সএমএল এই উদ্দেশ্যে একটি ভয়ঙ্কর পছন্দ। এটি হাতের ব্যবহারের জন্য খুব ভার্জোজ এবং সাধারণ। এমন একটি মার্কআপ ভাষার জন্য পুনর্গঠনপ্রযুক্তি এবং স্ফিংক্স দেখুন যা সেগুলি অপঠনযোগ্য না করে মন্তব্যগুলিতে এম্বেড করে।
লেটি

2
@ লাট্টিওয়্যার: ভিজ্যুয়ালস্টুডিও এই স্টাইলটি ডিফল্টরূপে সমর্থন করে, কোনও অতিরিক্ত প্লাগইন বা সরঞ্জামের প্রয়োজন নেই। এইভাবে উত্পন্ন মন্তব্যগুলি পপ-আপ সরঞ্জামদণ্ডগুলিতে তত্ক্ষণাত দৃশ্যমান।
হতাশ

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

উত্তর:


21

যদি আপনার মন্তব্যগুলি কেবল এটির মতো দেখায়:

/// <summary>
/// Gets or sets the sublot number.
/// </summary>
/// <value>
/// The sublot number.
/// </value>

তাহলে হ্যাঁ, এগুলি সমস্ত কার্যকর নয়। যদি তারা এই জাতীয় কিছু পড়েন:

/// <summary>
/// Gets or sets the sublot number.
/// Note that the sublot number is only used by the legacy inventory system.
/// Latest version of the online inventory system does not use this, so you can leave it null. 
/// Some vendors require it but if you don't set it they'll send a request for it specifically.
/// </summary>
/// <value>
/// The sublot number.
/// </value>

তাহলে আমি বলব তাদের মূল্য আছে have সুতরাং আপনার প্রশ্নের জবাব দিতে: মন্তব্যগুলি প্রয়োজনীয় যখন তারা কোডটি না বলে এমন কিছু বলে।

একটি ব্যতিক্রম: আপনি যদি কোনও লাইব্রেরি / এপিআই লেখেন যা জনসাধারণের জন্য উপলব্ধ হবে তবে প্রকাশ্যে অ্যাক্সেসযোগ্য যে কোনও বিষয়ে মন্তব্য করা ভাল । আমি একটি লাইব্রেরি ব্যবহার করে এবং এপিসিডিজিএফএসকেট কী তা ব্যাখ্যা না করে একটি ফাংশন দেখে ঘৃণা করি getAPCDGFSocket()(আমি এর মতো সহজ কিছুতেই খুশি হতে পারি This gets the Async Process Coordinator Data Generator File Socket)। সুতরাং সেক্ষেত্রে, আমি বলতে চাই যে সমস্ত মন্তব্য তৈরি করার জন্য কিছু সরঞ্জাম ব্যবহার করুন এবং তারপরে প্রয়োজনীয় যেগুলি প্রয়োজন তা নিজেই টুইট করুন (এবং দয়া করে আপনার ক্রিপ্টিক সংক্ষিপ্ত বিবরণটি ব্যাখ্যা করা হয়েছে তা নিশ্চিত করুন)।

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

... এবং পরিশেষে, আমি নিশ্চিত যে এই প্রশ্নটি সমস্ত স্টাইলের মন্তব্যের জন্য প্রাসঙ্গিক , কেবলমাত্র এক্সএমএল (যা আপনি ব্যবহার করছেন কারণ আপনি একটি নেট পরিবেশে কাজ করছেন) ব্যবহার করে ফরম্যাট করা হয়েছে তা নয়।


2
+1 - ঘোস্টডক আমার জন্য প্রথম সংস্করণটি, যা বয়লারপ্লেট, দ্বিতীয় সংস্করণে পরিণত করার জন্য একটি সূচনা পয়েন্ট, এতে বিস্তারিত ডোমেন জ্ঞান রয়েছে।
জেসি সি স্লিকার

4
কেন অংশ জন্য +1 । শুকনো নীতি প্রযোজ্য - নিজেকে পুনরাবৃত্তি না, এবং যদি কোড ইতিমধ্যেই বর্ণনাকারী একটি প্রশংসনীয় ভাল পেশা আছে কি অংশ, আপনার মন্তব্য অন্য কিছু ব্যাখ্যা উপর ফোকাস করা উচিত (সাধারণত কেন )।
ড্যানিয়েল বি

@ ড্যানিয়েলবি বা সম্ভবত আপনার কোনও মন্তব্যের প্রয়োজন হবে না;) আমি এই উত্তরটির সাথে বেশিরভাগ অংশে সম্মত হই "এই কোডটি কোড না বলে এমন কিছু বললে মন্তব্যগুলি প্রয়োজনীয়" in আমি মনে করি কোডটি যদি প্রয়োজনীয় সমস্ত কিছু বলে থাকে তবে মন্তব্যগুলিতে কোডে তথ্য না দেওয়া সত্ত্বেও আপনাকে মন্তব্যে আরও তথ্যের প্রয়োজন হবে না।
জিমি হোফা

1
@ ড্যানিয়েলবি - .NET- এ এক্সএমএল মন্তব্যগুলি প্রাথমিকভাবে এমন পরিস্থিতিতে তৈরি করা হয় যেখানে কোনও গ্রন্থাগার বা পরিষেবার শেষ ব্যবহারকারী প্রোগ্রামার তাদের কাছে সোর্স কোড উপলব্ধ থাকে না।
jfrankcarr

2
@ লাট্টিওয়্যার - এক্সএমএল মন্তব্যগুলি পৃথক নথিতে স্টাফ সন্ধানের তুলনায় বিগ টাইম সেভার ভিজ্যুয়াল স্টুডিওর ইন্টেলিসেন্সের সাথে নির্বিঘ্নে সংহত করেছে।
jfrankcarr

5

কোডটি পড়তে পারে এমন ব্যবহারকারীদের কাছে যে মন্তব্যগুলি অকেজো বলে মনে হচ্ছে সেগুলির পরিবর্তে উত্সটিতে অ্যাক্সেস নেই এমন ব্যবহারকারীদের পক্ষে দরকারী হয়ে উঠেছে। আপনার সংস্থার বাইরের লোকেরা যখন ক্লাসটি বাহ্যিক এপিআই হিসাবে ব্যবহৃত হয় তখন এটি ঘটে: আপনার এক্সএমএল ডক্স থেকে উত্পন্ন এইচটিএমএলগুলি আপনার ক্লাস সম্পর্কে শিখার একমাত্র উপায়।

এটি বলেছিল, একটি মন্তব্য যা শব্দের মধ্যে যোগ করা ফাঁকা জায়গাগুলির সাথে পদ্ধতির নামটির পুনরাবৃত্তি করে তা অকেজো থেকে যায়। যদি আপনার ক্লাসটি আপনার সংস্থার বাইরে ব্যবহার করা হয় তবে আপনার মানগুলির জন্য বৈধ ব্যাপ্তিগুলির জন্য আপনাকে নথী তৈরি করতে হবে। উদাহরণস্বরূপ, যদি আপনি এই সেটিং বলা উচিত UnitOfMeasureকরার nullঅবৈধ হয়, যে সেটার সরবরাহ মান শুরুতে বা স্ট্রিং শেষে স্পেস থাকতে পারবে না, ইত্যাদি। LabelSerialNumberএটি যদি কোনও সমভূমি থেকে পৃথক হয় তবে আপনার ব্যাপ্তিটিও নথিভুক্ত করা উচিত Int32: সম্ভবত এটি নেতিবাচক সংখ্যাগুলিকে অনুমতি দেয় না *, বা সাতটির বেশি সংখ্যার অনুমতি দেয় না। আপনার অভ্যন্তরীণ ব্যবহারকারীরা এটি গ্রহণযোগ্যতার জন্য গ্রহণ করতে পারেন, কারণ তারা দিনের পর দিন ক্রমিক সংখ্যাগুলি দেখেন তবে বাহ্যিক ব্যবহারকারীরা নির্দোষ সেটার মতো দেখতে ব্যতিক্রম দেখে সত্যই অবাক হতে পারেন।


* ... uintএক্ষেত্রে আরও ভাল পছন্দ হতে পারে


1
যখন আপনার উত্স নেই কেবল এটির জন্য নয়। যদি আপনার সম্পাদক তাদের পার্স করতে পারে (যেমন ভিজ্যুয়াল স্টুডিওটি এক্সএমএল মন্তব্যে করে) তবে তারা আপনাকে আলাদা কোনও ফাইলে নেভিগেট করার প্রয়োজন ছাড়াই মাউসওভার / পপআপ হিসাবে তথ্য দিতে পারে। একটি 1 লাইন ব্যাপ্তি বৈধকারক যা সংকীর্ণ পরিসীমাটির জন্য একটি অন্তর্নিহিত সীমাবদ্ধ তা আপনি যখন সেই ফাইলটিতে যান যেখানে সেটার প্রয়োগ করা হয় তখন তা স্পষ্ট হয়; আপনি "মাইক্রোব্যাবল.ফ্রো ..." টাইপ করতে শুরু করলে এবং আমাদের মধ্যে স্বয়ত্তর-পরিপূর্ণ কিক্স একটি সহায়ক অনুস্মারক হিসাবে "ফ্রেববেলআইডিড থাকা অবশ্যই 0 এবং 1000 এর মধ্যে হওয়া উচিত" be
ড্যান ইজ ফিজলিং ফায়ারলাইট

1

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

আমার অনুশীলনে লোকেরা যারা গেটার / সেটারগুলির সাথে মন্তব্য লেখেন, মন্তব্যগুলি বাদ দেওয়ার প্রবণতাগুলি যখন সত্যই প্রয়োজন হয় (যেমন কোনও ডকুমেন্টেশন নেই এমন উপাদানগুলির জন্য 20-লাইন বর্গক্ষেত্র-ক্যোয়ারী তৈরি করা)।

যখন আরও কিছু সুস্পষ্ট সমাধান পাওয়া যায় তখন আমি মন্তব্যগুলি লিখি _ কেন আমি সঠিকভাবে এই পদ্ধতির ব্যবহার করা হয়েছে তা নির্দেশ করি। বা যখন সমস্ত বিবরণ না জেনে ধারণাটি পাওয়া শক্ত হয় _ আমি কোডটি বোঝার জন্য প্রয়োজনীয় বিশদটি সংক্ষেপে তালিকাবদ্ধ করি।

আপনি যে উদাহরণটি এনেছেন সেটি হ'ল মন্তব্য লেখার চেয়ে আরও বেশি যে কেউ অন্যের (এবং তাদেরও) জীবনকে সহজ করে তোলার পরিবর্তে মন্তব্য লেখেন।

বিটিডাব্লু আপনি আপনার পুরানো কোডটিতে ফিরে এসে তা বোঝার চেষ্টা করে মন্তব্য লেখার দক্ষতা উন্নত করতে পারেন (এমনকি আপনার নিজের কোডটি 2-3 মাসের মধ্যেও স্বীকৃত হতে পারে না - এটি একেবারে অন্যের কোড পড়ার মতো)। আপনি যদি ব্যথামুক্তভাবে এটি করেন তবে সবকিছু ঠিক আছে।


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

@ ফ্রেস্ট্রেটেড উইথফর্মস ডিজাইনার, আমি যে ব্যক্তির কথা বলছিলাম সে ছিল সংস্থাটি ছেড়ে চলে যাওয়ার, এবং আমি বিশ্বাস করি যে এই ব্যক্তিরা যে কোনও দলিল ছাড়ার জন্য কিছু চেষ্টা করেছিলেন সেগুলি দেখানোর জন্য এই ব্যক্তিরা মন্তব্য করেছিলেন
সুপারম

ব্যক্তি নোটিশ দেওয়ার পরে কি সমস্ত বোগো মন্তব্য প্রবেশ করানো হয়েছিল? আমি দেখেছি লোকেরা ভিজিএসকে "সর্বজনীনভাবে দৃশ্যমান Foo- এ এক্সএমএল মন্তব্য মিস করা" সতর্কতা তৈরি করা থেকে বিরত রাখার হাড় মাথার উপায় হিসাবে পুরো জায়গা জুড়ে খালি / অকেজো এক্সএমএল মন্তব্য তৈরি করে।
ড্যান ইজ 22-21

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