Hi,
habe mir jetzt nur die Metadata Klasse angesehen, dazu ein paar Ideen, über die man natürlich geteilter Meinung sein kann.
(0. ich find Ungarische Notation für Klassennamen doof, aber ich weiß, dass das VDR Coding Stil ist *fg*)
1. string cMetadata::Property::operator()() -- würde mir überlegen, ob ich das nicht lieber weglasse. Die Property enthält ja zwei Strings, Key und Value, und ich meine es wäre saubererer (und selbstdokumentierender) Code, auf diese auch explizit zuzugreifen.
2. cMetadata::AddProperty() und cMetaData::SetProperty() -- könnte ich mir Überladungen mit string key, string/long/bool value vorstellen, als "convenience". Die Semantik bei cMetaData::SetProperty() müsste dafür natürlich genau geklärt sein (alle existierenden mit dem Key weg, nur den ersten überschreiben, ...?)
3. cMetaData::SetParentID() und cMetaData::SetParentID() -- sind nur für die Persistenz da, richtig? Ich glaube nicht, dass sie dann ins objektorientierte Interface gehören -- da würde ich eher Dinge erwarten wie Get/SetParent() und Get/Set/AddChildren().
4. Title, UpnpClass, Restricted, Description usw sind wie ich das verstehe "well-known properties". Sollte man die nicht auch als cMetadata::Property ablegen, mit als const definierten Keys (public const string cMetadata::Property::TITLE = "Title"; sowas ...)? Dann wäre es jedenfalls ausgeschlossen, dass jemand eine zusätzliche Property "Title" einführt, die dann als etwas anderes interpretiert wird.
Wie gesagt, nur Vorschläge -- kann sein dass die auch gar nicht gut sind, dazu kenne ich die Materie viel zu wenig