{
Yesterday I wrote that my next stop was the use of Generics with WCF. Sometimes, it seems, a lot of experience is a handicap to learning new things - such was definitely the case when it comes to the full use of Generics with C#. Most of my usage, I admit, has been limited to Generic Collections such as List<T> or Dictionary<T, K>. But there is a beautiful leveraging of Generics I see with WCF that can be applied all over the place. As a trivial example, consider the code that is used to safely read values from a database field. I will admit to writing a lot of code like:
class ReaderHelper{
public static void GetSafeString(object field);
public static void GetSafeDecimal(object fiel);
// and so on.
}
// somewhere else in code:
string firstname = ReaderHelper.GetSafeString(rs["FirstName"]);
decimal salary = ReaderHelper.GetSafeDecimal(rs["Salary"]);
A lot of redundancy and little extensibility. Here's how a WCF infected mind might write that:
class ReaderHelper{
static T SafeField<T>(object field, T defaultValue){
return (field == DBNull.Value) ? defaultValue : (T)field;
}
}
// somewhere else in code:
string firstname = ReaderHelper.SafeField<string>(rs["FirstName"]);
decimal salary = ReaderHelper.SafeField<decimal>(rs["Salary"]);
If you coupled the above with some inversion of control you'd have a pretty powerful and extensible code for dealing with any potentially null field type coming from your database. It's not that such use is an innovation exclusive to WCF, I see it used a lot more there. Back to Minima, one can see a good example of this in the project responsible for exposing configuration values:
namespace Themelia.Configuration
{
public static class ConfigAccessor
{
public static T ApplicationSettings<T>(string key);
public static string ApplicationSettings(string key);
public static T ApplicationSettings<T>(string key, bool isRequired);
public static string ApplicationSettings(string key, bool isRequired);
public static string ConnectionString(string key);
}
}
More on Minima later (hopefully tomorrow), taking a look at database access.
No comments:
Post a Comment