Tengo una pregunta sobre la aplicación de una regla empresarial a través de un patrón de especificación. Consideremos el siguiente ejemplo:Ayuda de implementación del patrón de especificación
public class Parent
{
private ICollection<Child> children;
public ReadOnlyCollection Children { get; }
public void AddChild(Child child)
{
child.Parent = this;
children.Add(child);
}
}
public class Child
{
internal Parent Parent
{
get;
set;
}
public DateTime ValidFrom;
public DateTime ValidTo;
public Child()
{
}
}
regla El negocio debe cumplir que no puede haber un niño en la colección que el período de validez se cruza con otra.
Para eso me gustaría implementar una especificación que luego se utilizará para lanzar una excepción si se agrega un elemento secundario no válido Y también se puede usar para verificar si la regla se violará ANTES de agregar el elemento secundario.
igual:
public class ChildValiditySpecification
{
bool IsSatisfiedBy(Child child)
{
return child.Parent.Children.Where(<validityIntersectsCondition here>).Count > 0;
}
}
Sin embargo, en este ejemplo, el niño tiene acceso a la matriz. Y para mí eso no parece tan correcto. Es posible que ese padre no exista cuando el hijo aún no se haya agregado al padre. ¿Cómo lo implementarías?
Eso puede ser una posibilidad. Pero me pregunto si estoy usando este patrón de la manera correcta ... ¿No sería la validez única cuando no hay un padre? – Chris