What is this pattern called, when you give an object a parameter in its constructor and the object populates it's fields with the parameter?
For example:
/// <summary>
/// Represents a user on the Dream.In.Code website.
/// </summary>
public class User
{
/// <summary>
/// Load a user by providing an ID.
/// </summary>
/// <param name="ID">A user's individual ID number.</param>
public User(string ID)
{
WebClient webClient = new WebClient();
string htmlSource = webClient.DownloadString(new Uri(String.Format("http://www.dreamincode.net/forums/xml.php?showuser={0}",ID)));
XDocument xml = XDocument.Parse(htmlSource);
var profileXML = xml.Element("ipb").Element("profile");
//Load general profile information.
this.ID = profileXML.Element("id").Value;
this.Name = profileXML.Element("name").Value;
this.Rating = profileXML.Element("rating").Value;
this.Photo = profileXML.Element("photo").Value;
this.Reputation = profileXML.Element("reputation").Value;
this.Group = profileXML.Element("group").Element("span").Value;
this.Posts = profileXML.Element("posts").Value;
this.PostsPerDay = profileXML.Element("postsperday").Value;
this.JoinDate = profileXML.Element("joined").Value;
this.ProfileViews = profileXML.Element("views").Value;
this.LastActive = profileXML.Element("lastactive").Value;
this.Location = profileXML.Element("location").Value;
this.Title = profileXML.Element("title").Value;
this.Age = profileXML.Element("age").Value;
this.Birthday = profileXML.Element("birthday").Value;
this.Gender = profileXML.Element("gender").Element("gender").Element("value").Value;
//Load contact information.
var contactXML = xml.Element("ipb").Element("profile").Element("contactinformation");
this.AIM = contactXML.XPathSelectElement("contact[title='AIM']/value").Value;
this.MSN = contactXML.XPathSelectElement("contact[title='MSN']/value").Value;
this.Website = contactXML.XPathSelectElement("contact[title='Website URL']/value").Value;
this.ICQ = contactXML.XPathSelectElement("contact[title='ICQ']/value").Value;
this.Yahoo = contactXML.XPathSelectElement("contact[title='Yahoo']/value").Value;
this.Jabber = contactXML.XPathSelectElement("contact[title='Jabber']/value").Value;
this.Skype = contactXML.XPathSelectElement("contact[title='Skype']/value").Value;
this.LinkedIn = contactXML.XPathSelectElement("contact[title='LinkedIn']/value").Value;
this.Facebook = contactXML.XPathSelectElement("contact[title='Facebook']/value").Value;
this.Twitter = contactXML.XPathSelectElement("contact[title='Twitter']/value").Value;
this.XFire = contactXML.XPathSelectElement("contact[title='Xfire']/value").Value;
//Load latest visitors.
var visitorXML = xml.Element("ipb").Element("profile").Element("latestvisitors");
this.Visitors = (from visitor in visitorXML.Descendants("user")
select new Visitor(){
ID = visitor.Element("id").Value,
Name = visitor.Element("name").Value,
Url = visitor.Element("url").Value,
Photo = visitor.Element("photo").Value,
Visited = visitor.Element("visited").Value,
}).ToList();
//Load friends.
var friendsXML = xml.Element("ipb").Element("profile").Element("friends");
this.Friends = (from friend in friendsXML.Descendants("user")
select new Friend()
{
ID = friend.Element("id").Value,
Name = friend.Element("name").Value,
Url = friend.Element("url").Value,
Photo = friend.Element("photo").Value
}).ToList();
//Load comments.
var commentsXML = xml.Element("ipb").Element("profile").Element("comments");
this.Comments = (from comment in commentsXML.Descendants("comment")
select new Comment()
{
ID = comment.Element("id").Value,
Text = comment.Element("text").Value,
Date = comment.Element("date").Value,
UserWhoPosted = new Friend()
{
ID = comment.Element("user").Element("id").Value,
Name = comment.Element("user").Element("name").Value,
Url = comment.Element("user").Element("url").Value,
Photo = comment.Element("user").Element("photo").Value
}
}).ToList();
}
}
What would this pattern be called? Also, in an effort to make my code cleaner, do you recommend I use this pattern when creating objects within objects, like in my UserWhoPosted variable. Instead of having:
UserWhoPosted = new Friend()
{
ID = comment.Element("user").Element("id").Value,
Name = comment.Element("user").Element("name").Value,
Url = comment.Element("user").Element("url").Value,
Photo = comment.Element("user").Element("photo").Value
}
I'd have:
UserWhoPosted = new Friend(myFriendXElementVariable);
And just let it parse what it needs and populate it's fields.
Thanks for the guidance.
EDIT: After reading all your suggestions I cleaned the code up a bit. Do you think this is better? What would you improve?
Thanks for taking the time to help, I'm trying to cast aside bad programming habits.