Autor Beitrag
bonzy
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 30.08.09 20:01 
Object Management

Hallo zusammen,

ich stelle hier ein kleines Projekt vor, an dem ich gerade arbeite. Der aktuelle Name beläuft sich auf "Object Management", aber bin da noch unschlüssig. Verwendet wurde .Net 2.0.

Version: 1.2

Beschreibung: Das Projekt besteht aus einer Klassenbibliothek, die die Verwaltung eines übergebenen Typs ermöglicht. Die Objekte diesen Typs werden in einer Liste abgelegt und können von außen auf verschiedene Wege verwaltet werden. Aktuell ist die Funktionsliste des "ObjectManagers" nicht sehr lang, soll aber im Laufe der Arbeit weiter ausgebaut werden, besonders in Sachen Innovativität.
Bisher besteht der größte Vorteil der Lösung in der Dateiverwaltung der Objekte, sprich die verwalteten Objekte können auf verschiedene Wege auf der Platte abgelegt werden: Als Text-, Xml-, Csv- oder auch Bin-Datei. Die Auswahl des Dateityps findet mit Hilfe der Enumeration "FileType" statt.
Dazu hier ein paar (altbekannte) Informationen:

Vor- & Nachteile der Datentypen:

TXT: Leicht lesbar und verwertbar für andere Programme
XML: Ziemlich groß, dafür optimal lesbar, schnell einlesbar, langsam im Schreiben
CSV: Ebenfalls gut les- und verwertbar, außerdem über Excel einlesbar
BIN: Kleinstes Format, schnelle Schreib- und Lesezeiten, nicht extern verwendbar

Verwendung:

TXT: FileType.TXT verwenden, zum Ausschließen ObjectManager.Attributes.NonManagedAttribute als Attribut einer Property hinzufügen
XML: FileType.XML verwenden, zum Ausschließen System.Xml.Serialization.XmlIgnoreAttribute als Attribute einer Property hinzufügen
CSV: FileType.CSV verwenden, zum Ausschließen ObjectManager.Attributes.NonManagedAttribute als Attribut einer Property hinzufügen
BIN: FileType.BIN verwenden, zum Ausschließen System.NonSerializedAttribute als Attribut einem Field hinzufügen


Die konkreten Funktionalitäten der ObjectManager-Klasse will ich hier nicht auflisten, da sollte ein Blick in die Datei genügen. Wenn das Projekt an Größe zunimmt, werde ich aber um eine kleine Doku nicht rumkommen, aber sehe das noch nicht als notwendig an.

Freue mich über Fragen, Verbesserungsvorschläge und Kritiken. Und auch über einen eventuell besseren Namen, den "ObjectManager" gibt es ja leider schon im Namespace "System.Runtime.Serialization". ;)

Changelog

- v1.1
  • [Methode] Contains - vergleicht enthaltene Werttypen der Elemente, sowohl normale als auch Listen
  • [Neue Methode] Count - Zählt alle Elemente mit den übergebenen Eigenschaftswerten durch
  • [Neue Methode] Select - Gibt alle Elemente mit den übergebenen Eigenschaftswerten zurück
  • [Neue Methode] SelectIndices - Gibt alle Indizes der Elemente mit den übergebenen Eigenschaftswerten zurück
  • [Neue Methode] SelectWhere - Gibt Werte einer Eigenschaft der Elemente mit den übergebenen Eigenschaftswerten zurück
  • [Neue Methode] Alter - Stellt die übergebenen Eigenschaftswerten für ein Element ein
  • [Neue Methode] Remove - Entfernt alle Elemente mit den übergebenen Eigenschaftswerten
  • [Neues Feature] Es können nun mehrere Listen innerhalb einer ObjektManager-Instanz verwaltet werden

