Ich sehe, was Sie mit 2 machen. Sie verwenden Klassen als Pakete und Pakete als Module, damit Sie sich innerhalb des Pakets isolieren und dennoch innerhalb des Pakets mithilfe von Klassen organisieren können.
Das ist sehr klug. Vorsicht vor klug.
Dadurch werden Sie gezwungen, mehrere Klassen in derselben Quelldatei zu blockieren (was Sie vielleicht bevorzugen), und der Pfad enthält ein Wort mit Großbuchstaben.
Dies zwingt Sie auch dazu, Testcode innerhalb des Pakets zu schreiben, es sei denn, Sie verwenden Reflection, um sich von außen hineinzuhacken.
Andernfalls wird dies funktionieren. Es wird einfach komisch erscheinen.
Menschen sind eher daran gewöhnt , dass innere Klassen wie EntrySet in Hashtable verwendet werden. Es ist privat, daher kann ich es nicht erstellen, aber es implementiert eine öffentliche Schnittstelle, sodass ich einfach über die Schnittstelle mit ihr spreche und mir etwas besorgen kann.
Aber Sie beschreiben Klassen, mit denen ich nicht einmal über eine Schnittstelle sprechen soll. Also keine Schnittstelle für mich. Dies bedeutet, dass ich nichts zu sehen habe und verwirrt bin (es sei denn, Sie geben mir die Quelle).
Das größte Problem, das ich sehe, sind verwirrende Neulinge, die die API warten. Sie können Dokumentationen und Kommentare auf sie werfen, aber seien Sie nicht übergroß, wenn sie keine lesen oder ihnen vertrauen.
Sie haben ein weiteres Muster erstellt, das einen Sprachmangel ausgleicht. Java hat keinen Zugriffsmodifikator, der den Zugriff auf eine Gruppe von Paketen gewährt. Ich habe gehört, dass ein "Modul" -Zugriffsmodifikator vorgeschlagen wurde, sehe aber keine Anzeichen dafür.
Der Standardzugriffsmodifikator (kein Modifikator) wird wahrscheinlich hier verwendet, es sei denn, es macht Ihnen nichts aus, dass ich mich durch die Vererbung einschleiche. In diesem Fall ist er geschützt.
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
Was Sie wirklich wollen, ist Modulzugriff. Auf diese Weise können Sie Ihre Tests in einem Paket und den Code in einem anderen aufbewahren. Leider haben wir es nicht in Java.
Die meisten Leute machen nur 1 und erweitern die API. Die ordnungsgemäße Verwendung von Schnittstellen entlastet die Implementierung.
Das Hacken, was Sie wollen, in 1 ist noch hässlicher. Schauen Sie sich den Aufrufstapel an und lösen Sie eine Ausnahme aus, wenn das, was Sie angerufen haben, aus einem Paket stammt, das Sie nicht mögen. Eeew.