I'm writing an enterprisey utility that collects exception information and writes to the Windows Event Log, sends an email, etc. This utility class will be used by all applications in the corporation: web, BizTalk, Windows Services, etc.
Currently this class:
- holds state given to it via public properties
- calls out to .NET Framework methods to gather information about runtime details. Included are call to various properties and methods from
System.Environment
,Reflection
details, etc.
This implementation has the benefit of allowing all those callers not to have to make these same calls themselves. This means less code for the caller to forget, screw up, etc.
Should this state class (please what's the phrase I'm looking for [like DTO]?) know how to resolve/determine runtime details (like the IP address and machine name that it's running on)?
It seems to me on second thought that it's meant to be a class that should hold state, and not know how to call out to the .NET Framework to find information.
var myEx = new AppProblem{MachineName="Riker"};
//Will get "Riker 10.0.0.1" from property MachineLongDesc
Console.WriteLine("full machine details: " + myEx.MachineLongDesc);
public class AppProblem
{
public string MachineName{get;set;}
public string MachineLongDesc{
get{
if(string.IsNullOrEmpty(this.MachineName)
{
this.MachineName = Environment.MachineName;
}
return this.MachineName + " " + GetCurrentIP();
}
}
private string GetCurrentIP()
{
return System.Net.Dns.GetHostEntry(this.MachineName)
.AddressList.First().ToString();
}
}
This code was written by hand from memory, and presented for simplicity, trying to illustrate the concept.