<?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>Programmierung &#8211; IT Service Herzog Blog</title>
	<atom:link href="https://itservice-herzog.de/blog/tag/programmierung/feed/" rel="self" type="application/rss+xml" />
	<link>https://itservice-herzog.de/blog</link>
	<description>Softwareblog von Matthias Herzog</description>
	<lastBuildDate>Thu, 03 Aug 2017 00:05:37 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.2.3</generator>
	<item>
		<title>Programmierrichtlinien</title>
		<link>https://itservice-herzog.de/blog/programmierrichtlinien/</link>
				<comments>https://itservice-herzog.de/blog/programmierrichtlinien/#comments</comments>
				<pubDate>Tue, 28 May 2013 10:17:43 +0000</pubDate>
		<dc:creator><![CDATA[ReMaker]]></dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Codingstyle]]></category>
		<category><![CDATA[Webentwicklung]]></category>

		<guid isPermaLink="false">http://blog.matthias-herzog.net/?p=63</guid>
				<description><![CDATA[Allgemeine Arbeitsweise: 1. Zu jeder Prozedur, Funktion, Objekt und Klasse sind Header, die die Funktionalität beschreiben, anzufertigen. Bsp.: /*Programm: final-end.net *Description: in diesem Objekt werden alle Daten zum User zugreifbar und änderbar gemacht, jede Eigenschaft *(Useralter) ist somit im Programm verfügbar. *Author: Max Mustermann *Datum: 01.01.2013 *E-Mail: M.Mustermann@final-end.de */ Die Dokumentation des Quellcodes sollte kurz &#8230; <a href="https://itservice-herzog.de/blog/programmierrichtlinien/" class="more-link">Weiter lesen >> <span class="screen-reader-text">Programmierrichtlinien</span> <span class="meta-nav">&#8594;</span></a>]]></description>
								<content:encoded><![CDATA[<h1><span style="font-size: medium;"><b>Allgemeine Arbeitsweise:</b></span></h1>
<p>1. Zu jeder Prozedur, Funktion, Objekt und Klasse sind Header, die die Funktionalität beschreiben, anzufertigen.<br />
<span id="more-63"></span></p>
<p>Bsp.:<span style="color: #008000; font-family: Courier New,serif; font-size: small;"><br />
/*Programm: final-end.net<br />
*Description: in diesem Objekt werden alle Daten zum User zugreifbar und änderbar gemacht, jede Eigenschaft<br />
*(Useralter) ist somit im Programm verfügbar.<br />
*Author: Max Mustermann<br />
*Datum: 01.01.2013<br />
*E-Mail: M.Mustermann@final-end.de<br />
*/</span></p>
<p style="margin-bottom: 0cm;"><span lang="de-DE">Die Dokumentation des Quellcodes sollte kurz und prägnant gehalten sein.</span></p>
<p style="margin-bottom: 0cm;"><span lang="de-DE">Bsp.: </span><span style="font-family: Courier,serif;"><span style="font-size: small;"><span lang="de-DE">if ($<span style="font-size: small;">U</span>ser<span style="font-size: small;">-&gt;</span>getAlter() &gt; 18 <span style="font-size: small;">)</span> $Status = &#8222;erwachsen&#8220;</span></span></span><span lang="de-DE"> //</span><span style="color: #008000;"><span style="font-family: Courier New,serif;"><span style="font-size: small;"><span lang="de-DE">Useralter prüfen und Status festlegen</span></span></span></span></p>
<p style="margin-bottom: 0cm;">2. Bei jeder Änderung an Prozeduren oder Funktionen eine Beschreibung am Header hinzufügen</p>
<p>Bsp.:</p>
<p><span style="color: #008000;"><span style="font-family: Courier New,serif;"><span style="font-size: small;"><b><b>//</b> änderung: Max Mustermann &#8211; Objekt um Variable x erweitert</b></span></span></span></p>
<p>3.Grundsätzlich werden keine Umlaute verwendet. <span style="color: #ff0000;"><b>ö =&gt; oe , ä =&gt; ae, ü =&gt; ue<br />
</b></span></p>
<p>schreibt einfach in der Englischen Sprache euren Programmcode und ihr werdet feststellen das ich keinerlei Probleme mit umlauten haben werdet <img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>4. <b>Namensgebung:</b></p>
<p>Bsp.:</p>
<ul>
<li>Variablenname: <span style="color: #ff0000;">U</span>ser<span style="color: #ff0000;">V</span>orname (Höckerschreibweise)</li>
<li>Konstanten: KONSTANTEN_NAME</li>
<li>Formular: <span style="color: #ff0000;">frm</span>_<span style="color: #ff0000;">M</span>ap_<span style="color: #ff0000;">U</span>ser<span style="color: #ff0000;">D</span>ata (frm_Modul_Beschreibung) bei kleineren Projekt kann das Modul auch weggelassen werden aber Vorsicht! jedes Projekt fängt einmal klein an</li>
<li>DB-Tabelle: <span style="color: #ff0000;">tbl</span>_<span style="color: #ff0000;">User</span></li>
<li>Steuerelement: <span style="color: #ff0000;">tb</span>_<span style="color: #ff0000;">M</span>ap_<span style="color: #ff0000;">U</span>ser<span style="color: #ff0000;">D</span>ata_<span style="color: #ff0000;">S</span>ure<span style="color: #ff0000;">N</span>ame&gt;</li>
<li>Funktionen: <span style="color: #4f81bd;">o</span>pen<span style="color: #ff0000;">F</span>rm<span style="color: #ff0000;">M</span>ap<span style="color: #ff0000;">U</span>ser<span style="color: #ff0000;">D</span>ata() (Höckerschreibweise)</li>
</ul>
<p>&nbsp;</p>
<p>Hierbei ist die Höckerschreibweise genauso, wie der Aufbau der Bezeichnungen als Grundlage zu betrachten. Die Namensgebung ist so zu wählen, dass der Name eine Aussage zur Funktionalität und zum Einsatzort gibt.</p>
<p><b>Konstantennamen</b> werden immer groß geschrieben und durch „_“ (Underline) getrennt.</p>
<p>&nbsp;</p>
<p>Die Benennung von <b>Funktionen</b> erfolgt mittels Höckerschreibweise und muss beschreibende Attribute im Namen beinhalten.</p>
<p>Bsp.: <span style="color: #4f81bd;">calculateMapUnitPosition()</span> // der Name der Funktion muss den sinn und den Zweck ihres selbst wieder geben. Ich habe in meiner mehrjährigen Tätigkeit als Entwickler schon sehr viel gesehen und kann aus Erfahrung sagen funktion a() &#8211; z() die nur einen Buchstaben haben sind ja gut und schön aber niemand wird nach einem halben Jahr noch wissen was diese Fkt. tun. Haltet euch an den Leitspruch &#8222;Keep It Simple&#8220;. Gerade bei diesem Thema komme ich nicht umhin die Autocomplet Funktion der Meisten IDE&#8217;s (Integrated development environment) anzusprechen<br />
. wenn Ihr zum Beispiel ein Eclipse oder Visuallstudio benutzt versucht doch mal STRG + Leertaste. mit dem Richtigen Codingstyle und dieser Funktion werdet ihr die Programmierung im neuen Maße kennenlernen.</p>
<p><b>5 Datenbank:</b></p>
<p>Eine Sehr wichtige Konvention ist es die Datenbank sauber und übersichtlich zu halten. Viele werden jetzt bestimmt Abbnicken und sagen jetzt Übertreibt er es aber ganz schön, ich sage nein tut er nicht. Stellt euch eine Datenbank mit knapp 200 Tabellen vor, Dazu noch ein paar Hundert Views und las uns sagen noch ein paar hundert Trigger und Stored Procedures und schon seit ihr ohne Codingstyle am Rande der HÖLLE angekommen. Bitte immer im Hinterkopf behalten das die nachkommenden Konventionen dazu dienen die Datenbank aufzulockern und übersichtlicher zu gestalten. Ja mir ist bewusst das es mehr Arbeit ist kleine Buchstaben an die Datenbanken, Tabellen, und einzelnen Spalten zu schreiben, diese helfen aber nach im laufe des Projektes Zeit einzusparen.</p>
<p>Kommen wir dazu wie wir Ordnung in die Datenbank bekommen.</p>
<p><strong>Datenbank</strong></p>
<p>(db) db_FinalEnd // der Name der Datenbank<br />
Solltest du später in deinem Projekt mehrere Datenbanken mit dem selben Namen brauchen nimm einfach</p>
<p>(db) db_FinalEnd1 // der Name der Datenbank<br />
(db)db_FinalEnd2 // der Name der Datenbank</p>
<p><strong>Tabellen</strong></p>
<p>(tbl) tbl_Modul_Inhalt</p>
<p>Bsp.: tbl_Global_User // hier mit Angabe des Modules</p>
<p>tbl_User // dies wäre sich Tabelle für die User</p>
<p>tbl_UserAttribut // wäre Sozusagen die M zu N Beziehungtabelle</p>
<p>alternativ könnte man hier auch schreiben</p>
<p>tbl_AttributUser // das Äquivalent zu tbl_UserAttribut</p>
<p>Es ist kein muss den Modul Namen mit in den Tabellennamen mit aufzuführen. Stellt aber bitte sicher das wenn ihr einmal mit einer Richtlinie begonnen habt diese im Projekt auch konsequent Durchzieht.</p>
<p><strong>View&#8217;s</strong></p>
<p>(v) v_UserAttribut</p>
<p><strong>Trigger und Stored Procedures</strong></p>
<p>Ich fasse Diesen Punkt zusammen da ich der Meinung bin: &#8222;bitte benutzt Trigger und Stored Procedures&#8220; nur wenn ihr und bedingt müsst&#8220;. Ein Grund Stored Procedures zu benutzen wäre der Performance Gewinn gegenüber normalen SQL bzw. einem ORM. Das es keinen Sinn macht Große Datenmengen aus der Datenbank zu laden diese zu verarbeiten und wieder in die Datenbank abzulegen. Also wenn ihr Zeitkritische Prozeduren unter großem Datenaufwand entwickeln müsst nehmt Stored Procedures es gibt keine besser lösung. Aber seit euch bewusst das ihr zwangsläufig Anwendungslogik innerhalb der Datenbank abbildet und ihr zum Schluss an 2 punkten im system Bugfixing betreiben müsst sollte es zu Fehlern im Programm kommen. So komme ich zu fragen wie Debuggt man einen Stored Procedures ^^. Falls Ihr unit Testing im Einsatz habt baut ihr euch noch ein Testsystem für die Datenbank? Noch ein Negativbeispiel für Übertriebenes Datenbank Funktionalität. Stellt euch ein System vor in dem fast 60% der Anwendungslogik in der Datenbank Liegt. so zum beispiel auch die Fkt. insertUser(Name,PassHash, &#8230;. Macht eine Solche Funktion Sinn. Zum einen kann man in einer solchen Datenbank fkt. die Prüfung der eingaben tätigen und im Fehlerfall eine exception werfen. Zum andern würde das ein Normales SQl insert Statement auch tun, Das Problem dabei ist, sollte sich etwas am user ändern, ändert man an 2 stellen in der DB + an der st elle im Programm selbst. Ich würde in einem Solchen fall raten benutz doch einen der Zahlreichen ORM&#8217;S z.b. Linq, oder Hibernate und fackelt die Komplette Fehlerbehandlung in der Applikation ab.</p>
<p>Sind Trigger Gut oder Böse, ich sage beides. In den Richtigen Händen sind Trigger eine sehr gute Erfindung. Falls jetzt irgend jemand auf die Idee kommt seine 50 Tabellen Datenbank mit 1000 Triggern so zu optimieren das sie alles von alleine macht tut es nicht. Trigger steigern die komplezität eurer Datenbankprojekte ins unermessliche. Stellt euch vor ihr fügt einen neuen User in die Datenbank und zusätzlich werden in 5 weiteren Tabellen Daten für den User voll automatisch vorbereitet. Sowas ist Voll cool da muss ich jedem rechtgeben bis auf wenn sich was ändert. Mir ist durchaus bewusst das man mit einer Guten Projektplanung die Datenbank so aufbauen kann das Ãnderung die Ausnahme sind. <strong>Ausnahmen bestätigen die Regel</strong>. Zu mal es ist garnicht so einfach ist nachzuvollziehen wann ein Trigger abgearbeitet wird und was er getan hat. So kommen wir wieder zu dem Problem eines Bug&#8217;s, ist der Fehler nun in der Datenbank aufgetretten oder im Programmcode. Ich würde empfehlen nutzt Trigger behutsam um die Datenbank sauber zu halten. bedenken lost könnt ihr trigger einsetzen um zum beispiel im Fall das ein User aus der Db entfernt wird zusätzliche Userdaten aus der DB zu entfernen.</p>
<p><strong>Spalten</strong></p>
<p><strong></strong>Datentyp_Beschreibung</p>
<p>Bsp.: s_Name // gibt an das in der Spalte Name ein string hinterlegt ist</p>
<p>Datentypen:</p>
<ul>
<li>i Integer</li>
<li>s String (bis 50 Zeichen)</li>
<li>d DateTime</li>
<li>t Text (Feld in den XML eingefügt werden kann)</li>
<li>f Float, Double</li>
<li>b Boolean</li>
<li>dz Decimal (6,2)</li>
</ul>
<p>so ergeben Sich z.B. folgende Konstrukte</p>
<p>db_FinalEnd</p>
<p>tbl_User</p>
<p>i_Id, s_Name, s_PassHash, d_Registerdate, d_Lastogin,t_Description,b_IsPremium &#8230;&#8230;</p>
<p>Der Vorteil habt ihr wenn ihr einen ORM im Programm benutzt im normalfalls erzeug ihr euer DB Objekt ich machen das jetzt kurz in PHP mit dem Kohana Orm</p>
<p>$User=ORM::factory(&#8222;User&#8220;, 1); // ich Lade mir den User mit der Id 1 aus der db</p>
<p>$User-&gt;s_name=&#8220;Matthias&#8220;; // es wird im Porgrammcode sofort ersichtlich es muss ein string sein</p>
<p>$User-&gt;d_Registerdate=time(); // es wird im Porgrammcode sofort ersichtlich hier muss ein datum rein in diesem beispiel ein timestamp</p>
<p>$User-&gt;save();</p>
<p><b>6 Steuerelemente</b></p>
<p><span style="color: #f79646;"><span style="font-size: large;"><b>Steuerelement</b></span></span><span style="font-size: large;"><b> _</b></span><span style="color: #1f497d;"><span style="font-size: large;"><b>Template</b></span></span><span style="font-size: large;"><b>_</b></span><span style="color: #00b050;"><span style="font-size: large;"><b>Beschreibung</b></span></span></p>
<p>RadioButton (<span style="color: #f79646;"><b>rb</b></span>) &#8211; <span style="color: #f79646;"><b>rb</b></span> _<span style="color: #1f497d;"><b>Praesentation</b></span>_<span style="color: #00b050;"><b>UserRank</b></span></p>
<p>Label (<span style="color: #f79646;"><b>lbl</b></span>) &#8211; <span style="color: #f79646;"><b>lbl</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>SureName </b></span></p>
<p>Button (<span style="color: #f79646;"><b>btn</b></span>) &#8211; <span style="color: #f79646;"><b>btn</b></span> _<span style="color: #1f497d;"><b>Income</b></span>_<span style="color: #00b050;"><b>Calculate</b></span></p>
<p>CheckBox (<span style="color: #f79646;"><b>cb</b></span>) &#8211; <span style="color: #f79646;"><b>cb</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>HasPremium</b></span></p>
<p>ListBox (<span style="color: #f79646;"><b>lb</b></span>) &#8211; <span style="color: #f79646;"><b>lb</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>Id</b></span></p>
<p>TextBox (<span style="color: #f79646;"><b>tb</b></span>) &#8211; <span style="color: #f79646;"><b>tb</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>Description</b></span></p>
<p>ComboBox (<span style="color: #f79646;"><b>cob</b></span>) &#8211; <span style="color: #f79646;"><b>cob</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>Titel</b></span></p>
<p>GroupBox (<span style="color: #f79646;"><b>gb</b></span>) &#8211; <span style="color: #f79646;"><b>gb</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>Example</b></span></p>
<p>DateTimePicker (<span style="color: #f79646;"><b>dtp</b></span>) &#8211; <span style="color: #f79646;"><b>dtp</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>BirthDate</b></span></p>
<p>DataGridView (<span style="color: #f79646;"><b>dgv</b></span>) &#8211; <span style="color: #f79646;"><b>dgv</b></span>_<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>Survey</b></span></p>
<p>&nbsp;</p>
<p><b>7 Schleifen:</b></p>
<p>für Zählschleifen werden Grundsätzlich Zählvariablen genommen:</p>
<p>Zähler = <b>i</b>, 2. = <b>j</b>, 3. =<b>k </b> und 4. Zähler = <b>m</b></p>
<p><b>8. Arbeitsweise:</b></p>
<ol>
<li>Header erstellen</li>
<li>Einhalten der Namenskonvention (ordentliche Wahl des Namens)</li>
<li>Einhalten der Ordnerstruktur</li>
<li>Zerlegen der Funktion in kleinst mögliche Schritte</li>
</ol>
<p><b>9. Ordnerstruktur:</b></p>
<p>Ein Programm kann wie Folgt aufgebaut.</p>
<p>Der Ordner „System „ stellt den Stammordner der Software dar.</p>
<p>In Ihm wird die Unterteilung nach vorgenommen.</p>
<ol>
<ol>
<li><span style="font-size: small;"><b>Class</b></span>
<ol>
<li>DatabaseObjects // classen des ORMs</li>
<li>Objects // Praogramm spezifische klasse</li>
<li>Controler oder Logic // die Controler schicht + Programm logic</li>
<li>Database // der Datenbank Connector falls eine datenbank im system benutzt werden soll</li>
</ol>
</li>
<li><span style="font-size: small;"><b>Cfg //</b> der Platz für die Configurationsdatein<b><br />
</b></span></li>
<li><span style="font-size: small;"><b>Img // </b>der Platz für deine Bild Ressourcen<b><br />
</b></span></li>
<li><span style="font-size: small;"><b>Js // </b>eventuelle javascripts<b><br />
</b></span></li>
<li><strong>CSS // der platz für deine Css datein</strong></li>
<li><span style="font-size: small;"><b>Plugins // falls es möglich ist für dein Programm plugins zu erstellen oder du plugins von 3 anbierten benutzt die kommen hier rein<br />
</b></span></li>
<li><span style="font-size: small;"><b>View // alle Templates die erstellt werden kommen in den View ordner unr nirgends wo anders<br />
</b></span></li>
</ol>
</ol>
<p lang="de-DE">Das sind meine vorstellungen von einem Codingstyle.</p>
<p lang="de-DE">Natürlich ist das nur vorlagen die man nicht zwingend benutzen muss aber jeder der wschon einmal in einem größeren Katastrophen Programm mitgearbeitet hat weis was es bedeuten einen Codingstyle zu haben.</p>
<p lang="de-DE">Vielen Dank fürs lesen</p>
<p>&nbsp;</p>
]]></content:encoded>
							<wfw:commentRss>https://itservice-herzog.de/blog/programmierrichtlinien/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
							</item>
	</channel>
</rss>
