Code Smell refactoring in Doku
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		
							parent
							
								
									e4f1670742
								
							
						
					
					
						commit
						868e640ec6
					
				
					 3 changed files with 39 additions and 3 deletions
				
			
		
							
								
								
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -13,6 +13,9 @@ auto-save-list
 | 
			
		|||
tramp
 | 
			
		||||
.\#*
 | 
			
		||||
 | 
			
		||||
Documentation/*.tex
 | 
			
		||||
Documentation/_minted-*
 | 
			
		||||
 | 
			
		||||
# Org-mode
 | 
			
		||||
.org-id-locations
 | 
			
		||||
*_archive
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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<Category> getByName(CategoryName name) {
 | 
			
		||||
		return categories.stream().filter(category -> category.getName().equals(name)).findFirst();
 | 
			
		||||
// LinkRepository.java
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
    :PROPERTIES:
 | 
			
		||||
    :CUSTOM_ID: refactorings
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										
											BIN
										
									
								
								Documentation/programmEntwurf.pdf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Documentation/programmEntwurf.pdf
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in a new issue