- v1.2
  • [Methoden] Alle Methoden umbenannt mit "List" und "Item"
  • [Methode] ItemAt-Methode umbenannt in "GetItemAt" und zum Indexer umgestellt
  • [Neues Feature] ReadOnly führt auch zum Ausschluss des Objektes (Alternativ NonManaged rausnehmen)
  • [Neue Methoden] Die "Query-Methoden" DeleteItems, UpdateItems, CountItems, SelectItems, SelectWhereItems und SelectIndicesItems nehmen ein delegate entgegen, welches eine Abfrage der Items regelt
  • [Neue Methode] AddItems() hinzugefügt, fügt ein Array mit Items hinzu
  • [Neue Methode] UpdateItem() hinzugefügt, setzt die übergebenen Eigenschaften für ein Item
  • [Methoden] Bei verschiedenen Methoden wurde die Parameterlistenreihenfolge angepasst
  • [Neue Methoden] Die "Query-Methoden" DeleteItems, UpdateItems, CountItems, SelectItems, SelectWhereItems und SelectIndicesItems nehmen einen conditionstring entgegen, welcher eine Abfrage der Items regelt
  • [Bugfixing] Ein paar kleinere Bugfixes
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von bonzy am Sa 24.10.09 15:01, insgesamt 5-mal bearbeitet
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 31.08.09 17:54 
Das hört sich ja alles ganz nett an , aber wo ist der Download-Link?
Ohne den können wir schlecht testen.

MfG
bonzy Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 31.08.09 18:10 
user profile iconj.klugmann hat folgendes geschrieben Zum zitierten Posting springen:
Das hört sich ja alles ganz nett an , aber wo ist der Download-Link?
Ohne den können wir schlecht testen.

MfG


Man möge mir verzeihen. Ist jetzt drinnen und wird hoffentlich nicht mehr vergessen. ;)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 31.08.09 19:20 
Hallo!

Hast Du das Assembly durch einen Obfuscator laufen lassen? Die Namen der Funktionenparamater sind nämlich nur noch "Gekröse". Ohne die ist es aber schwer, die Library zu testen, weil man nicht weiß, was man den Methoden übergeben muss ;-)

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
bonzy Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 31.08.09 19:33 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Hallo!

Hast Du das Assembly durch einen Obfuscator laufen lassen? Die Namen der Funktionenparamater sind nämlich nur noch "Gekröse". Ohne die ist es aber schwer, die Library zu testen, weil man nicht weiß, was man den Methoden übergeben muss ;-)

Grüße
Christian


Ja, habe einen drüber laufen lassen, weil ich meinen Code nicht völlig blank legen will. Habe jetzt die Einstellungen verändert, um die Parameter noch vollständig sichtbar zu machen. Hoffe ich muss nicht nochmal den Download umstellen. ^^
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 31.08.09 20:59 
Hallo!

Erstmal ein paar Bugreports, bevor ich's vergesse:
  • Ich kann Items einfügen, ohne eine Liste angelegt zu haben. Will ich dann speichern, bekomme ich eine Exception
  • Es gibt auch ReadOnly-Properties, die sollte man weder mit speichern noch versuchen, sie beim Laden wieder zu schreiben ;-)

Dann als Anregung:
  • Die Parameter der Where*-Methoden sollten IMHO eher wie die bei LINQ aussehen. Über Reflection zu gehen, ist nicht nur unhandlicher zu programmieren, sondern dürfte auch wesentlich langsamer als ein Callback sein.
  • Du hast eine Methode "ItemAt". Ein Indexer wäre hier doch eigentlich auch ganz nett :-)
  • "Create" sollte IMHO eher "CreateList" heißen, da weiß man direkt, was es macht. Entsprechende Änderungen wären auch bei den anderen Methoden, die was mit Listen zu tun haben, schön.
  • Eine Liste der Listen sollte man irgendwie noch abrufen können :-)
  • XML-Comments wären nett, damit man bei Parametern und Methoden Hinweise zur Benutzung bekommt.

Insgesamt muss ich sagen, bietet mir die Klasse noch nicht so viel mehr, als ich schon im Framework habe. Einzig angenehm sind die Methode zum Laden und Speichern, die zwar natürlich auch irgendwie im Framework drin sind, aber hier direkt eingebaut. Alles andere bekommt man irgendwie mit 'nem Dictionary<String,List<T>> und LINQ auch hin :nixweiss:

Aber Du hast ja selber gesagt, dass die Funktionsliste noch nicht sehr lang ist ;-)

Also, weiter frohes Programmieren :zustimm:

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
bonzy Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 31.08.09 23:31 
Danke für die Kritik.

