Java >> Java Tutorial >  >> Java

Was ich diese Woche gelernt habe (Woche 37/2013)

Jede Woche schreibe ich einen Blogbeitrag, der beschreibt, was ich in dieser Woche gelernt habe. Ich schreibe diese Blogbeiträge aus zwei Gründen.

Zuerst , ich möchte meine persönliche Entwicklung im Auge behalten, und das Schreiben regelmäßiger Blogbeiträge ist eine großartige Möglichkeit, dies zu tun.

Zweite , ich möchte meine Erkenntnisse mit Ihnen teilen. Ich hoffe, dass Sie einige davon in Ihrer täglichen Arbeit verwenden können.

Fangen wir an und finden heraus, was ich in Woche 37 gelernt habe.

Was ich in Woche 37 gelernt habe

Zuerst , Verwenden Sie den Index, Luke!. Ich habe festgestellt, dass die Popularität verschiedener ORM-Bibliotheken eine Atmosphäre geschaffen hat, in der Entwickler dazu neigen, relationale Datenbanken als Bürger zweiter Klasse zu behandeln.

Ich finde es etwas deprimierend, dass Entwickler möglicherweise viel Energie für die Optimierung ihres Codes aufwenden, ohne sich um die Datenbank zu kümmern. Es ist traurig, weil die Indizierung eine einfache Möglichkeit ist, SQL-Abfragen zu optimieren. Übersehen Sie es nicht .

Zweite , Die Byte Order Mark (BOM) kann ein Ärgernis sein. Nehmen wir an, Sie müssen eine CSV-Datei lesen und ihre Daten in die Datenbank einfügen. Nehmen wir außerdem an, dass das erste Element jeder Zeile ein long ist und Sie müssen es in einen Long umwandeln Objekt, wenn Sie die Zeile bearbeiten.

Was passiert, wenn Sie die erste Zeile der CSV-Datei verarbeiten?

Wenn eine Stückliste gefunden wird, eine NumberFormatException wird geworfen, weil das erste Element kein parsbares long ist (Ich gehe davon aus, dass Sie parseLong(String s) verwendet haben Methode des Long Klasse).

Glücklicherweise ist dieses Problem recht einfach zu lösen. Sie können die Stückliste ausschließen, indem Sie den BOMInputStream verwenden Klasse. Diese praktische Utility-Klasse wird von der commons-io-Bibliothek bereitgestellt.

Dritter , Verstehen Sie die JPA-Abrufstrategien. Die Standardabruftypen sind:

  • Der standardmäßige Abruftyp der Viele-zu-Viele-Beziehung ist faul.
  • Der Standardabruftyp der Viele-zu-Eins-Beziehung ist Eager.
  • Der Standard-Fetch-Typ der Eins-zu-Viele-Beziehung ist faul.
  • Der Standardabruftyp der Eins-zu-Eins-Beziehung ist Eifer.

Also, was sollen wir mit diesen Informationen machen? Wir sollten dies berücksichtigen, wenn wir das Domänenmodell unserer Anwendung erstellen. Diese Woche musste ich ein Leistungsproblem einer Anwendung lösen, die ein ziemlich komplexes Domänenmodell hat. Die Lektionen, die ich daraus gelernt habe, sind die folgenden:

  • Verwenden Sie niemals Eager Fetching für eine Baumstruktur.
  • Wenn Sie Eins-zu-eins-Beziehungen verwenden, vermeiden Sie bidirektionale Beziehungen.
  • Wenn Sie eine bidirektionale Eins-zu-Eins-Beziehung verwenden müssen, verwenden Sie nach Möglichkeit Lazy Fetching.

Leider ist JPA2 beim eifrigen/faulen Abrufen sehr unflexibel . (Dieser Beitrag wurde entfernt) Die Regeln, die ich erwähnt habe, sind ein guter Anfang. Leider scheint es keine "allgemeine" Lösung für Leistungsprobleme im Zusammenhang mit JPA zu geben.

Ich frage mich langsam, ob die Verwendung von JPA bedeutet, dass wir weniger Zeit mit dem Schreiben von Code und mehr Zeit mit dem Debugging/Profiling verbringen.

Vierter , Sie können den @Access verwenden Anmerkung zum Konfigurieren, wie der JPA2-Anbieter auf den persistenten Zustand der Entität zugreift. Wenn Sie daran interessiert sind, wie (und warum) dies zu tun ist, lesen Sie diesen Blogbeitrag.

Fünfter , Lassen Sie sich nicht von Ihren vergangenen Erfahrungen Ihre Erwartungen für die Zukunft diktieren.

Die meisten von uns sind auf etwas spezialisiert. Ich bin spezialisiert auf die Entwicklung von Webanwendungen. Bedeutet das, dass ich nichts anderes will oder kann? Natürlich nicht, aber manchmal vergesse ich, dass eine Webanwendung nicht immer eine gute Lösung für das Problem des Kunden ist.

Lass es mich erklären.

Diese Woche habe ich mit einem potenziellen Kunden gesprochen, und ich bin davon ausgegangen, dass er möchte, dass wir eine Webanwendung implementieren, die sein Problem löst. Ich erinnere mich, dass ich dachte, dass es schwierig wird, wenn wir alte und beschissene Browser unterstützen müssen. Dann sprach ich und sagte:

Es wird zu schwierig, eine interaktive Schnittstelle zu implementieren, wenn wir ältere Versionen von IE unterstützen müssen.

Der Kunde antwortete:

Oh, es muss keine Webanwendung sein. Eine eigenständige Anwendung ist für mich in Ordnung

Ich wurde weggeblasen. Mir wurde klar, dass ich aufgrund meiner bisherigen Erfahrungen davon ausging, dass er eine Webanwendung haben möchte. Das war ein Fehler, der teuer hätte werden können.

Wenn Sie feststellen, dass Sie so denken, stellen Sie einfach die Frage. Fragen kostet dich nichts und du bekommst vielleicht eine Antwort, die du nicht erwartet hast.

Was hast du diese Woche gelernt?

Teilen Sie Ihre Lernerfahrungen oder andere Kommentare im Kommentarbereich.


Java-Tag