Ist es eine schlechte Übung, "Klasse und Interfaces im selben Paket zu mischen"?

7

Ich habe gerade etwas gefunden, von dem ich noch nie gehört habe und dem ich jetzt nicht zustimme. In einer (upvoted und nicht weiter kommentierten) Antwort las ich "warum zu mischen Klasse und Schnittstellen im selben Paket "

Ich frage mich also, ob es Gründe gibt, Schnittstellen und Implementierungen in Java zu trennen.

Ich weiß, dass wir nicht verpflichtet sind, alle Implementierungen im Paket der Schnittstelle zu haben, aber ist es (manchmal) klug, dort keine zu haben?

Grüße
Mike
[; -)

    
DerMike 05.01.2011, 10:42
quelle

4 Antworten

8

Gründe, Schnittstellen und Implementierung in separaten Paketen zu halten:

Codebasis löschen - Es sieht besser aus, wenn wir ein Paket mit Interfaces und ein anderes mit Implementierungen haben (normalerweise ein something.impl namespace). Und die Codestruktur zeigt / spiegelt wider, dass Sie gegen Schnittstellen codieren.

Zugriffsmodifikatoren - Wir können Paket-Zugriffsmodifizierer für private Paket-APIs für verwandte Schnittstellenimplementierungen verwenden.

Bibliotheksstruktur - Vielleicht entscheiden Sie sich eines Tages, verschiedene Bibliotheken für API (Schnittstellen) und Implementierung (en) zu erstellen. Dann ist es ziemlich gut, Schnittstellen und Implementierungen in verschiedenen Paketen zu haben. So können Sie den Build ändern, ohne Ihre Codebasis neu zu gestalten.

    
Andreas_D 05.01.2011, 10:51
quelle
10

Ich stimme org.life.java zu - Ich werde Service und darunterliegende service.impl-Pakete haben, aber immer in dieser Art von Vereinbarung.

Ich stimme der Formulierung "schlechte Praxis" nicht zu. Das ist zu stark.

Die API java.util Collections steht im Widerspruch zu diesem Hinweis. Ich möchte nicht derjenige sein, der Joshua Bloch sagt, dass er einen "schlechten Job" gemacht hat.

    
duffymo 05.01.2011 10:48
quelle
7

Für OSGi ist es fast erforderlich, separate Pakete AFAIK zu verwenden, damit Sie die API exportieren / importieren können, ohne die Implementierung zu exportieren / importieren.

Für Schnittstellen, die nur intern sind, ist es jedoch kein Problem, alles in einem Paket zu speichern.

    
Thomas Mueller 05.01.2011 10:48
quelle
3

Es ist nicht schlecht, aber es ist sicherlich eine gute Übung, die Schnittstelle und die Implementierung in verschiedenen Paketen zu trennen.

zum Beispiel

%Vor%

Vorteile :

  • Einheitliche Paketstruktur
  • Manchmal, wenn Sie nur einige Klassen bearbeiten möchten, können Sie sie nach Paket
  • unterscheiden
Jigar Joshi 05.01.2011 10:45
quelle

Tags und Links