Gibt es Gründe, warum Sie Code Contracts nicht zur Durchsetzung von Geschäftsregeln verwenden würden?
Stellen Sie sich vor, Sie haben eine User
Klasse, die einen einzelnen Benutzer eines Systems repräsentiert und Aktionen definiert, die gegenüber anderen Benutzern durchgeführt werden können. Sie könnten eine ChangePassword
Methode wie diese...
public void ChangePassword(User requestingUser, string newPassword)
{
Contract.Requires<ArgumentNullException>(requestingUser);
Contract.Requires<ArgumentNullException>(newPassword);
// Users can always change their own password, but they must be an
// administrator to change someone else's.
if (requestingUser.UserId != this.UserId &&
!requestingUser.IsInRole("Administrator"))
throw new SecurityException("You don't have permission to do that.");
// Change the password.
...
}
Oder Sie könnten die Sicherheitsprüfung als Vorbedingung implementieren mit Contract.Requires
...
public void ChangePassword(User requestingUser, string newPassword)
{
Contract.Requires<ArgumentNullException>(requestingUser != null);
Contract.Requires<ArgumentNullException>(newPassword != null);
// Users can always change their own password, but they must be an
// administrator to change someone else's.
Contract.Requires<SecurityException>(
requestingUser.UserId == this.UserId ||
!requestingUser.IsInRole("Administrator"),
"You don't have permission to do that.");
// Change the password.
...
}
Was sind die Vor- und Nachteile dieser beiden Methoden?