Archive for the ‘ Programmiersprachen ’ Category

RibbonControlInzwischen ist es gute 4 Monate her, seit ich meinen letzten Blogeintrag hier gemacht habe. Es stand viel Arbeit an und ich habe für meine Verhältnisse sehr viele Erfahrungen im .NET Bereich gesammelt. Nicht zuletzt wegen meines Arbeitsplatzes bei istis, wo ich nun seit November 2009 als Junior Softwareentwickler arbeite.

Seit dem Release von Visual Studio 2010 habe ich mich auch mehr dem Thema WPF gewidmet. Mein aktuelles Praxisprojekt, welches in der Uni als Vorraussetzung für die Bachelorarbeit gilt, handelt ebenfalls von der Entwicklung einer verteilten WPF Anwendung in Zusammenarbeit mit einem WCF Service.

Kurzum : Eine WPF Anwendung mit SOA Architektur und dem MVVM Pattern als WPF Anwendungsarchitektur.

In diesem Projekt arbeite ich auch mit dem MS RibbonControl Framework, welches jedoch leider schon ziemlich veraltet ist und von Microsoft zur Zeit überarbeitet wird. Veraltet empfinde ich es aus dem Grund, da es keinerlei Support für das MVVM Pattern bietet. Trotzdem setzen wir es bei uns in der Firma ein, in der Hoffnung, dass es nach dem Release der neueren Version einfacher sein wird die Komponente zu ersetzen.

Es ist allerdings auch nicht völlig unmöglich, das Framework in Kombination mit dem MVVM Pattern einzusetzen, auch wenn es leider etwas umständlicher ist. Aus diesem Grund habe ich für alle die mit dem Thema noch nicht sehr vertraut sind und nach einem Tutorial suchen ein solches geschrieben und in mein SVN Repository hochgeladen.

Vorraussetzung für den Einsatz ist jedoch die Assembly des MS RibbonControl Frameworks welches bei Microsoft kostenfrei lizensiert und eingesetzt werden kann (Einfach auf “Office UI lizensieren” klicken und registrieren – es ist KOSTENFREI).

Hier ein paar Vorschaubilder wie die Beispielanwendung aussieht :

RibbonPicture1
RibbonPicture3
RibbonPicture2

Das Projekt könnt ihr in meinem Projekt Repository herunterladen oder direkt lesen

Visual Studio 2010Ich habe heute meinen Umstieg von Visual Studio 2008 auf Visual Studio 2010 Beta 2 gewagt. Hintergrund war, dass ich die Entwicklung des ArmyGen jetzt vorläufig erst einmal einstelle, da ich das Tool aufgrund der Bestimmungen von Games Workshop nicht so veröffentlich dürfte wie ich es ursprünglich wollte.

Direkt habe ich mich auch in ein neues Unterfangen geschmissen. Ich werde mich die nächste Zeit mehr mit WPF befassen und ein paar Kartenspiele implementieren, bevor ich dann letztendlich dazu kommen werde ein eigenes Kartenspiel zu entwickeln. Da auch bald meine Bachelorarbeit für mein Studienabschluss ansteht, passt es zeitlich auch grade sehr gut sich mit etwas zu befassen, was noch sehr neu ist und ggf. wird sich auch meine Bachelorarbeit mit WPF befassen.

Ich hoffe, dass mir der Umstieg auf Visual Studio 2010 mehr Unterstützung bei der Entwicklung von WPF Anwendungen bieten wird, was aber gleichzeitig auch bedeutet, dass alle meine Projekte in meinem SVN Repository nicht mehr mit Visual Studio 2008 kompatibel sein werden. Das heißt, dass ihr ( wenn ihr kein VS 2010 besitzt ) zwar die Sourcedateien noch runterladen könnt, aber ein eigenes VS2008 Projekt erstellen müsst.

Für meine Kartenspiele hab ich heute vorweg schon einmal einen “Randomizer” geschrieben, welcher einem “IShuffler” Zufallszahlen generiert, damit dieser wiederrum meine Karten mischt. IShuffler ist nur ein Interface für Mischalgorithmen, welches dann beispielsweise in einem Kartendeck eingebunden werden kann. Konkret implementiert habe ich bisher aber nur den “FisherYates” Mischalgorithmus, welcher mir aber auch schon als einer der effektivsten erscheint.

