{"id":111,"date":"2007-12-10T09:52:00","date_gmt":"2007-12-10T09:52:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=111"},"modified":"2007-12-10T09:52:00","modified_gmt":"2007-12-10T09:52:00","slug":"schlechter-quellcode-von-neuralbuild-neurallimits","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2007\/12\/schlechter-quellcode-von-neuralbuild-neurallimits\/","title":{"rendered":"Schlechter Quellcode von NeuralBuild (NeuralLimits)"},"content":{"rendered":"<p>\u00dcber den Artikel <a title=\"http:\/\/entwickler.com\/itr\/news\/psecom,neu,1,id,39010,nodeid,82.html\" href=\"http:\/\/entwickler.com\/itr\/news\/psecom,neu,1,id,39010,nodeid,82.html\">http:\/\/entwickler.com\/itr\/news\/psecom,neu,1,id,39010,nodeid,82.html<\/a> bin ich auf einen Generator aufmerksam geworden, der automatisch DOAs und Transfer-Objekte erzeugt. Leider ist doch der <a href=\"http:\/\/www.neurallimits.com\/content\/view\/18\/\">generierte Quellcode<\/a> wenig \u00fcberzeugend. En Besipiel:<\/p>\n<pre class=\"prettyprint\">    public Integer insertCompany(Company criteriaCompany)<br \/>        throws NeuralBuildJavaSampleDAOInsertException {<br \/>        Integer keyVal = new Integer(0);<br \/>        con = connMgr.getConnection(\"neuralbuildjavasample\");<br \/>        int setindex = 1;<br \/>        String vSQL = constructInsertPreparedStatement(criteriaCompany);<br \/>        try {<br \/>            PreparedStatement ps = con.prepareStatement(vSQL,<br \/>                    PreparedStatement.RETURN_GENERATED_KEYS);<br \/>            if (criteriaCompany.CompanyID_isSet) {<br \/>                ps.setInt(setindex, criteriaCompany.getCompanyID().intValue());<br \/>                setindex++;<br \/>            }<br \/>            if (criteriaCompany.CompanyName_isSet) {<br \/>                ps.setDate(setindex,<br \/>                    (java.sql.Date) criteriaCompany.getCompanyName());<br \/>                setindex++;<br \/>            }<br \/>            ps.executeUpdate();<br \/>            ResultSet rs = ps.getGeneratedKeys();<br \/>            if (rs.next()) {<br \/>                keyVal = Integer.valueOf(rs.getObject(1).toString());<br \/>            }<br \/>            rs.close();<br \/>            rs = null;<br \/>            ps.close();<br \/>        } catch (Exception e) {<br \/>            connMgr.freeConnection(\"neuralbuildjavasample\", con);<br \/>            throw new NeuralBuildJavaSampleDAOInsertException(\"Insert Failed \" +<br \/>                e.getMessage(), e);<br \/>        }<br \/>        connMgr.freeConnection(\"neuralbuildjavasample\", con);<br \/>        return keyVal;<br \/>    }  <\/pre>\n<ul>\n<li>new Integer(0) wird immer gebaut, auch wenn es sp\u00e4ter \u00fcberschrieben wird.  <\/li>\n<li>finally fehlt: So ist das close() nicht garantiert. (Nicht sooo schlimm, da bei Freigabe der Connection auch ResultSet und XXXStatement freigegeben werden.)  <\/li>\n<li>Quellcode-Duplizierung bei connMgr.freeConnection(&#8222;neuralbuildjavasample&#8220;, con);. Das geh\u00f6rt auf jeden Fall in finally{}  <\/li>\n<li>Was soll den rs = null; bewirken? Den GC hilt das bei lokalen Variablen nun wirklich nicht.  <\/li>\n<li>catch (Exception e) muss wirklich sein? Ode doch catch (SQLException e)? <\/li>\n<li>Wenn die R\u00fcckgabe ein Integer-Objekt ist, warum dann &#8222;Integer.valueOf(rs.getObject(1).toString());&#8220; schreiben? Das funktioniert zwar, aber wenn getObject() schon in Integer ist, muss man nicht erst in ein String und dann wieder zur\u00fcck konvertieren. <\/li>\n<li>Sollte man wirklich einfach nur 0 zur\u00fcckliefern, wenn man keinen Schl\u00fcssel bekam?<\/li>\n<\/ul>\n<p>Die anderen Methoden habe auch so ihre Macken, so mit der Namensgebung.<\/p>\n<ul>\n<li>CachedRowSet Rs = null; Gro\u00df-\/Kleinschreibung! <\/li>\n<li>Gemische Gro\u00df-\/Kleinschreibung ist Standard, nicht so bei set<strong><u>i<\/u><\/strong>ndex. <\/li>\n<li>Unterstriche sind von Sun in der Namenskonvention nur bei Konstanten vorgesehen, aber nicht etwa bei CompanyID<strong>_<\/strong>isSet <\/li>\n<li>Ist die Namensgebung so gut, wenn man liest<br \/>ps.setDate(setindex, (java.sql.Date) criteriaCompany.getCompanyName() );<br \/>Also setDate() auf ein Company-Name?  <\/li>\n<li>Die API-Doku sollte nicht schreiben: &#8222;Delete an object from the database.&#8220; sondern laut Suns-JavaDoc-Vorgaben: &#8222;Delete<strong><u>s<\/u><\/strong> an object from the database.&#8220;<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u00dcber den Artikel http:\/\/entwickler.com\/itr\/news\/psecom,neu,1,id,39010,nodeid,82.html bin ich auf einen Generator aufmerksam geworden, der automatisch DOAs und Transfer-Objekte erzeugt. Leider ist doch der generierte Quellcode wenig \u00fcberzeugend. En Besipiel: public Integer insertCompany(Company criteriaCompany) throws NeuralBuildJavaSampleDAOInsertException { Integer keyVal = new Integer(0); con = connMgr.getConnection(&#8222;neuralbuildjavasample&#8220;); int setindex = 1; String vSQL = constructInsertPreparedStatement(criteriaCompany); try { PreparedStatement ps = [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false,"_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-111","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/111","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=111"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/111\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}