Archiv
EF 5: Modelle übersichtlicher gestalten
Ob man nun “Model-First” oder “DB-First” folgt, bei Entity Framework steht man schnell einmal vor einem Problem: Das Datenmodell verliert an Übersichtlichkeit.
Die oft verwendeten Beispiele mit wenigen Tabellen und Verbindungen sehen im Designer von Visual Studio prima aus. Hat man aber ein komplexeres Modell steht man bald einmal vor so einer Ansicht:
Auch wenn man sehr viel Zeit aufwendet um die Entitäten hin und her zu ziehen, so bleibt das Modell doch unübersichtlich. Verwendet man Entity Framework 5 und Visual Studio 2012 gibt es aber 2 Hilfsmittel die einem bei der Organisation helfen können.
Farben
Mit Hilfe von Farben kann man thematisch zusammenhängende Bereiche hervorheben. Dazu klickt man im Designer die gewünschte Tabelle (oder mittels der Hilfe von CTRL mehrere) an und wählt in den Properties die entsprechende Füllfarbe (Fill Color):
Die Farben haben einzig im Designer eine Bedeutung und beeinflussen das Modell nicht. Mit wenig Aufwand sieht das Diagramm dann so aus:
Diagramme
Für grosse Modelle sind die Farben zwar ein Anfang, doch ist man damit noch nicht am Ziel. Neu kann man das Modell aber in verschiedene Diagramme aufteilen. Die entsprechende Funktion findet sich im Model Browser unter Diagramme:
Die gewünschten Entitäten können nun auf dieses neue Diagramm gezogen werden. Man muss dies aber nicht für jede Entität einzeln machen. Über das Kontextmenü auf einer Entität kann man mit “Include Related” alle verbundenen Entitäten auf einmal einfügen lassen.
Die so erzeugten Diagramme behandeln nur noch den Ausschnitt aus dem Modell den man genauer betrachten möchte:
Beim Löschen von Entitäten aus dem Diagramm muss man aufpassen. Mittels “Delete from Model” wird die Entität aus dem Modell gelöscht und ist danach über den DB-Kontext nicht mehr abrufbar. In der Regel will man stattdessen die Funktion “Remove from Diagram” nutzen. So wird nur das Diagramm angepasst und das Modell bleibt unverändert.
Fazit
Mit Hilfe von Farben und zusätzlichen Diagrammen kann man Ordnung in sein DB-Modell bekommen. So kann man auch grössere Datenbanken in Entity Framework benutzen ohne die Übersicht zu verlieren.
MS SQL Server: Login mittels Passwort aktivieren
Obwohl es kaum etwas Einfacheres gibt stosse ich bei der Arbeit mit dem SQL Server immer wieder auf ein Problem: Wieso kann ich nicht mit dem angegebenen Benutzernamen und Passwort auf die Datenbank zugreifen?
Die Fehlermeldung bleibt ja mit Absicht wage:
Schaut man ins Event Log findet man die Ursache:
Login failed for user 'demo'. Reason: An attempt to login using SQL authentication failed. Server is configured for Windows authentication only. [CLIENT: ]
Auch bei diesem Server ist bisher nur ein Login mittels Windows-Authentifizierung erlaubt. Dies lässt sich aber schnell ändern. Dazu genügt es das Microsoft SQL Server Management Studio als Administrator zu starten und mittels Rechtsklick auf den Servernamen die Eigenschaften aufzurufen. Unter Security kann man dem SQL Server erlauben die Benutzer selber zu authentifizieren:
Nach einem Neustart des SQL Server funktioniert der Login mittels Benutzername und Passwort wie gewünscht.
Kann man das SQL Server Management Studio verwenden ist diese Option schnell aktiviert – man muss nur daran denken dies auch zu tun. Hat man diese Möglichkeit wegen fehlenden Berechtigungen oder Security-Anforderungen nicht, wird es mühsam. In diesem Fall ist die Anleitung von Sven Schmalle sehr hilfreich.
Stolperfallen bei der Installation von SharePoint 2013
SharePoint 2013 lässt sich ganz einfach installieren. Es sei denn man wählt eine falsche Option. In dem Fall endet man in einer Sackgasse aus der man kaum mehr herausfindet.
Niemals als Stand-alone installieren
Der Installationsdialog von SharePoint 2013 bietet gleich zu Beginn eine Auswahlmöglichkeit für den Server Typ:
- Complete für den Produktiveinsatz
- Stand-alone für Tests und Entwicklung
Egal in welchem Szenario man SharePoint nutzen will, man muss unbedingt die komplette Installation auswählen.
Bei meinem ersten Versuch wählte ich leider die Option „Stand-alone“. Die Installation läuft ohne Probleme durch und man kann am Ende gleich den Configuration Wizard starten lassen. Auch der beginnt wie gewohnt zu arbeiten. Bis dann plötzlich ganz spezielle Fehlermeldungen kommen:
„The SDDL string contains an invalid sid or a sid that cannot be translated“
Googelt man nach dieser Fehlermeldung findet man sehr viele Tipps. Irgendwann hat man die alle durch und jeder DB-User verfügt über alle möglichen Berechtigungen. Nur bleibt das Problem bestehen. Aus meinem Bekanntenkreis bekam ich den Tipp diese Übung abzubrechen, von vorne zu beginnen und „Farm“ oder „Complete“ als Installationstyp zu wählen. Damit war dieses Problem dann auch gehoben.
Martin Hinshelwood bringt es in seinem Blogpost auf den Punkt:
Everyone makes this mistake once so please take note… never… ever… select “Stand-alone” install option.
Installation mit lokalen Benutzern
Damit SharePoint 2013 voll funktioniert benötigt es für die Installation Domänen-Accounts. Der AD-Controller darf aber nicht auf dem gleichen System laufen wie SharePoint. Für ein produktives System ist dies kein Problem. Will man aber eine Entwicklungs- oder Testumgebung in einer virtuellen Maschine erzeugen sieht es anders aus.
Man kann nun entweder eine zusätzliche VM fürs Active Directory aufbauen oder einen Account aus dem (Firmen-) AD benutzen. Wenn man auf einige Features wie die Volltext-Suche verzichten kann gibt es noch eine weitere Möglichkeit: PowerShell.
Dazu startet man die Management Shell von SharePoint 2013 als Administrator und führt diesen Befehl aus:
New-SPConfigurationDatabase
Es folgen einige Fragen die man beantworten muss und in wenigen Minuten wird die Konfigurationsdatenbank für SharePoint erzeugt. Nun muss noch einmal der Configuration Wizard ausgeführt werden und schon läuft ein (fast vollständiger) SharePoint 2013.
Fazit
Wählt man den falschen Server-Typ wird aus einer einfachen Sache wie der Installation von SharePoint schnell ein ausgedehntes Abenteuer. Aber selbst wenn man die richtige Option wählt warten weitere „Gefahren“. Für die erste Installation von SharePoint 2013 sollte man daher genügend Zeit einplanen.
Buch-Rezension zu “Domain-Driven Design”
Wenn man sich mit Behavior Driven Development (BDD) und dem Schreiben von Akzeptanztests beschäftigt stösst man immer wieder auf ein Buch:
“Domain-Driven Design: Tackling Complexity in the Heart of Software” von Eric Evans.
Dieses Buch gilt weit herum als Standardwerk das man unbedingt kennen muss. Beim Lesen merkt man schnell das Evans sehr viel Erfahrung hat und weiss wovon er schreibt. Leider macht er dies so ausführlich dass man kaum vorwärts kommt. “Man müsse die Informationen herausschürfen” ist eine Bemerkung über dieses Buch die man beim Lesen im Hinterkopf behalten sollte.
Kernpunkte
Von all den Themen die Evans behandelt stechen für mich diese Punkte besonders hervor:
Mit Hilfe einer Ubiquitous Language (einer einzigen gemeinsamen Sprache) sollen alle am Projekt beteiligten Personen kommunizieren. Dadurch das alle die gleichen Begriffe benutzen können Missverständnisse und Übersetzungsprobleme (im Sinne von Fachspezifisch zu Technisch) früh erkannt werden oder entfallen ganz. Auch ist es für Entwickler einfacher sich an die Spezifikationen zu halten wenn die Objekte im Code gleich heissen wie in den Anforderungen und den Testszenarios.
Bei Refactoring denkt man meistens an einen technischen Vorgang um Code besser zu strukturieren. Neben diesem technischen Aspekt gibt es aber auch einen fachlichen. Evens zeigt bei „Refactoring Toward Deeper Insight“ auf wie man nach und nach das Domänenmodell um neue Erkenntnisse verfeinern kann.
Entwickelt man nach Model Driven Design darf das Modell nicht in einem Vakuum erstellt werden. Ist dieses Modell technisch nicht umsetzbar wird in der Entwicklung gezwungenermassen eine Lösung gefunden die davon abweicht. Damit verliert man alle Vorteile und muss ständig zwischen mehreren Modellen hin und her wechseln. Neben höheren Kosten leidet dabei auch die Kommunikation.
Bounded Context: Das eigene Domänenmodell kann noch so gut sein, wenn man es nicht abgrenzt fliessen die unterschiedlichen Konzepte der Umsysteme hinein. Evens zeigt eine ganze Reihe von Ansätzen um dies zu verhindern (wie das Pattern “Anticorruption Layer”).
Software-Entwicklung ist mehr als das Schreiben von Code. Es geht um das Lösen von Problemen. Damit man die passende Lösung finden kann ist eine Zusammenarbeit mit allen beteiligten Parteien nötigt.
Kritik
Die gleichen Namen und Bezeichnungen zu verwenden ist ein grosser Schritt in die richtige Richtung. Nur ist es damit nicht getan. Mir fehlt wie man auch zu einer gemeinsamen Bedeutung kommt und überhaupt die Wiedersprüche aufdecken kann. (Wenn alle von Autos sprechen, wie merkt man das der eine einen Golf meint und der anderen einen Ferrari?)
Die ersten beiden Teile sind sehr schwerfällig geschrieben. Immer wieder springt Evans von einer Idee zur nächsten und wieder holt dieses hin und her mehrmals. Würde dies aus unterschiedlichen Perspektiven geschehen wäre dies ein Plus fürs Buch. Leider sucht man die ganze Zeit nach den Unterschieden zum bereits behandelten und findet meist keine. Dies bremst den Lesefluss und schlägt auf die Motivation.
Anstelle der vielen Wiederholungen wären Beispiele zur technischen Umsetzung hilfreich. Statt so viel über Code zu sprechen hätte Evens diesen zeigen können – dies ginge schneller und hätte einen Praxisnutzen. So bleibt zu viel eine schöne Idee ohne Hinweis auf deren Umsetzung.
Alternative
Abel Avram und Floyd Marinescu sahen ebenfalls einige Verbesserungsmöglichkeiten und schrieben 2006 das Mini-Book “Domain Driven Design Quickly“. Auf rund 100 Seiten gibt es all die Konzepte aus dem Buch von Evans, ein Interview mit ihm und es hat noch Platz für Ergänzungen aus “Applying DDD” von Jimmy Nilsson.
Wer ins Thema DDD einsteigen will sollte sich erst einmal das PDF bei InfoQ herunterladen.
Fazit
Mit Domain-Driven Design wurden viele wichtige Ideen erstmals in Buchform veröffentlicht. Die darin behandelten Themen sind auch heute noch aktuell und ein Umsetzen der von Evens vorgestellten Ansätze würde so manches aktuelle Problem lösen.
Leider verzettelt sich Evans mit seinen Erklärungen und macht es dem Leser äusserst schwer diese Konzepte zu verstehen. Als Einstiegslektüre ins Thema DDD kann ich dieses Buch daher nicht empfehlen. “Domain Driven Design Quickly” ist dafür die bessere Wahl, da die gleichen Konzepte viel besser auf den Punkt gebracht werden.
Kehrt man nach diesem Umweg zu Evens zurück versteht man seine Ideen viel besser und erkennt dann auch was sonst noch alles für Informationen in diesem Buch stecken.
Zum Buch
“Domain-Driven Design: Tackling Complexity in the Heart of Software” von Eric Evans, 2003 Addison-Wesley, ISBN 978-0-3211-2521-7, 560 Seiten, Englisch
3 Helfer für die SharePoint-Entwicklung
SharePoint bietet als Entwicklungsplattform viele Möglichkeiten. Will man sich als Entwickler in dieses Gebiet einarbeiten kämpft man aber sehr bald mit einer Black Box. Was läuft nun eigentlich genau in meinem SharePoint? Wie bekomme ich das Paket an die richtige Stelle? Und wieso funktioniert mein Code nicht?
Einige dieser Fragen kann man mit den richtigen Werkzeugen beantworten. Mir haben die hier vorgestellten Tools in den letzten Monaten oft geholfen. Da ich nicht mehr auf diese Helfer verzichten möchte könnten diese auch für andere Entwickler interessant sein.
ULS Viewer
SharePoint schreibt viele Logmeldungen. So viele und vor allem so lange das man diese in einem Texteditor kaum vernünftig anschauen kann. Da auch Exceptions und deren Stacktrace in nur einer Zeile ausgegeben werden gilt es sich zudem an ein neues Ausgabenformat zu gewöhnen. Oder aber man nimmt ein dafür optimiertes Tool.
Der ULS Viewer hilft einem die Flut an Logmeldungen zu kontrollieren und bietet viele hilfreiche Funktionen:
- Filtermöglichkeit nach Priorität
- Tabellarische Darstellung mit der Möglichkeit die Spaltenbreite zu verändern
- Anzeige von Exceptions und Stacktraces mit den bekannten Zeilenumbrüchen
- Neue Meldungen werden ohne Unterbruch unten angefügt
- Automatisches anzeigen der neusten Meldungen (AutoScroll)
- Zusammengehörende Meldungen lassen sich gruppieren
Wichtig: Obwohl der ULS Viewer von Microsoft kommt gibt es dafür keinen Support.
CKS Plug-In für Visual Studio
Das Community Kit for SharePoint (oder kurz CKS) ist eine Sammlung von Best Practices, Vorlagen und Tools. Für Visual Studio gibt es mit CKSDev eine Erweiterung die dies alles installiert und an den richtigen Orten zur Verfügung stellt. Zur Installation genügt es über TOOLS / Extensions and Updates nach “CKSDev” zu suchen und das Paket zu installieren.
Neben den Vorlagen wird unter anderem auch eine Erweiterung für das Kontextmenü im Solution Explorer installiert. Klickt man nun auf ein SharePoint-Projekt erscheint der Punkt Quick Delploy (CKSDev):
Im obersten Teil dreht sich alles ums Installieren des Paketes. Mit einem Klick kann man nun sowohl ins SharePoint Root wie auch in den GAC deployen. Voraussetzung dafür ist das der SharePoint Server auf dem gleichen Gerät/VM läuft (für die Entwicklungsumgebung ist dies eh eine zwingende Voraussetzung).
Der mittlere Bereich liefert häufig verwendete Befehle rund um den IIS. Für ein iisreset muss man nicht mehr extra ein Konsolenfenster öffnen. Es genügt den entsprechenden Menüpunkt auszuwählen oder die Tastenkombination Alt+R, I zu verwenden.
Für mich war das Anhängen des Debuggers an die einzelnen Prozesse äusserst hilfreich. Diese Funktionen sind im untersten Teil untergebracht und fürs Aufspüren von Problemen Gold wert.
SharePoint Manager
Mit dem Deployment, den Möglichkeiten des Debuggers und dem anschauen der Logmeldungen kommt man weit. Hin und wieder genügt dies aber nicht. Wenn man wissen muss was im SharePoint für Objekte vorhanden sind muss man irgendwie hineinschauen können. Die Bordmittel helfen einem dabei leider nicht weiter.
Den Blick hinein ermöglicht der SharePoint Manager. In einem Baum werden alle Objekte die in einer SharePoint-Instanz vorhanden sind angezeigt. Beginnend bei der Farm kommt man über die Web-Applikation zu den Seiten und findet dort unter anderem die Listen, Felder und Content Types. Benötigt man eine GUID eines Feldes findet man diese neben allen anderen Angaben in den Eigenschaften.
Auch wenn ich eine Suchfunktion vermisse so liefert der SharePoint Manager doch eine Fülle von wichtigen Informationen.
Weitere Tools?
Soweit die Tools die mir schon oft geholfen haben. Wenn jemand weitere Werkzeuge empfehlen kann würde ich mich über einen entsprechenden Kommentar freuen.













