Looking over a project I found the following code:
 Now, we could even delete the property and make directly the call from the constructor, but personally I prefer to keep the call in a separate place. I easier to read (personal opinion).
Now, we could even delete the property and make directly the call from the constructor, but personally I prefer to keep the call in a separate place. I easier to read (personal opinion).
public class AzureLocalStorageTraceListener : XmlWriterTraceListener
{
  public AzureLocalStorageTraceListener()
    : base(Path.Combine(AzureLocalStorageTraceListener.GetLogDirectory().Path, "WebService.svclog"))
  {
  }
  public static DirectoryConfiguration GetLogDirectory()
  {
    DirectoryConfiguration directory = new DirectoryConfiguration();
    directory.Container = "wad-tracefiles";
    directory.DirectoryQuotaInMB = 10;
    directory.Path = RoleEnvironment.GetLocalResource("WebService.svclog").RootPath;
    return directory;
  }
}
public class AzureLocalStorageTraceListener : XmlWriterTraceListener
{
  private const string WebServiceConfigurationKey = "WebService.svclog";
  public AzureLocalStorageTraceListener()
    : base(Path.Combine(LogDirectoryConfiguration.Path, WebServiceConfigurationKey))
  {
  }
  private static DirectoryConfiguration LogDirectoryConfiguration
  {
    get
    {
      DirectoryConfiguration directory = new DirectoryConfiguration
      {
        Container = "wad-tracefiles",
        DirectoryQuotaInMB = 10,
        Path = RoleEnvironment.GetLocalResource(WebServiceConfigurationKey).RootPath
      };
      return directory;
    }
  }
}
public class AzureLocalStorageTraceListener : XmlWriterTraceListener
{
  private const string WebServiceConfigurationKey = "WebService.svclog";
  public AzureLocalStorageTraceListener()
    : base(Path.Combine(LogDirectoryPath, WebServiceConfigurationKey))
  {
  }
  private static string LogDirectoryPath
  {
    get
    {
      DirectoryConfiguration directory = new DirectoryConfiguration
      {
        Container = "wad-tracefiles",
        DirectoryQuotaInMB = 10,
        Path = RoleEnvironment.GetLocalResource(WebServiceConfigurationKey).RootPath
      };
      return directory.Path;
    }
  }
}
public class AzureLocalStorageTraceListener : XmlWriterTraceListener
{
  private const string WebServiceConfigurationKey = "WebService.svclog";
  public AzureLocalStorageTraceListener()
    : base(Path.Combine(LogDirectoryPath, WebServiceConfigurationKey))
  {
  }
  private static string LogDirectoryPath
  {
    get
    {
      return RoleEnvironment.GetLocalResource(WebServiceConfigurationKey).RootPath      
    }
  }
}
Next refactoring :) - if the property is accessed only from within it's own class, why keep it public?
ReplyDeleteThank you Tudor. This is happening when you rewrite the sample code in Notepad++. I wanted to write private, I already made the update.
DeleteThe important thing here is what GetLocalResource does. If it is an expensive (or potentially expensive) operation, exposing it like a property is not a great idea.
ReplyDeleteWhen I read a property, I don't expect it to have any performance impact. I also don't expect it to throw an exception.
If there is some resource access (reading from the DB, file system, calculating something expensive) then I would choose to expose it as GetSomething().
100% True. I didn't thought about properties from this perspective. :-)
Delete