[DDD] Huidig ingelogde gebruiker

Pagina: 1
Acties:

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Binnen mijn systeem moet de gebruiker eerst inloggen:
Delphi:
1
2
3
  FRepository := TUserRepository.Create;
  FUserList := FRepository.GetUserList;
  User := FUserList.GetUser(edtUsername.Text, edtPassword.Text);

Als er een geldige gebruiker is gevonden bewaar ik deze in een singleton class zodat ik door de hele applicatie erbij kan:
Delphi:
1
2
  if Assigned(User) then
    TApplicationInfo.Instance.LoggedInUser := User;

Maar nu wil ik als regel instellen dat de huidig ingelogde gebruiker niet verwijderd kan worden uit de lijst met gebruikers. Maar ik kan vanuit de TUserList (domain class) nooit bij de TApplicationInfo (GUI class).

Hoe zorg ik er nou voor dat men niet de ingelogde gebruiker kan verwijderen?

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 26-04 09:25

pjvandesande

GC.Collect(head);

Je kunt in je databank een table zetten met, logged gebruikers. Hierin gooi je de gebruiker, iedereen kan nu opvragen welke gebruikers zijn ingelogd en je kunt hier dus op reageren.

Een boolean voldoet niet echt, omdat als je gebruiker niet netjes uitlogd de waarde niet terug word gezet op false. Een timestamp is hier beter die ongeldig word verklaard na een bepaalde tijd.

Mocht je een gebruiker verwijderen dmv UserRepository.Delete( user );, dan zal er een exeption worden gegooid als de user ingelogd is.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Dus de UserRepository voert deze controle uit?

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Kaassoevlee schreef op vrijdag 04 november 2005 @ 08:48:
Maar nu wil ik als regel instellen dat de huidig ingelogde gebruiker niet verwijderd kan worden uit de lijst met gebruikers. Maar ik kan vanuit de TUserList (domain class) nooit bij de TApplicationInfo (GUI class).

Hoe zorg ik er nou voor dat men niet de ingelogde gebruiker kan verwijderen?
Ik neem even aan dat het proces om de gebruiker te verwijderen, getriggerd wordt vanuit de GUI? Dan kun je aan de method die een gebruiker verwijdert, ook de huidige gebruiker meegeven als extra parameter.

Certified smart block developer op de agile darkchain stack. PM voor info.


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 26-04 09:25

pjvandesande

GC.Collect(head);

Kaassoevlee schreef op vrijdag 04 november 2005 @ 10:16:
Dus de UserRepository voert deze controle uit?
Ja, je geeft deze ook even een method als IsUserLoggedIn( User user ) : Boolean. Mocht je de Delete( User user ) aanroepen en de user is ingelogd dan wordt er een InvalidOperation exception geworpen oid.

Je kunt deze exception dus voorkomen door eerst even de IsUserLoggedIn( User user ) : Boolean aan te roepen en te kijken of de user ingelogd is.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Oke, duidelijk.
Maar deze business regel zit dus in een repository, maar ik neem aan dat niet alle regels in repositories moeten toch? Bijvoorbeeld de controle op een geldige gebruikersnaam van een user zit toch in de User class?
Krijg je dan niet dat business regels te veel verspreid worden over je systeem?

[ Voor 15% gewijzigd door jelmervos op 04-11-2005 10:45 ]

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 26-04 09:25

pjvandesande

GC.Collect(head);

Kaassoevlee schreef op vrijdag 04 november 2005 @ 10:44:
Oke, duidelijk.
Maar deze business regel zit dus in een repository, maar ik neem aan dat niet alle regels in repositories moeten toch? Bijvoorbeeld de controle op een geldige gebruikersnaam van een user zit toch in de User class?
Krijg je dan niet dat business regels te veel verspreid worden over je systeem?
Business rules kunnen op meerderen plaatsen, je kunt er zelfs een apparte layer voor maken, maar het makkelijkst is om het bij je Business Objects zelf te houden.
Voor de validatie van de objecten zelf kun je de base class of interface voor je Business Objects een getter geven IsValid, deze geeft gewoon een boolean terug.

Maar je kunt de inlog controle hier in in bouwen, omdat dat niet te maken heeft met de validheid van je object zelf. Dit moet je dus wel onderbrengen in je Repository.
Pagina: 1