574 Stimmen

Was ist der Unterschied zwischen DAO- und Repository-Mustern?

Was ist der Unterschied zwischen Data Access Objects (DAO) und Repository Patterns? Ich entwickle eine Anwendung mit Enterprise Java Beans (EJB3), Hibernate ORM als Infrastruktur und Domain-Driven Design (DDD) und Test-Driven Development (TDD) als Entwurfstechniken.

1voto

Sanjay K S Punkte 275

DAOs müssen nicht immer explizit mit Only DataBase verbunden sein,

Es kann nur eine Schnittstelle sein, um auf Daten zuzugreifen. Auf Daten kann in diesem Zusammenhang von DB/Cache oder sogar REST zugegriffen werden (heutzutage nicht mehr so üblich, da wir sie leicht in ihren jeweiligen Rest/IPC-Clients trennen können),

Repo hier in diesem Ansatz durch eine der ORM-Lösungen implementiert werden, wenn die zugrunde liegende Cache / Repo Änderungen wird es nicht propagiert werden / Auswirkungen Service / Business Layers.

DAOs können Domänentypen akzeptieren/zurückgeben. Nehmen wir an, die zugehörige DAO-Klasse ist StudentDao

StudentDao {

    StudentRepository, 
    StudentCache, 

    Optional<Student> getStudent(Id){

       // Use StudentRepository/StudentCache to Talk to DD & Cache 
       // Cache Type can be the same as Domain Type, DB Type(Entities) should be a Same/Different Type.

    }

    Student updateStudent(Student){

       // Use StudentRepository/StudentCache to Talk to DD & Cache 
       // Cache Type can be the same as Domain Type, DB Type(Entities) should be a Same/Different Type.

    }

}

DAOs können SubDomain-Typen akzeptieren/zurückgeben. Betrachten Sie eine Studentendomäne, die eine Unterdomäne hat, z.B. Anwesenheit/Fach, die eine DAO-Klasse StudentDao haben wird,

StudentDao {

    StudentRepository, SubjectRepository, AttendanceRepository
    StudentCache, SubjectCache, AttendanceCache

    Set<Subject> getStudentSubject(Id){

       // Use SubjectRepository/SubjectCache to Talk to DD & Cache 

    }

    Student addNewSubjectToStudent(ID, Subject){

       // Use SubjectRepository/SubjectCache to Talk to DD & Cache 

    }

}

-1voto

In einem sehr einfachen Satz: Der wesentliche Unterschied ist dass Repositories Sammlungen darstellen, während DAOs näher an der Datenbank sind und oft viel stärker auf tabellenorientiert sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X