Die Implementierung der Klassen könnt ihr euch in meinem Repository ansehen.

Do’s and Don’ts #3 Naming & Capitalizing

do's don'tsFür einen Entwickler ist es im Alltag immer wichtig einen gut lesbaren und möglichst intuitiven Code zu schreiben. D.h. andere Entwickler sollten schnell verstehen können worum es geht und was welche Methode macht und das ggf. sogar ohne Dokumentation ( auch wenn diese natürlich unverzichtbar ist ). Optimal ist dies der Fall, wenn ein Methodenname so eindeutig ist, dass jeder weiß was sie macht.

Auf folgende Dinge sollten geachtet werden :

  • Benutze keine Unterstriche oder ähnliche, nicht alphanumerische, Zeichen
  • Benutze möglichst keine Wörter, welche in der Programmiersprache eingebettet sind
  • Versuche einfach zu lesende Namen zu verwenden
  • Verwende PascalCasing für Namespaces, Klassen, Typen und Methoden sowie Properties
  • Verwende camelCasing für Parameter in Methoden und für lokale variablen

DON’T !

public myClass
{
    public void method( myclassname valuename )
    {
        //logik
    }
}

DO !

public MyClass
{
    public void Method( MyClassName valueName )
    {
        //logik
    }
}

Head First Design Patterns C# – Update

Head First Design PatternsIch habe heute mal ein kleines Update in meinem SVN Repository gemacht und dort die beiden Patterns “Strategy” und “Observer” aus dem Buch “Head First Design Patterns” ( oder zu deutsch – “Entwurfsmuster von Kopf bis Fuss” ) hinzugefügt.

Ich habe sie allerdings nicht in Java, wie im Buch, geschrieben sondern nach C# übersetzt und als Konsolenanwendungen hinterlegt. Für all diejenigen die grade erst anfangen sich mit Design Patterns auseinanderzusetzen ist es auf jeden Fall einen Blick wert ! Es ist bestimmt auch eine Bereicherung für diejenigen unter euch, denen meine selbst gestalteten Beispiele nicht die nötige Erleuchtung gebracht haben.

Ich werde demnächst auch das Head First Beispiel zum “Decorator Pattern” in C# bereit stellen.

Viel Spaß damit !

Head First Strategy Pattern Beispiel C#
Head First Observer Pattern Beispiel C#
Alle meine hinterlegten Beispiele zu Design Patterns

UPDATE :

Habe jetzt auch das Decorator Pattern ins SVN hochgeladen. Viel Spaß damit !

Head First Decorator Pattern Beispiel C#

Eigene ObservableCollection

In meinem aktuellen Projekt des ArmyGen arbeite ich viel mit ObserveableCollections, da ich viele Abläufe und Änderungen überwachen muss und ggf. andere Objekte davon informiert werden müssen. Eine sehr schicke Sache die Microsoft da mit dem .NET 3.0 eingeführt hat. Jedes mal wird man automatisch benachrichtigt, wenn einer Collection ein Element hinzugefügt, entfernt, bewegt, ersetzt oder sogar die ganze Collection gecleared wird.

Das schöne ist auch, dass in den Eventargs beim hinzufügen und entfernen von Elementen gesagt wird welche Elemente genau behandelt wurden. Einen Haken jedoch gibt es trotzdem. Beim Clear() der Collection wird in den Eventargs keine Angabe darüber gemacht welche Elemente alle verschwunden sind. Wie ich finde eine sehr ärgerliche Sache denn ich nutze oft Clear().

Microsoft wird wohl Gründe für die Entscheidung gehabt haben (vermutlich aus Performance-/Speichergründen), jedoch ist es für mich ein wichtiges Feature auch bei einem Clear() zu erfahren was vorher in der Liste gesteckt hat. Darum habe ich ich meine eigene ObserveableCollection entworfen, bzw. die bestehende modifiziert.

Desweiteren habe ich bei der .NET ObservableCollection eine AddRange() Methode vermisst welche ich ebenfalls in meiner Collection mit eingebaut habe.

Update : Ich habe ganz vergessen eine RemoveRange(IEnumerable) Methode mit einzubauen. Diese habe ich grade noch nachträglich mit eingebaut !

Meine : tww.Util.Collections.ObservableCollection