Mam problemy z organizowaniem mojego kodu, gdy chcę zaktualizować obiekt domeny, który nie jest prosty. Problem polega na oddzieleniu odpowiedzialności za kontroler od warstwy usługowej.Grails - korzystanie z warstwy usługi
Załóżmy, że mamy klienta klasy domeny, który zależy od innych klas domen, takich jak Adres i tak dalej.
W widoku istnieje plik Gsp do edytowania niektórych właściwości klientów, w tym niektórych właściwości zagnieżdżonych, takich jak ulica na adresie.
Kiedy chcę zaktualizować te pola, nazywam metodę aktualizacji na kontrolerze (w tym przypadku ClientController).
Podoba mi się funkcja pochodząca z błędów klasy domeny po sprawdzeniu poprawności. Tak jak w przypadku kontrolera, należy napisać:
Client client = Client.get(params.id)
client.properties = params
client.validate()
Jeśli klient ma teraz błędy, bardzo łatwo jest wyświetlić je w widoku edycji.
Ale, myślałem, że aktualizowanie, zapisywanie i pobieranie klienta z bazy danych (Client.get (theId)) powinno być obsługiwane przez warstwę usługi. W moim przypadku muszę zaktualizować lub utworzyć inne obiekty domeny (takie jak adres) przed aktualizacją klienta.
Jednym z moich pytań jest jak powinien wyglądać interfejs API dla warstwy usługi?
public ... updateClient(…)
W literaturze mają banalny przykład aktualizacji wieku osoby. Ich interfejs API składa się z identyfikatora osoby i nowego wieku. Ale w moim przypadku mam około dziesięciu parametrów z widoku i są one tylko podzbiorem wszystkich właściwości klienta i nie wiem, który z nich się zmienił.
- Chciałbym mieć klienta w kontrolerze, który będę mógł zweryfikować i ponownie wysłać do widoku edycji, jeśli ma błędy sprawdzania poprawności.
- Chciałbym obsługiwać interakcje i transakcje bazy danych z warstwy usługi.
Jak mogę je połączyć? Jakie obowiązki powinny mieć poszczególne warstwy dotyczące aktualizacji? Jak powinien wyglądać interfejs API warstwy usługi dotyczący aktualizacji?
Jeśli istnieje dobra implementacja referencyjna, chętnie bym to uczył. Wiele razy warstwa usług jest niestety całkowicie lub częściowo ignorowana.
+1 dobrze napisane pytanie. – David