2016-05-26 8 views
0

Ich habe eine Feder MVC-Anwendung. Jeder Controller der Anwendung verdrahtet automatisch die @Service Komponenten, mit denen er interagieren soll. Eine Sonarqube-Analyse hat festgestellt, dass es zu einer Duplizierung kam: Einige Controller verwenden möglicherweise die gleichen Dienste. In diesem Fall sind die @Autowired Annotation und die entsprechenden Felder in der Tat identisch.Dublierte Blöcke von @Autowired Bohnen

Zum Beispiel die folgenden wäre in vielen Controllern dupliziert werden:

@Autowired 
private FooService fooService; 

@Autowired 
private BarService barService; 

Dies ist ein kleines Problem ist, und ich weiß nicht, ob/wie ich diese Adresse sollte. Da alle meine Controller eine AbstractController erben, und alle Dienste sind Singletons, würde es Sinn machen, alle @Autowired Elemente in der Basisklasse in geschützten Feldern zu setzen?

Antwort

1

Wenn die Abhängigkeiten bereits in den Unterklassen sind, haben Sie wahrscheinlich einen Grund dafür, z. sie gehören konzeptionell nicht in die abstrakte Klasse. Behalten Sie sie in der Unterklasse, falls dies der Fall ist.

Es ist wichtig, das DRY-Prinzip einzuhalten, aber seien Sie nicht fanatisch. Duplizieren von Code gibt Ihnen Flexibilität, und Klassenabhängigkeiten sind ein typischer Ort, an dem Sie solche Flexibilität wünschen. Ganz zu schweigen davon, dass der Code bei einer solchen Duplizierung einfacher ist.

Statische Codeanalyse eignet sich gut zum Bereitstellen von Zeigern zur Verbesserung Ihres Codes, aber sie sollten nicht blind verfolgt werden.

+0

Sie machen einen guten Punkt, und ich denke, dass Konsistenz in der Tat wichtig ist. Das gab mir auch einige Denkanstöße - Verfahrensdesign vs. OO-Prinzipien. Danke für deine Antwort. – Elegie

Verwandte Themen