Also Items einfügen wird eigentlich abgefangen, indem die Länge der Liste auf 0 geprüft wird. Aber schaue mal, ob ich den Fehler irgendwie nachstellen kann und fixe es dann wenn nötig.

Das ReadOnlyAttribut führt jetzt auch zum Ausschluss der Property beim Speichern/Laden.

Ich denke mal, dass ich die Funktionsweise von LINQ nicht einfach nachbauen kann, weil ich schließlich auch 2.0 benutze. Ich schau mir das demnächst mal an.

Das ItemAt ist zum Indexer umgebaut.

Die Methoden sind alle umbenannt und jeweils mit "List" oder "Item" versehen.

An den Rest setz ich mich noch. Nochmals vielen Dank für die Kritik. ;)
bonzy Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 03.09.09 13:20 
user profile iconbonzy hat folgendes geschrieben Zum zitierten Posting springen:
Ich denke mal, dass ich die Funktionsweise von LINQ nicht einfach nachbauen kann, weil ich schließlich auch 2.0 benutze.


Mir ist aufgefallen, dass ich hier ziemlichen Schwachsinn geschrieben habe. Die Funktionsweise besteht ja nur darin, ein delegate zu übergeben und das ist kein Problem. Habe mich schon dran gesetzt und läuft einwandfrei.

Ansonsten werde ich noch ein paar kleinere Sachen umbauen/einbauen und dann wohl auf Version 1.2 aufstocken.
bonzy Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 17.10.09 13:21 
Hallo zusammen,

um mal einen neuen Zwischenstand rauszugeben: Ich sitze nach wie vor an der Version 1.2, allerdings habe ich mir ein wenig mehr vorgenommen als eigentlich geplant. Es wurden nicht nur alte Methoden verbesser oder angepasst, sondern auch einiges Neues eingebaut. Beispielsweise können Methoden mit Bedingung nun auch mit einem delegate aufgerufen werden, dass die Elemente der Liste einschränkt.
Was mich im Moment noch an einem Release hindert, ist wiederrum eine weitere Funktionalität, mit der man Bedingungen angeben kann. Und zwar baue ich eine SQL-ähnliche Sprache ein, die vorerst jedoch nur auf Bedingungen beschränkt ist. Bis sie lauffähig ist, kann es gut noch eine Woche dauern, aber in spätestens zwei Wochen denke ich sollte ich eine Version fertigstellen können, die alle diese Features beinhaltet, besser strukturiert ist und vor allem dokumentiert. ;)

Bis dahin.
bonzy Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 24.10.09 14:58 
Und wieder ist eine Woche vergangen. ;)

Doch es gibt gute Nachrichten von meiner Seite. Die Version 1.2 ist fertig und darf ausgiebig getestet werden!

Bis zuletzt habe ich dokumentiert und ein paar Feinschliffe vorgenommen und ich bin recht zufrieden mit dem Ergebnis.

Es liegt ab sofort eine XML-Dokumentationsdatei bei, die englische Dokumentation zu den einzelnen Methoden des ObjectManagers enthält. Außerdem wurden die Namen und Parameterlisten der Methoden überarbeitet und auch einige neue hinzugefügt.

Besonders für Abfragen ist es ein Fortschritt, dass es nun sowohl die Möglichkeit gibt, ein delegate zu übergeben, welches die Abfrage eigenständig regelt und dem Benutzer viel Freiheiten zulässt als auch ein "Conditionstring" zugelassen wird, der in guter alter SQL-Manier Vergleiche aufstellt, die sich mit "and", "or" und Klammersetzung verbinden lassen. Es können die gängigen Vergleichsoperatoren "==", "!=", ">", "<", ">=" und "<=" verwendet werden.
Das System ist noch nicht ganz ausgereift und beinhaltet sicherlich noch den einen oder anderen Fehler, weshalb ich darum bitte, mir diese bei auftreten zukommen zu lassen.

Vorerst werde ich versuchen, das Abfragesystem weiter zu verbessern, was auch beinhaltet, Vergleiche im Conditionstring mit Hilfe von boolescher Algebra zu optimieren.

Ich hoffe doch, dass sich jemand wenigstens mal kurz mit meiner Arbeit befasst und freue mich über Kritik jeder Art!