{"id":58,"date":"2020-12-28T19:20:20","date_gmt":"2020-12-28T18:20:20","guid":{"rendered":"http:\/\/192.168.178.38\/?p=58"},"modified":"2020-12-28T19:20:20","modified_gmt":"2020-12-28T18:20:20","slug":"antipattern-code-usability","status":"publish","type":"post","link":"https:\/\/lpl-mind.de\/en\/antipattern-code-usability\/","title":{"rendered":"Antipattern \u2013 code usability"},"content":{"rendered":"<p>Schnittstellen zu fremden System werden explizit entworfen. Jede weitere Methode die angeboten wird ist genauestens auf dem Bed\u00fcrfnis des sp\u00e4teren Nutzers abgestimmt. Oftmals sind diese Schnittstellen gut definiert bzw. Ein Dritter ist in der Lage diese zu nutzen. Nun warum wird dieses Prinzip nicht auf jedes Modul, welches intern genutzt wird, angewendet? Auch hier gibt es einen sp\u00e4teren Anwender, bzw. Ein Kollege der dieses Modul verwenden soll.<br \/>\nIn dem folgenden Beispiel wird ein antipattern gezeigt. Dort ist ein kleiner Ausschnitt eines Settings Modul beschrieben. Dieses Modul soll ein Setting verwalten, das hei\u00dft in eine DB schreiben und lesen.<\/p>\n<div class=\"codecolorer-container csharp default\" style=\"overflow:auto;white-space:nowrap;width:700px;height:800px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/><\/div><\/td><td><div class=\"csharp codecolorer\"><span class=\"co1\">\/\/ folgende schritte werden benotigt um ein menu punkt hinzu zu f\u00fcgen<\/span><br \/>\n<span class=\"co1\">\/\/ 1. F\u00fcge die enum hinzu<\/span><br \/>\n<span class=\"co1\">\/\/ 2. F\u00fcge den typ hinzu<\/span><br \/>\n<span class=\"co1\">\/\/ 3. Konverter bei komplexen typen<\/span><br \/>\n<span class=\"co1\">\/\/ 4. Wenn der typ in der db nicht bekannt ist.<\/span><br \/>\n<span class=\"co1\">\/\/ 5. Wenn der typ ver\u00e4ndert wurde und konvertiert werden muss<\/span><br \/>\n<span class=\"co1\">\/\/ 6. Men\u00fc punkt f\u00fcr die settings festlegen<\/span><br \/>\n<span class=\"co1\">\/\/ 7. Default werte festlegen<\/span><br \/>\n<span class=\"kw4\">class<\/span> Settings<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"co1\">\/\/ zu 1. &nbsp; <\/span><br \/>\n&nbsp; &nbsp;<span class=\"kw4\">enum<\/span> Typ<span class=\"br0\">&#123;<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; smtp<span class=\"sy0\">-<\/span>url,<br \/>\n&nbsp; &nbsp; &nbsp; smtp<span class=\"sy0\">-<\/span>port,<br \/>\n&nbsp; &nbsp; &nbsp; cachesize,<br \/>\n&nbsp; &nbsp; &nbsp; temppath<br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"co1\">\/\/ zu 2.<\/span><br \/>\n&nbsp; &nbsp;Dictionary<span class=\"sy0\">&lt;<\/span>Typ, Type<span class=\"sy0\">&gt;<\/span> typelist <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.google.com\/search?q=new+msdn.microsoft.com\"><span class=\"kw3\">new<\/span><\/a> Dictionary<span class=\"sy0\">&lt;<\/span>Typ, Type<span class=\"sy0\">&gt;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Typ<span class=\"sy0\">.<\/span><span class=\"me1\">smtp<\/span><span class=\"sy0\">-<\/span>url<span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.google.com\/search?q=typeof+msdn.microsoft.com\"><span class=\"kw3\">typeof<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Typ<span class=\"sy0\">.<\/span><span class=\"me1\">smtp<\/span><span class=\"sy0\">-<\/span>port<span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.google.com\/search?q=typeof+msdn.microsoft.com\"><span class=\"kw3\">typeof<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span><span class=\"br0\">&#41;<\/span> ,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Typ<span class=\"sy0\">.<\/span><span class=\"me1\">cachesize<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.google.com\/search?q=typeof+msdn.microsoft.com\"><span class=\"kw3\">typeof<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"co1\">\/\/ zu 7.<\/span><br \/>\n&nbsp; &nbsp;Dictionary<span class=\"sy0\">&lt;<\/span>Typ, <span class=\"kw4\">object<\/span><span class=\"sy0\">&gt;<\/span> defaultvalues <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.google.com\/search?q=new+msdn.microsoft.com\"><span class=\"kw3\">new<\/span><\/a> Dictionary<span class=\"sy0\">&lt;<\/span>Typ, <span class=\"kw4\">object<\/span><span class=\"sy0\">&gt;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Typ<span class=\"sy0\">.<\/span><span class=\"me1\">smtp<\/span><span class=\"sy0\">-<\/span>url<span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;localhost&quot;<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Typ<span class=\"sy0\">.<\/span><span class=\"me1\">smtp<\/span><span class=\"sy0\">-<\/span>port<span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">23<\/span> ,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Typ<span class=\"sy0\">.<\/span><span class=\"me1\">cachesize<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">100000<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"co1\">\/\/ zu 6.<\/span><br \/>\n&nbsp; &nbsp;Dictionary<span class=\"sy0\">&lt;<\/span>Typ, <span class=\"kw4\">String<\/span><span class=\"sy0\">&gt;<\/span> menulist <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.google.com\/search?q=new+msdn.microsoft.com\"><span class=\"kw3\">new<\/span><\/a> Dictionary<span class=\"sy0\">&lt;<\/span>Typ, <span class=\"kw4\">String<\/span><span class=\"sy0\">&gt;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Typ<span class=\"sy0\">.<\/span><span class=\"me1\">smtp<\/span><span class=\"sy0\">-<\/span>url<span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;E-mail&quot;<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Typ<span class=\"sy0\">.<\/span><span class=\"me1\">smtp<\/span><span class=\"sy0\">-<\/span>port<span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> &nbsp;<span class=\"st0\">&quot;E-mail&quot;<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Typ<span class=\"sy0\">.<\/span><span class=\"me1\">cachesize<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;System&quot;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Zu erkennen ist das der Entwickler keine richtige Schnittstelle definiert hat, in der eine Setting hinzugef\u00fcgt werden kann. Stattdessen wurde ein Kommentar mit Anweisungen hinterlassen. Somit muss ein Entwickler genauestens diesen Anweisungen folgen, um eine Setting korrekt anzulegen.  Beispielsweise muss er in einer enum eine neue Settingskey definieren und zu dieser den passenden objekttyp in einer dictionary eintragen.<br \/>\nDieses Vorgehen sorgt daf\u00fcr das der nachkommende Entwickler entsprechende mehr Zeit investieren muss, um eine Setting anzulegen. Au\u00dferdem ist die Fehlerwahrscheinlich bei diesem Vorgehen gr\u00f6\u00dfer, da es zu Missverst\u00e4ndnissen kommen kann.  Ich lasse die Frage offen wie dieser Code refactored werden kann. Freue mich \u00fcber die Kommentare und m\u00f6glichen refactoring M\u00f6glichkeiten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Schnittstellen zu fremden System werden explizit entworfen. Jede weitere Methode die angeboten wird ist genauestens auf dem Bed\u00fcrfnis des sp\u00e4teren Nutzers abgestimmt. Oftmals sind diese Schnittstellen gut definiert bzw. Ein Dritter ist in der Lage diese zu nutzen. Nun warum wird dieses Prinzip nicht auf jedes Modul, welches intern genutzt [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-58","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/lpl-mind.de\/en\/wp-json\/wp\/v2\/posts\/58"}],"collection":[{"href":"https:\/\/lpl-mind.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lpl-mind.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lpl-mind.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lpl-mind.de\/en\/wp-json\/wp\/v2\/comments?post=58"}],"version-history":[{"count":2,"href":"https:\/\/lpl-mind.de\/en\/wp-json\/wp\/v2\/posts\/58\/revisions"}],"predecessor-version":[{"id":60,"href":"https:\/\/lpl-mind.de\/en\/wp-json\/wp\/v2\/posts\/58\/revisions\/60"}],"wp:attachment":[{"href":"https:\/\/lpl-mind.de\/en\/wp-json\/wp\/v2\/media?parent=58"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lpl-mind.de\/en\/wp-json\/wp\/v2\/categories?post=58"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lpl-mind.de\/en\/wp-json\/wp\/v2\/tags?post=58"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}