Est-ce une violation du principe de substitution de Liskov?
https://softwareengineering.stackexchange.com/questions/170138
-
05-11-2019 - |
Question
Disons que nous avons une liste d'entités de tâche et un ProjectTask
sous-type. Les tâches peuvent être fermées à tout moment, sauf ProjectTasks
qui ne peut pas être fermé une fois qu'ils ont commencé. L'interface utilisateur doit assurer l'option pour fermer un démarrage ProjectTask
n'est jamais disponible, mais certaines garanties sont présentes dans le domaine:
public class Task
{
public Status Status { get; set; }
public virtual void Close()
{
Status = Status.Closed;
}
}
public class ProjectTask : Task
{
public override void Close()
{
if (Status == Status.Started)
throw new Exception("Cannot close a started Project Task");
base.Close();
}
}
Maintenant, lorsque vous appelez Close()
Sur une tâche, il y a une chance que l'appel échoue s'il s'agit d'un ProjectTask
Avec le statut démarré, alors qu'il ne le ferait pas s'il s'agissait d'une tâche de base. Mais ce sont les exigences de l'entreprise. Il devrait échouer. Cela peut-il être considéré comme une violation du Principe de substitution de Liskov?
Pas de solution correcte