Recently I’ve found myself writing methods which call other methods in succession and setting some value based on whichever method returns an appropriate value first. What I’ve been doing is setting the value with one method, then checking the value and if it’s not good then I check the next one. Here’s a recent example:
private void InitContent()
{
if (!String.IsNullOrEmpty(Request.QueryString["id"]))
{
Content = GetContent(Convert.ToInt64(Request.QueryString["id"]));
ContentMode = ContentFrom.Query;
}
if (Content == null && DefaultId != null)
{
Content = GetContent(DefaultId);
ContentMode = ContentFrom.Default;
}
if (Content == null) ContentMode = ContentFrom.None;
}
Here the GetContent method should be returning null if the id isn’t in the database. This is a short example, but you can imagine how this might get clunky if there were more options. Is there a better way to do this?
I suggest you try some kind of Factory design pattern for this case. You can abstract the content create procedure by register different creators. Moreover, you can add preference on each creator for your own logic. Besides, I suggest you encapsulate all data related to Content just like “ContentDefinition” class from other’s post.
In general, you need to know that there is always a trade off between flexibility and efficiency. Sometime your first solution is good enough:)