diff --git a/.gitignore b/.gitignore index dddfc90..0599367 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ auto-save-list tramp .\#* +Documentation/*.tex +Documentation/_minted-* + # Org-mode .org-id-locations *_archive diff --git a/Documentation/programmEntwurf.org b/Documentation/programmEntwurf.org index b45dc69..ce3ae39 100644 --- a/Documentation/programmEntwurf.org +++ b/Documentation/programmEntwurf.org @@ -347,13 +347,46 @@ Code-Beispiel und einen möglichen Lösungsweg bzw. den genommen Lösungsweg beschreiben (inkl./ /(Pseudo-)Code)]/ **** Duplicated Code 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 -public Optional getByName(CategoryName name) { - return categories.stream().filter(category -> category.getName().equals(name)).findFirst(); +// LinkRepository.java +public Optional getById(LinkId id) { + return links.stream().filter(link -> link.getId().equals(id)).findFirst(); +} + +public Optional getByUrl(LinkUrl url) { + return links.stream().filter(link -> link.getUrl().equals(url)).findFirst(); } #+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 find(Predicate 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 getById(LinkId id) { + return links.find(link -> link.getId().equals(id)); +} + +public Optional 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 :PROPERTIES: :CUSTOM_ID: refactorings diff --git a/Documentation/programmEntwurf.pdf b/Documentation/programmEntwurf.pdf new file mode 100644 index 0000000..650e5f7 Binary files /dev/null and b/Documentation/programmEntwurf.pdf differ