Istnieje zadanie związane z zmieniającym się stanem jednostki. I jestem bardzo zdezorientowany myśląc, czy to powinno być podejście oparte na zdarzeniach, które obejmuje coś takiego jak CQRS
lub mogę użyć State pattern
i pozostawić całą logikę wewnątrz obiektów.Używanie modelu domeny z wzorcem State State
znalazłem artykuł, który pokazuje model domeny (lub kawałek IT), która używa wzoru Państwo: http://www.prowareness.com/blog/?p=1448
System Kolejność jest dość blisko mojego modelu domeny. Tak więc przykład jest świetny. Ale nadal zastanawiam się, czy jest to dobra praktyka, biorąc pod uwagę wzór MVC i czy można go zastosować z RavenDB/NHibernate
?
EDIT: pytanie przemyśleć
Prześledźmy przykład:
Po pierwsze, oto podmiot domeny o nazwie 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; }
}
}
Zważywszy AbstractState
jest:
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; }
}
}
i fabryka stan interfejsu jest zdefiniowany następująco:
public interface IStateFactory {
AbstractState GetState(String state);
}
ostateczna myśl jest wprowadzenie metody:
public void AlterState(String stateString) {
this.state = stateFactory.GetState(stateString);
}
- jest projekt ok? jakie są minusy i zalety?
- Co z rozszerzalnością? Z mojej perspektywy można rozszerzyć/wdrożyć własną fabrykę stanów. Ale jeśli nastąpi zmiana w samym
AbstractState
, wszystko odpowiednio się zmieni.
Dzięki!
Tak, jestem dość zainteresowany))! – lexeme