Is this a violation of the Liskov Substitution Principle?
https://softwareengineering.stackexchange.com/questions/170138
-
05-11-2019 - |
Pregunta
Say we have a list of Task entities, and a ProjectTask
sub type. Tasks can be closed at any time, except ProjectTasks
which cannot be closed once they have a status of Started. The UI should ensure the option to close a started ProjectTask
is never available, but some safeguards are present in the domain:
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();
}
}
Now when calling Close()
on a Task, there is a chance the call will fail if it is a ProjectTask
with the started status, when it wouldn't if it was a base Task. But this is the business requirements. It should fail. Can this be regarded as a violation of the Liskov substitution principle?
No hay solución correcta
Licenciado bajo: CC-BY-SA con atribución
No afiliado a softwareengineering.stackexchange