<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Axel Jung &#187; .NET</title>
	<atom:link href="http://www.ajung.de/category/internet/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ajung.de</link>
	<description>Privater Blog von Axel Jung aus Wiesbaden</description>
	<lastBuildDate>Mon, 03 May 2010 19:12:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>LINQ to SQL- Genial einfach</title>
		<link>http://www.ajung.de/2008/09/02/linq/</link>
		<comments>http://www.ajung.de/2008/09/02/linq/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 16:48:57 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=165</guid>
		<description><![CDATA[LINQ (Abkürzung für Language INtegrated Query) ist eine .NET Komponente für (ORM) Object-Relational Mapping. ORM verwendet man zum Zugriff auf Datenbanken und anderen Datenquellen keine SQL Syntax, sondern arbeitet mit Programmierlogik. Das macht den Code sehr einfach und sprechend.  In der Regel hat man eine Klasse mit der man nach Daten suchen kann und erhält [...]]]></description>
			<content:encoded><![CDATA[<p><strong>LINQ</strong> (Abkürzung für <strong>Language INtegrated Query</strong>) ist eine .NET Komponente für (ORM) Object-Relational Mapping. ORM verwendet man zum Zugriff auf Datenbanken und anderen Datenquellen keine SQL Syntax, sondern arbeitet mit Programmierlogik. Das macht den Code sehr einfach und sprechend.  In der Regel hat man eine Klasse mit der man nach Daten suchen kann und erhält Objekte zurück die, die Eigenschaften der Tabellen Spalten besitzen. ORM setzt sich in allen Programmiersprachen immer mehr durch und wenn man einmal damit gearbeitet hat, dann möchte man keine SQL Querys mehr schreiben.</p>
<p>In der PHP Welt ist das ORM Framework <a href="http://propel.phpdb.org/trac/">Propel</a> sehr verbreitet. LINQ ist im Vergleich zu Propel wesentlich einfacher zu verwenden.</p>
<p>In Visual Studio fügt man seinem Projekt einfach eine  LINQ to SQL-Klasse hinzu und zieht dann per Drag &amp; Drop die Datenbank-Tabelle auf das Designer Feld. Ab diesen Moment stehen einem die ORM Klassen im Projekt zur Verfügung.</p>
<p><img class="alignnone size-full wp-image-186" title="linq" src="http://www.ajung.de/wp-content/uploads/2008/09/linq.gif" alt="" width="500" height="219" /></p>
<p>Mit der Toolbox kann man Relationen abbilden.</p>
<p><img class="alignnone size-full wp-image-187" title="linq_1" src="http://www.ajung.de/wp-content/uploads/2008/09/linq_1.gif" alt="" width="208" height="124" /></p>
<p>Über die Eigenschaften kann man für die Standardmethoden auch Stored Procedures verwenden.</p>
<p><img class="alignnone size-full wp-image-188" title="linq_2" src="http://www.ajung.de/wp-content/uploads/2008/09/linq_2.gif" alt="" width="213" height="408" /></p>
<p>Wenn eine Tabelle Books heißt, hat man jetzt eine Klasse BooksDataContext mit der man Abfragen machen kann und Objekte des Typs Books zurückbekommt. Diese haben die Properties, die den Tabellen Spalten entsprechen.</p>
<p>Man kann die Abfrage auf zwei Arten durchführen.</p>
<p><strong>1. Query Abfrage:</strong></p>
<p>Diese sieht genauso aus wie SQL, ist aber Programmierlogik und führt zu Kompilefehlern wenn etwas nicht stimmt:</p>
<pre><span style="color: #ff0000;">Dim context As TaskListDataContext = New TaskListDataContext()</span><span style="color: #ff0000;">
Dim tasks As System.Linq.IOrderedQueryable(Of Tasks) =
         From task In context.Tasks Order By task.EntryDate Descending</span></pre>
<p><strong>2. Methoden Abfrage</strong></p>
<p>Mittels einer Menge von Methoden kann man die Daten aus der Context Klasse holen.</p>
<pre><span style="color: #ff0000;">Dim context As TaskListDataContext = New TaskListDataContext()
Dim tasks As System.Linq.IOrderedQueryable(Of Tasks) = context.Tasks.Select(Function(m) m)</span></pre>
<p>Ein <strong>Insert </strong>ist genau so einfach:</p>
<pre><span style="color: #ff0000;">Dim newTask As New Tasks()
newTask.Task = task
newTask.IsCompleted = False
newTask.EntryDate = DateTime.Now
db.Tasks.InsertOnSubmit(newTask)
db.SubmitChanges()</span></pre>
<p>Ich war überrascht das die Verwendung von <a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx">Linq</a> so einfach ist. Im Gegensatz zu Propel benötigt man kaum Einarbeitung und keine aufwendige Installation und XML Konfiguration.</p>
<p>Man kann Linq auch mit allen möglichen anderen Providern verwenden: <a class="external text" title="http://oakleafblog.blogspot.com/2007/03/third-party-linq-providers.html" rel="nofollow" href="http://oakleafblog.blogspot.com/2007/03/third-party-linq-providers.html">Third-Party LINQ Providers</a>.</p>
<p>Insbesondere die Verwendung mit XML (Linq to XML) kann sicher eine Menge Arbeit und Nerven sparen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2008/09/02/linq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC  Die ersten Gehversuche</title>
		<link>http://www.ajung.de/2008/08/26/aspnet-mvc-die-ersten-gehversuche/</link>
		<comments>http://www.ajung.de/2008/08/26/aspnet-mvc-die-ersten-gehversuche/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 15:45:12 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[asp.mvc]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[visual basic]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=134</guid>
		<description><![CDATA[ASP.NET ist eigentlich ganz gut geworden bis auf die Tatsache dass es nicht das MVC Design Pattern anwendet. Dieses Pattern ist aber mittlerweile einfach Standard und wenn man mal damit gearbeitet hat, dann möchte man es nicht mehr missen. Deshalb gibt es das ASP.NET MVC Projekt. Nach der Installation des ASP.NET MVC Preview 4 Release [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.asp.net/">ASP.NET</a> ist eigentlich ganz gut geworden bis auf die Tatsache dass es nicht das MVC Design Pattern anwendet. Dieses Pattern ist aber mittlerweile einfach Standard und wenn man mal damit gearbeitet hat, dann möchte man es nicht mehr missen. Deshalb gibt es das <a href="http://www.asp.net/mvc/">ASP.NET MVC</a> Projekt.</p>
<p>Nach der Installation des <a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=15389">ASP.NET MVC Preview 4</a> Release musste ich noch die Code Templates für Visual Studio nachträglich installieren. Diese findet man <a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=aspnet&amp;ReleaseId=13792">hier</a>.</p>
<p>Wenn man jetzt ein ASP.MVC Projekt anlegt bekommt man folgende Struktur im Projekt:</p>
<p><img class="alignnone size-full wp-image-136" title="aspmvc_1" src="http://www.ajung.de/wp-content/uploads/2008/08/aspmvc_1.jpg" alt="" width="99" height="132" /></p>
<p>Genau wie andere MVC Frameworks muss man hier auf die richtige Namensgebung der Klassen und Template Dateien achten.</p>
<p>Die Controller Klassen müssen immer mit <em><strong>Controller </strong></em>enden<strong> </strong>(Controller/TasksController.vb)<strong> </strong>und die View Templates müssen in dem Ordner liegen wie der Controller heißt und den Namen der Methode haben (/Views/Tasks/Create.aspx).<strong><br />
</strong></p>
<p>Gut gelöst ist das URL Mapping. Um eine Action aufzurufen, gibt man in der Url den Namen des Controllers an und dessen Methode.</p>
<p>Beispiel:</p>
<p><strong>/Tasks/Create/</strong></p>
<p>Diese Url ruft die Methode <strong>Create </strong>der Klasse <strong>TaskController </strong>auf.</p>
<p>Schön gelöst ist die Verwendung von Parametern in Controllern. Man kann in der Signatur einer Controller Methode angeben, welche Parameter angegeben werden können und auch dessen Typ festlegen.</p>
<pre><span style="color: #800000;">Function Complete(ByVal id As Integer) As ActionResult</span></pre>
<p>Die Übergabe der Daten an die View erfolgt genau so einfach indem man die Werte als Parameter dem View übergibt.</p>
<pre><span style="color: #800000;">Return View(tasks.ToList())</span></pre>
<p>Diese Werte kann man in der View aspx Seite dann aus dem Property ViewData auslesen.</p>
<h3>Fazit</h3>
<p>Es handelt sich hier um ein sehr einfach zu bedienendes Framework das sehr schlank daher kommt. Die Einarbeitung geht schnell. In Verbindung mit Linq kann man damit sehr schnell übersichtliche Applikationen schreiben. Das Framework kommt völlig ohne die ASP Tags aus. Das macht es auch für unerfahrene ASP Entwickler einfach.</p>
<p>Sehr gute Screencasts findet man hier: <a href="http://www.asp.net/learn/mvc-videos/">http://www.asp.net/learn/mvc-videos/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2008/08/26/aspnet-mvc-die-ersten-gehversuche/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Codeabdeckungs Analyse und Codemetric in .NET</title>
		<link>http://www.ajung.de/2008/08/25/codeabdeckungs-analyse-und-codemetric-in-net/</link>
		<comments>http://www.ajung.de/2008/08/25/codeabdeckungs-analyse-und-codemetric-in-net/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 16:00:21 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Codeabdeckung]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=137</guid>
		<description><![CDATA[Ich bin mittlerweile glücklicher Besitzer der Visual Team System IDE mit dem Feature Codeabdeckungs Analyse. Die Professionell Version besitzt ja schon eine sehr komfortable Möglichkeit Unit Tests zu erstellen und diese in der IDE auszuführen. In der Team Version kann man nach dem ausführen der Tests die Abdeckung der Tests analysieren. Das heißt: Wie gut [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ajung.de/wp-content/uploads/2008/08/vs_2008.jpg"><img class="alignright size-full wp-image-140" title="vs_2008" src="http://www.ajung.de/wp-content/uploads/2008/08/vs_2008.jpg" alt="" width="500" height="61" /></a>Ich bin mittlerweile glücklicher Besitzer der Visual Team System IDE mit dem Feature Codeabdeckungs Analyse. Die Professionell Version besitzt ja schon eine sehr komfortable Möglichkeit Unit Tests zu erstellen und diese in der IDE auszuführen. In der Team Version kann man nach dem ausführen der Tests die Abdeckung der Tests analysieren. Das heißt: Wie gut ist mein Code getestet und welche Stellen sind noch zu testen.</p>
<p>Als erstes bekommt man eine übersichtlich Statistik angezeigt mit der man schnell die Problematischen Stellen finden kann.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2008/08/code_coverage_result.jpg"><img class="alignnone size-full wp-image-138" title="code_coverage_result" src="http://www.ajung.de/wp-content/uploads/2008/08/code_coverage_result.jpg" alt="" width="500" height="226" /></a></p>
<p>Beim Klick auf eines der Ergebnisse kommt man in die Code Ansicht und sieht die Stellen im Code rot markiert, die nicht durchlaufen worden sind im Test.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2008/08/code_coverage_result_1.jpg"><img class="alignnone size-full wp-image-141" title="code_coverage_result_1" src="http://www.ajung.de/wp-content/uploads/2008/08/code_coverage_result_1.jpg" alt="" width="500" height="231" /></a></p>
<p>Ein weiteres nützliches Feature ist die Codemetric. Codemetricen können die Komplexität und Wartbarkeit des Codes Prüfen. Es ist nützlich um den eigenen Code Style zu prüfen, oder auch beim Einsatz in großen Projekten wenn man nicht überblicken kann wie die einzelnen Programmierer arbeiten.</p>
<p>Diese ruft man einfach mittels Rechtsklick auf dem Projekt auf.</p>
<p><img class="alignnone size-full wp-image-142" title="code_metric" src="http://www.ajung.de/wp-content/uploads/2008/08/code_metric.jpg" alt="" width="304" height="246" /></p>
<p>Man erhält dann relativ schnell eine übersichtliche Auswertung. Mit den Werten für:</p>
<ul>
<li>Wartungsindex</li>
<li>Anzahl der Verzweigungen</li>
<li>Vererbungstiefe</li>
<li>Klassen Kopplung</li>
<li>Codezeilen</li>
</ul>
<p><a href="http://www.ajung.de/wp-content/uploads/2008/08/code_metric_1.jpg"><img class="alignnone size-full wp-image-143" title="code_metric_1" src="http://www.ajung.de/wp-content/uploads/2008/08/code_metric_1.jpg" alt="" width="500" height="152" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2008/08/25/codeabdeckungs-analyse-und-codemetric-in-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
