.NET Undo-Redo Framework

Schon immer hatte mich es gereizt, einmal eine Undo-Redo Funktionalität zu implementieren, denn ich empfand das immer als so komplex, dass man es nicht mal einfach so locker runter-programmieren kann. Stattdessen ist ein wohlüberlegter Algorithmus gefragt. Bei der Entwicklung von Quality Spy hatte ich nun endlich einmal die konkrete Motivation diese Kopfarbeit zu leisten, denn […]

Mehr lesen »

Entities Aktualisieren – Entity Framework 5 vs. Linq-to-SQL vs. NHibernate

Praktisch jeder ORM dürfte eine Funktion anbieten, mit der man eine geladene Entity mit den Daten aus der Datenbank aktualisiert. So funktioniert’s in drei verbreiteten .NET ORMs: Entity Framework 5 myEntities.Entry(myObj).Reload(); myEntities.Entry(myObj).Collection(o => o.SomeCollection).Load(); Der Aufruf von Reload ist recht selbsterklärend. Für jede Collection muss ebenso ein Aufruf abgesetzt werden. Out-of-the-box lässt sich also nicht […]

Mehr lesen »

Command Binding für WPF vereinfachen

Das View-Models für WPF ein sehr mächtiges Architekturpattern sind, ist anerkannt. Einfach nur nervig und redundant in der Notation sind dagegen Commands, wenn man sie nach dem Standardansatz mit RelayCommands implementiert. Für die Umsetzung von umfangreichen Commands für neue Features für Quality Spy hatte ich genug davon. Methoden als Command deklarieren So einfach muss es […]

Mehr lesen »

Elegante (N)Unit Tests für das Strategy Pattern

Der Sinn des Strategy Patterns liegt ja normalerweise darin, das selbe Ergebnis auf mehrere Arten berechnen zu können. Demnach macht es Sinn beim Unit Testing für die Schnittstelle der Strategy Testfälle zu definieren, die von allen Implementierungen durchlaufen werden. NUnit bietet dazu eine sehr komfortable und einfache Möglichkeit. TestFixtures können einfach voneinander erben. Im Testrunner […]

Mehr lesen »

PDB-Dateien mit der Common Compiler Infrastructure auslesen

Wie kann man zu einer Klasse bzw. Methode die Quelldatei und die Zeilennummer auslesen? Microsoft hat auf Codeplex dazu ein nettes Projekt veröffentlicht: die  Common Compiler Infrastructure: Metadata API. Folgender Code ist nötig: using Microsoft.Cci; … var host = new PeReader.DefaultHost(); var r = (IAssembly)host.LoadUnitFrom(@“D:\Development\DonkeyTools\src\DonkeyPlanner\bin\Debug\DonkeyPlanner.exe“); PdbReader/*?*/ pdbReader = null; string pdbFile = Path.ChangeExtension(@“D:\Development\DonkeyTools\src\DonkeyPlanner\bin\Debug\DonkeyPlanner.exe“, „pdb“); if […]

Mehr lesen »

So What Exactly is a View-Model

Interessanter Artikel auf InfoQ zum Thema MVVM:  „So What Exactly is a View-Model“. Es werden verschiedene Techniken vorgestellt, wie View-Models implementiert werden können. Das hat natürlich nur Relevanz für Desktop-Anwendungen, d.h heutzutage praktisch nur für WPF und Silverlight. Vielleicht auch mal für HTML5, wenn es groß und stark ist… In Webanwendungen à la MVC kann […]

Mehr lesen »

Prozedurales XML – mit Razor!

Wäre es nicht cool, wenn man die Razor-Syntax auch außerhalb von ASP.NET MVC verwenden könnte, z.B. um XML-Dateien zu definieren? Beispielsweise könnte man damit Testdaten generieren: <Points> @for(int i=0; i<3; i++) { <Point x=“@i“ y=“0″ /> } </Points> Doch da soll noch nicht Schluss sein. Es wäre extrem cool, wenn man damit auch unendliche Streams […]

Mehr lesen »

Tracing von Features im Quellcode

Machen wir uns nichts vor. Selbst Vorzeige-Projekte mit Domain Driven Design haben das Problem, dass Funktionalität über viele Klassen zerstreut liegt. Wenn ein Feature bzw. eine Funktion „angefasst“ werden soll, müssen viele Klassen angepasst werden. In einer sauberen Softwarearchitektur ist das sogar per se so, denn eine Funktion benötigt ja eine GUI, zumindest etwas Geschäftslogik, […]

Mehr lesen »

Thumbnails aus JPEG-Dateien mit C# auslesen

Schonmal gewundert, wie der Windows Explorer oder Picasa so schnell Thumbnails für Bilder erzeugen, auch wenn diese Bilder wirklich komplett neu sind und nicht bereits indexiert sein können? Das liegt einfach daran, dass in der JPEG-Datei bereits ein Thumbnails enthalten ist, welches von der Digitalkamera erzeugt wurde. Somit muss nicht einmal die komplette JPEG-Datei eingelesen […]

Mehr lesen »

x86 / x64 per MSBUILD – System.Data.SQLite 1.0.80.0

Eine Neuerung des ADO.NET Treibers für SQLite erfordert ggf. die Änderung des Build-Skriptes, falls man die Auswahl der x86 / x64 Variante in den Build von Visual Studio integrieren will: Mit der Version 1.0.80.0 genügt leider die einzelne Datei System.Data.SQLite.dll nicht mehr aus, sondern man benötigt noch die Datei SQLite.Interop.dll. In der Version 1.0.77.0 war das […]

Mehr lesen »