3 Schichten Modell

Ich versuche mich aktuell, ein C# Projekt schön nach dem 3-Schichten-Modell aufzubauen. Ich orientiere mich dazu an einem HowTo von Robert Mühsig (netter Blog btw.).

Klappt alles schon ganz gut, es ist etwas aufwendiger mit dem programmieren, wie ich finde, da man sich über mehr Sachen gedanken machen muss.
Aber es hat zum Beispiel den Vorteil, dass alles schön sauber getrennt ist. Ich könnte theoretisch statt einer SQLite Datenbank als Datenquelle eine XML-Datei nutzen, nur indem ich eine anderes Objekt instanziere. Ein ordentliches Interface vorrausgesetzt, habe ich nirgendwo Probleme, dieses auch anzusprechen. Natürlich könnte man dies auch ohne das 3-Schichten-Modell machen, allerdings sind hier die Bereiche schön getrennt. So hab ich wirklich nur eine Stelle, die dafür zuständig ist, die Daten aus der Datenquelle auszulesen und wegzuschreiben und muss an anderer Stelle absolut nichts anpassen.

Wie gesagt, der Aufwand ist etwas größer und langsam wird mir zum Beispiel klar, wozu man schöne Klassendiagramme brauchen kann 😉 War der Berufsschulquatsch doch nicht ganz umsonst. Ich könnte mich an diese Programmierweise echt gewöhnen!

Ach ja, bei dem Projekt geht es um eine DVD-Archiv-Software mit „Verleih“-Modull. Kann es privat selbst ganz gut gebrauchen. Als mögliche Datenquellen soll es neben (aktuell) SQLite auch XML sowie MSSQL geben (evtl. auch MySQL). Desweiteren überlege ich später als weitere Übung, eine ASP.NET Weboberfläche zu erstellen, so dass man diese Verwaltung auch Online nutzen kann. Aber erstmal eins nach dem anderen 🙂

C#: Zahlen formatieren

Bei Uwe ist kurz erklärt, wie man in Strings Zahlen formatiert.
Allerdings werden die Zahlen vom System abhängig ausgegeben. Also auf deutschen Systemen wird aus „123.45“ » „123,45“.
Um sowas zu umgehen müsst ihr folgendes machen:

// Siehe Kommentare
// CultureInfo cultureInfoProvider = new CultureInfo("en-US");
CultureInfo cultureInfoProvider = CultureInfo.InvariantCulture;
MessageBox.Show(string.Format(cultureInfoProvider, "{0:F2}", 123.45));

Und schon wird euch die Zahl wie gewünscht ausgegeben.
Ist auch interessant bei Datumswerten oder Währungen.

C# schönere schreibweise

Durch Resharper wurde ich auf folgende schreibweise aufmerksam:

            this.tsSchwarzWeißBild = new ToolStripMenuItem
                                         {
                                             Name = "tsSchwarzWeißBild",
                                             ShortcutKeys = (Keys.Alt | Keys.W),
                                             Size = new System.Drawing.Size(226, 22),
                                             Text = "Schwarz-&Weiß-Bild"
                                         };
            this.tsSchwarzWeißBild.Click += this.optionSchwarzWeissBild;

Besser lesbarer als meine „alte“ schreibweise:

            this.tsSchwarWeißBild = new ToolStripMenuItem();
            this.tsSchwarzWeißBild.Name = "tsSchwarzWeißBild";
            this.tsSchwarzWeißBild.ShortcutKeys = Keys.Alt | Keys.W;
            this.tsSchwarzWeißBild.Size = new System.Drawing.Size(226, 22);
            this.tsSchwarzWeißBild.Text = "Schwarz-&Weiß-Bild";
            this.tsSchwarzWeißBild.Click += this.optionSchwarzWeissBild;

Resharper

So, letzte Woche die WPF Schulung hinter mir gebracht. War sehr interessant, wenn auch sehr viel Input, da es eigentlich ein 3-Tage Kurs ist, er aber Aufgrund von zeitlichen Problemen auf 2 Tage gekürzt werden musste.
Also WPF betrachte ich jetzt mit anderen Augen, bin zwar noch nicht vollkommen überzeugt, stehe dem aber offener gegenüber. Und wenn Microsoft sich nicht ganz doof anstellt und das arbeiten mit WPF unter Visual Studio 2010 noch vereinfachter (z.B. ein schönere Intellisenseunterstützung), dann könnt das definitiv was werden.

Durch den Referendar Mathias Raacke (meiner Meinung nach ein sehr fähiger Referendar, sehr zu empfehlen und immer wieder gerne) bin ich auf Resharper gestoßen. Ich bin zwar schon vorher mal drüber gestolpert, aber der Preis hatte mich doch etwas abgeschreckt. Es bietet echte Vorteile und ist voll konfigurierbar. Ein absolutes Muss für jede VS Umgebung! Auf der Seite gibt es eine 30 Tage Testversion!

Ach ja nebenbei hab ich mal meinen Texteditor rausgeholt und mal wieder ein bischen PHP gemacht. Meine Idee nimmt langsam Formen an. Ach ja und Smarty (PHP Template Engine) ist gar nicht mal so schlecht, wie ich gut 5 Jahre gedacht habe. Manchmal ist dieser Drang, immer das Rad neu zu erfinden, nur um nicht auf Third-Party-Products zurückzugreifen, echt nervig!
(Würde ich auch gerne mal einem Kollegen klar machen!)

Position des Aktiven Fensters bekommen

        #region Position des aktiven Fensters bekommen
        
        /// <summary>
        /// Struktur um die Daten der WindowsAPI zu verarbeiten
        /// </summary>
        public struct RECT
        {
            public int left;
            public int top;
            public int right;
            public int bottom;
        }

        /// <summary>
        /// Import um das Handle des aktiven Fensters zu bekommen.
        /// </summary>
        /// <returns>Handle des aktiven Fensters</returns>
        [DllImport("user32.dll")]
        private static extern int GetForegroundWindow();

        /// <summary>
        /// Position sowie Höhe und Breite des gewollten Fenster bekommen.
        /// </summary>
        /// <param name="hWnd"></param>
        /// <param name="rect"></param>
        /// <returns></returns>
        [DllImport("user32.dll")]
        private static extern bool GetWindowRect(int hWnd, ref RECT rect);
        

        /// <summary>
        /// Daten bekommen
        /// </summary>
        /// <returns>RECT mit den Daten</returns>
        private RECT GetActiveWindowPosition()
        {
            int handle = GetForegroundWindow(); 
            RECT rct = new RECT();
            GetWindowRect(handle, ref rct);

            return rct;
        }
        RECT daten = GetActiveWindowPosition();

In der Struktur daten stehen dann die Abgrenzungen. Evtl. solltet ihr eine Prüfung machen, ob ob die Werte noch im bichtbaren Bereich liegen, z.B. verschiebt man ein Fenster nach Links über den Bildrand, so bekommt man einen negativen Wert!