Class design issue
Posted
by
user2865206
on Programmers
See other posts from Programmers
or by user2865206
Published on 2013-10-10T02:34:18Z
Indexed on
2013/10/23
4:09 UTC
Read the original article
Hit count: 253
object-oriented
I'm new to OOP and a lot of times I become stumped in situations similar to this example:
Task: Generate an XML document that contains information about a person. Assume the information is readily available in a database. Here is an example of the structure:
<Person>
<Name>John Doe</Name>
<Age>21</Age>
<Address>
<Street>100 Main St.</Street>
<City>Sylvania</City>
<State>OH</State>
</Address>
<Relatives>
<Parents>
<Mother>
<Name>Jane Doe</Name>
</Mother>
<Father>
<Name>John Doe Sr.</Name>
</Father>
</Parents>
<Siblings>
<Brother>
<Name>Jeff Doe</Name>
</Brother>
<Brother>
<Name>Steven Doe</Name>
</Brother>
</Siblings>
</Relatives>
</Person>
- Ok lets create a class for each tag (ie: Person, Name, Age, Address) Lets assume each class is only responsible for itself and the elements directly contained
- Each class will know (have defined by default) the classes that are directly contained within them
- Each class will have a process() function that will add itself and its childeren to the XML document we are creating
- When a child is drawn, as in the previous line, we will have them call process() as well
Now we are in a recursive loop where each object draws their childeren until all are drawn
But what if only some of the tags need to be drawn, and the rest are optional? Some are optional based on if the data exists (if we have it, we must draw it), and some are optional based on the preferences of the user generating the document
- How do we make sure each object has the data it needs to draw itself and it's childeren? We can pass down a massive array through every object, but that seems shitty doesnt it? We could have each object query the database for it, but thats a lot of queries, and how does it know what it's query is?
- What if we want to get rid of a tag later? There is no way to reference them.
I've been thinking about this for 20 hours now. I feel like I am misunderstanding a design principle or am just approaching this all wrong. How would you go about programming something like this? I suppose this problem could apply to any senario where there are classes that create other classes, but the classes created need information to run. How do I get the information to them in a way that doesn't seem fucky?
Thanks for all of your time, this has been kicking my ass.
© Programmers or respective owner