Hay una tarea relacionada con que cambia el estado de una entidad. Y estoy bastante confundido pensando si debería ser un enfoque basado en eventos que implique algo como CQRS
o puedo usar un State pattern
y dejar toda la lógica dentro de las entidades.Uso de un modelo de dominio incorporado con un patrón de estado
He encontrado un artículo que muestra un modelo de dominio (o una parte de ella) que utiliza un patrón Estado: http://www.prowareness.com/blog/?p=1448
sistema de pedidos es bastante cerca de mi modelo de dominio. Entonces el ejemplo es genial. Pero todavía me pregunto si es una buena práctica teniendo en cuenta el patrón MVC y si es posible implementarlo con RavenDB/NHibernate
.
EDIT: pregunta repensado
Vamos a seguir el ejemplo:
En primer lugar, aquí hay una entidad del dominio llamado Idea
:
[Serializable]
public class Idea : AbstractEntity<Guid> {
private static IStateFactory stateFactory;
private AbstractState state = new InitiatedState();
[Required, StringLength(150)]
public String Title { get; set; }
[Required]
public String ProblemContext { get; set; }
public DateTime CreatedOn { get; set; }
public Guid InitiatorId { get; set; }
[Required]
public Decimal InvestmentAmount { get; set; }
public Boolean IsInitiated {
get { return this.state.IsInitiated; }
}
public Boolean IsRejected {
get { return this.state.IsRejected; }
}
public Boolean IsUnderInitialAssessment {
get { return this.state.IsUnderInitialAssessment; }
}
public Boolean IsConfirmedForImplementation {
get { return this.state.IsConfirmedForImplementation; }
}
}
Mientras AbstractState
es:
public abstract class AbstractState {
public virtual Boolean IsInitiated {
get { return true; }
}
public virtual Boolean IsRejected {
get { return false; }
}
public virtual Boolean IsUnderInitialAssessment {
get { return false; }
}
public virtual Boolean IsConfirmedForImplementation {
get { return false; }
}
}
interfaz y la fábrica de estado se define así:
public interface IStateFactory {
AbstractState GetState(String state);
}
la idea final es poner el método:
public void AlterState(String stateString) {
this.state = stateFactory.GetState(stateString);
}
- es el diseño de acuerdo? ¿Cuáles son los contras y los pros?
- ¿Qué hay de la extensibilidad? Desde mi perspectiva, uno puede extender/implementar su propia fábrica estatal. Pero si hay un cambio en
AbstractState
, todo cambia en consecuencia.
¡Gracias!
Sí, estoy bastante interesado))! – lexeme