Es muss ja einen guten Grund haben, warum neue Software dann immer noch so Designed wird und nicht anders.
Also ich finde Logik Sachen auf Entity Ebene gut. Aber weiß nicht ob es sinvoll ist dort Services/DAO's oder anderen Abhängigkeiten reinzumachen.
Warum wird bei Spring Roo das ActiveRecord Pattern (CRUD Methoden in der Entity selber) verwendet? (Finde ich persönlich schrecklich)
Es gibt viele verschiedene Wege zum Ziel zu kommen...
Weder Sun/Oracle not MS haben es sich zum Ziel gemacht eine "reine OO Lehre" zu propagieren, man muss ja nicht katholischer sein als der Papst, man sollte es halt wissen imho.
Wenn deine Entites schlau sind, dann brauchen sie eben Repos, Factories etc. pp., also Dinge, die sonst in Services gebraucht würden.
Es ist nix anderes als eine "Verlagerung" der Abhängigkeiten, (Application-)Services werden sehr "dünn", rufen nur noch Domänenobjekte auf, diese machen den Rest.
Angeblich nicht nur von Java, was ich gehoert habe ist das konzept mit den BackingBeans sehr stark an .Net angelehnt.
Mir gefaellt die Trennung zwischen daten und Logik nicht so besonders. Und ich manchen faellen ist es nicht einfach nur geschmacksache denke ich (in anderen wieder schon). Scheissen ist eine Methode vom Schaf und kein "dienst" das ein schaf in anspruch nehmen kann ;-)
@ Maki: zu deinem Beispiel mit projekt und person. warum das nicht mit einem controler machen? was waeren da die nachteile deiner meinung nach? im proyect wuerde dann logic zb zur budgetberechung und der benoetigten stunden sein und in der person zum beispiel berechungen, ob diese noch freie arbeitsstunden etc hat.
Ich hab zwischenrin mit meinem Kursleiter gesprochen und er draengt doch sehr auf diesen ehr prozedualen ansatz so das ich das dann so machen werde, der ablauf ist mir auch aus den posts weiter oben klarar geworden

die action beans werde ich eher extra davon etwas unter die lupe nehmen.
Eine frage vill noch, in die Entitys kann ich da gar keine logik reinstecken? das war mir noch ncith so ganz klar. kann der entitymanager dann noch was anfangen mit diesen dingern?
PS.: ich hab zum beispiel eine statless session bean loginvalidieren die nimmt login namen und pwd entgegen und gibt den user zurueck. der wird dann in einer session scoped managed bean als sessionuser genommen. fuer mich sind da auch sehr viele abhaengigkeiten drinnen evtl sogar noch mehr als wenn ich die loginvalidieren als methode vom user implementieren wuerde. (etwa controler holt user mit loginname xyz aus der DB und fuehrt die user.loginOK methode aus).
Der Controller gehört doch zur UI, oder?
Klar kann man das auch machen, aber das ist dann kein Schichtenmodell.
Dein Kursleiter hat übrigens recht, "das macht man so in JEE", wenn du JEE lernen willst, kannst du anfangs ruhig den empfohlenen Pfad gehen und später, wenn du vertrauter damit bist, andere Wege einschlagen.
Ich würd jetzt auch nicht sagen, dass JEE-Anwendung besonders "un-OO" sind.. wenn man sie sauber machen, folgen sie exakt dem MVC-Schema, und das ist schon OO, oder? Es handelt sich bei Webanwendungen um eine spezielle Variante von Software, die einer bestimmten Struktur folgt. Finde ich soweit ok.
Ich denke, es hängt auch hier viel vom konkreten Design ab. Man kann sicherlich Login in die Entities tun, aber nur solche, die auch direkt inhaltlich mit der Entity zu tun hat (ein Kollege meinte mal, "Komfortfunktionen sind ok"). Eine Model- bzw. Document-Schicht, die halt nur die Daten des Dokuments/Modells enthält und keine Logikfunktionen ausser solchen, die wirklich direkt mit dem Dokument zu tun haben finde ich absolut ok vom Design her.
Ich hab doch jetzt lange genug erklärt was an diesem Ansatz prozedural ist, oder gibt es da noch unklarheiten?
Login hat meist nix mit der Domäne zu tun und gehört daher meist nicht ins Domänenmodell.
Ich finde den Ansatz von maki durchaus interessant, weil ich meinen Entity intutiv auch immer fachliche Logik hinzufüge wie z.B. beim Mitarbeiter gehalt berechnungen oder ähnliches.
Aber wo ich mir noch nicht so ganz im klaren bin ob ich das Model/Entity etc. so aufblasen würde, dass ich da irgendwelche Dienste oder Repos rein machen(injecten?) würde. Das birgt doch die Gefahr, dass das Model nicht weiter verwendet werden kann, da die (ganze?!?) Logik in den Entity verankert ist.
Ich kenne Anwendungen da sind die Datenstrukturen gleich die BusinessLogik aber unterschiedlich. Da stelle ich mir es schwer vor mit der Wiederverwendung.
Nur nochmal ob dich richtig verstehe maki du würdest auch "Dienste" in die Entity/Models mit reinmachen (injecten?)? Falls ja das würde doch für die Wiederverwendung bedeuten, dass das Entity/Model nicht ohne diesen "Dienst" wiederverwendbar ist oder?
PS: Wenn du ein kleines Beispiel-Projekt daheim hast (oder im Netz), wo diesen Weg aufzeigt hätte ich interesse das mir mal anzuschauen, vielleicht macht es dann **klick**.
Nehmen wir mal an so ein Architekturaufbau ist wirklich besser (kann ich nicht beurteilen):
Würden es doch viel mehr Projekte einsetzen oder?
Wieso sollte das Modell nicht weiter verwendet werden können?
Bitte nicht vergessen, das DDD 2 Arten von Diensten kennt: DomainServices (für Dinge die in keine Entity passen) und ApplicationServices,letzteres ist sowas wie eine (Remote) SessionBean.
Domänobjekte kennen nur andere DomänenObjekte (Repositories, Factories, DomänServices, etc. pp.).
Bücher & Beispiele gibt es schon einige, die Grundlagen sind nicht so komplex (Entities, ValueObjects, Aggregates, Repositories, Factories, DomainServices, ApplicationServices, Specifications, etc.), die Komplexität kommt durch die eigene Domäne, es geht nicht um den konkreten Aufbau der Entities, sondern um das Zusammenspiel der "Bausteine".
Genau das ist auch der empfohlene Einsatzzweck für DDD: komplexe Problemdomänen
Hier noch ein paar Links:
Fowler über das "Anemic Domain Model" (oder warum JEE meist prozedural ist):
AnemicDomainModel
Wiki Artikel über das "Anemic Domain Model" (und wieder, JEE ist prozedural):
Anemic Domain Model - Wikipedia, the free encyclopedia
Wiki Artikel zu DDD:
Domain-Driven Design ? Wikipedia
Kann Evans Buch über DDD nur empfehlen, selbst wenn man kein DDD einsetzt, sind einige sehr gute Modelierungstechniken drinn imho (Seiteneffekte vermeiden durch immutable ValueObjects, etc. pp.).