Code Smell refactoring in Doku
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
e4f1670742
commit
868e640ec6
|
@ -13,6 +13,9 @@ auto-save-list
|
||||||
tramp
|
tramp
|
||||||
.\#*
|
.\#*
|
||||||
|
|
||||||
|
Documentation/*.tex
|
||||||
|
Documentation/_minted-*
|
||||||
|
|
||||||
# Org-mode
|
# Org-mode
|
||||||
.org-id-locations
|
.org-id-locations
|
||||||
*_archive
|
*_archive
|
||||||
|
|
|
@ -347,13 +347,46 @@ Code-Beispiel und einen möglichen Lösungsweg bzw. den genommen
|
||||||
Lösungsweg beschreiben (inkl./ /(Pseudo-)Code)]/
|
Lösungsweg beschreiben (inkl./ /(Pseudo-)Code)]/
|
||||||
**** Duplicated Code
|
**** Duplicated Code
|
||||||
Da es bei Java keine Funktion zum durchsuchen eines Sets gibt wurde an mehreren Stellen ein Konstrukt, wie unten sichtbar
|
Da es bei Java keine Funktion zum durchsuchen eines Sets gibt wurde an mehreren Stellen ein Konstrukt, wie unten sichtbar
|
||||||
verwendert.
|
verwendet.
|
||||||
|
Dies macht den Code unleserlich und schwerer zu warten.
|
||||||
#+begin_src java
|
#+begin_src java
|
||||||
public Optional<Category> getByName(CategoryName name) {
|
// LinkRepository.java
|
||||||
return categories.stream().filter(category -> category.getName().equals(name)).findFirst();
|
public Optional<Link> getById(LinkId id) {
|
||||||
|
return links.stream().filter(link -> link.getId().equals(id)).findFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Optional<Link> getByUrl(LinkUrl url) {
|
||||||
|
return links.stream().filter(link -> link.getUrl().equals(url)).findFirst();
|
||||||
}
|
}
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
Durch die Einführung des Dekorator-Entwurfsmuster für Set wurde jedoch auch eine eigene Implementation eines Sets eingeführt.
|
||||||
|
Dadurch konnte diese Set Implementation auch einfach durch eine find Methode ergänzt werden, wie dargestellt.
|
||||||
|
|
||||||
|
#+begin_src java
|
||||||
|
// CustomStrictSet.java
|
||||||
|
@Override
|
||||||
|
public Optional<T> find(Predicate<T> predicate) {
|
||||||
|
return set.stream().filter(predicate).findFirst();
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
So wurde die Codezeile an vier Stellen ersetzt.
|
||||||
|
Wenn das Refactoring nicht recht früh durchgeführt worden wäre, wären es eventuell sogar mehr Stellen
|
||||||
|
geworden.
|
||||||
|
|
||||||
|
#+begin_src java
|
||||||
|
// LinkRepository.java
|
||||||
|
public Optional<Link> getById(LinkId id) {
|
||||||
|
return links.find(link -> link.getId().equals(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Optional<Link> getByUrl(LinkUrl url) {
|
||||||
|
return links.find(link -> link.getUrl().equals(url));
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Das Refactoring wurde mit Commit [[https://tea.filefighter.de/qvalentin/LinkDitch/commit/e4f167074250e791f293eb834a60eb9f63a34664][e4f1670742]] durchgeführt.
|
||||||
*** 2 Refactorings
|
*** 2 Refactorings
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: refactorings
|
:CUSTOM_ID: refactorings
|
||||||
|
|
Binary file not shown.
Reference in New Issue