Code Smell refactoring in Doku
continuous-integration/drone/push Build is passing Details

This commit is contained in:
qvalentin 2022-04-22 14:22:54 +02:00
parent e4f1670742
commit 868e640ec6
Signed by: qvalentin
GPG Key ID: C979FA1EAFCABF1C
3 changed files with 39 additions and 3 deletions

3
.gitignore vendored
View File

@ -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

View File

@ -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.