क्या मुझे एक संपत्ति या एक विधि के रूप में "गणना" मूल्य को उजागर करना चाहिए?


13

मेरे पास एक C # वर्ग है जो एक वेब सामग्री प्रबंधन प्रणाली में एक सामग्री प्रकार का प्रतिनिधित्व करता है।

हमारे पास एक फ़ील्ड है जो वेब सामग्री संपादक को ऑब्जेक्ट प्रदर्शित करने के लिए एक HTML टेम्पलेट दर्ज करने की अनुमति देता है। यह मूल रूप से HTML स्ट्रिंग में ऑब्जेक्ट प्रॉपर्टी वैल्यू को प्रतिस्थापित करने के लिए हैंडलबार सिंटैक्स का उपयोग करता है:

<h1>{{Title}}</h1><p>{{Message}}</p>

एक वर्ग डिजाइन के नजरिए से, क्या मुझे एक संपत्ति या विधि के रूप में स्वरूपित HTML स्ट्रिंग (प्रतिस्थापन के साथ) को उजागर करना चाहिए ?

संपत्ति के रूप में उदाहरण:

public class Example
{
  private string _template;
  public string Title { get; set; }
  public string Message { get; set; }
  public string Html 
  {
    get
    {
      return this.ToHtml();
    }
    protected set { }
  }

  public Example(Content content)
  {
    this.Title = content.GetValue("title") as string;
    this.Message = content.GetValue("message") as string;
    _template = content.GetValue("template") as string;
  }

  private string ToHtml()
  {
    // Perform substitution and return formatted string.
  }  
}

विधि के रूप में उदाहरण:

public class Example
{
  private string _template;
  public string Title { get; set; }
  public string Message { get; set; }

  public Example(Content content)
  {
    this.Title = content.GetValue("title") as string;
    this.Message = content.GetValue("message") as string;
    _template = content.GetValue("template") as string;
  }

  public string ToHtml()
  {
    // Perform substitution and return formatted string.
  }  
}

मुझे यकीन नहीं है कि एक डिज़ाइन के दृष्टिकोण से इसे कोई फर्क पड़ता है या क्या ऐसे कारण हैं कि एक दृष्टिकोण दूसरे की तुलना में बेहतर है?


गुणों का लाभ, वे XML या JSOn में क्रमबद्ध हैं, लेकिन मुझे लगता है कि।
केर्नड

1
संपत्तियों को राज्य की जानकारी का प्रतिनिधित्व करना चाहिए। कोई फर्क नहीं पड़ता कि उनकी गणना की जाती है या नहीं। यह उन्हें अभिव्यक्ति में उपयोग करना आसान बनाता है। केवल आपको पता है कि HTML ऑब्जेक्ट की स्थिति का प्रतिनिधित्व करता है।
रिएक्टगुलर

जवाबों:


18

अद्यतन: यह प्रश्न मई 2014 में मेरे ब्लॉग का विषय था । महान प्रश्न के लिए धन्यवाद!


रॉबर्ट हार्वे के जवाब में जोड़ने के लिए : एक संपत्ति होनी चाहिए:

  • तार्किक रूप से वर्ग की एक संपत्ति , जिस तरह से उसका रंग या वर्ष या मॉडल कहते हैं वह एक कार के गुण हैं।

  • इससे अधिक नहीं, मान लीजिए, एक क्षेत्र से लाने की तुलना में गणना करने के लिए दस गुना धीमा है।

  • डिबगिंग के दौरान आपके द्वारा गणना की जाने वाली किसी चीज़ का बुरा नहीं लगता। VS डिबगर स्वचालित रूप से गुणों की गणना करता है।

  • असफल होने में असमर्थ। प्राप्तकर्ताओं को हमेशा एक मूल्य वापस करना चाहिए चाहे वस्तु की स्थिति कैसी भी हो।

मुझे नहीं लगता कि आपकी प्रस्तावित Htmlसंपत्ति उनमें से किसी को हिट करती है । जब तक यह उन सभी को हिट नहीं करता है, तब तक इसे संपत्ति न बनाएं ।


"विफल करने में असमर्थ। गेटर्स को हमेशा एक मूल्य वापस करना चाहिए चाहे वह वस्तु की स्थिति कोई भी हो।" क्या उनकी वस्तु के निपटान के बाद संपत्तियों को एक अपवाद नहीं फेंकना चाहिए?
स्टीफन

6

ToHtmlसही ढंग से एक विधि है, जैसा कि आपने इसे दोनों मामलों में लिखा है। बस इसे सार्वजनिक रूप से उजागर करें।

Knerd एक अच्छा बिंदु बनाता है: गुणों को क्रमबद्ध किया जा सकता है। आप एचटीएमएल से कभी डिस्क्राइब नहीं करेंगे, इसलिए इसे उस नजरिए से प्रॉपर्टी बनाने का कोई मतलब नहीं है।

ओआरएम और रिपॉजिटरी ऑब्जेक्ट्स के काम करने के तरीके के अनुरूप: एक रिकॉर्ड या टपल में फ़ील्ड को गुणों के साथ दर्शाया जाता है, लेकिन आप एक विधि का उपयोग करके रिकॉर्ड (या इसका कुछ रूप ) प्राप्त करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.