Senior
Kuidas töödeldakse sisendkõnet handleri kaudu domeeni mudelini heksagonalses arhitektuuris, mis koosneb kolmest elemendist: adapter, port ja keskne rakendus?
sobes.tech AI
Vastus AI-lt
Heksagonilise arhitektuuri puhul jõuab sisendkinnitus esmalt adapterisse, mis toimib liidesena välismaailma ja rakenduse vahel. Näiteks Go-s võtab HTTP-handler vastu taotluse ja muudab selle porti (port) kutsumiseks, mis on liides, määratledes operatsioone, mis on kättesaadavad kesksele rakendusele.
Port inkapsuleerib äriloogika ja määratleb suhtluse lepingud. Handler kutsub porti meetodeid, edastades vajalikud andmed. Keskne rakendus (domeemudel) rakendab loogikat, tuginedes porti saadud andmetele, ja tagastab tulemuse.
Näide Go-s:
// Port
type UserService interface {
CreateUser(name string) error
}
// Adapter (HTTP-handler)
func CreateUserHandler(svc UserService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
name := r.FormValue("name")
err := svc.CreateUser(name)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusCreated)
}
}
Sellisel viisil kohandab handler välise taotluse porti kutsumiseks, mis on rakenduses (domeemudel) implementeeritud.