beim Entwurf neuer Anwendungen gibt es keine Standard Art und Weise in Paketen zu strukturieren, die Erfahrung ist das, was in der Regel ein jeder hilft zu entscheiden, was die entsprechenden Namen für unsere Pakete sind.
Über Paketierung Implementierungen Ihrer Schnittstellen im selben Paket oder in einem anderen nur darüber nachzudenken, wie Java selbst strukturiert ist: Normalerweise ist eine Implementierungsklasse im selben Paket wie die Schnittstelle verpackt, aber nicht immer.
Wenn Sie mehrere Implementierungen der gleichen DAO's hätten, dann wäre es sinnvoll, sie in den Unterpaketen .jdbc
, .jpa
oder .jdo
zu strukturieren. Wenn Sie nur eine Implementierung haben, sind die beiden Optionen, die Sie aufzählen, in gewisser Weise sinnvoll (dasselbe Paket oder ein Unterpaket .impl
).
In Bezug auf Über-Engineering würde ich Ihnen diese article empfehlen. Obwohl Sie nur eine Implementierung Ihrer DAOs haben, wäre es sinnvoll, sie als Schnittstelle und Implementierung zu definieren, da dies Ihnen in einer möglichen Zukunft hilft, Ihre DAOs für andere Frameworks neu zu schreiben, während der Code verwendet wird Sie bleiben unverändert.
Am Ende liegt es an Ihnen (oder an Ihnen und Ihren Kollegen), einen Konsens zu erzielen und die Entscheidung zu treffen, die in Ihrem speziellen Fall sinnvoller ist.
EDIT
Eine Anwendung hat in der Regel eine Implementierung pro DAO-Schnittstelle und das ist nicht über Engineering überhaupt, es einfach nicht sinnvoll, die gleiche DAO-Schnittstelle für JPA und für JDO umgesetzt hat . Einige der Zwecke der Verwendung der Schnittstelle/Implementierungsmuster ist es, Re-Factoring, Test mittels Mock-Objekte, etc. zu erleichtern.
PS: Ich verlasse mich normalerweise auf JDepend, um meine Anwendung Klassen in Paketen zu verteilen Zyklen wie die meisten zu vermeiden so wie ich kann.
Keine alternativen Implementierungen? Nicht mal Unit Test Mocks? –