Добрый день!
Есть приложение, к примеру Bug Tracker, разрабатываемое по принципам DDD (Domain Driven Design).
На слое доменной модели (Domain) есть класс:
public class Issue
{
public int IssueId { get; private set; }
public string Num { get; private set; }
// ... другие свойства
public DateTime DateClosed { get; private set; }
private Issue() { } // Для EF
public Issue(string num) : this()
{
Num = num;
}
public void AcceptToWork()
{
// ...
}
public void Close()
{
if (!DateTime.UtcNow - DateClosed > TimeSpan.FromHours(24)) // Число - "24 часа" хотелось бы перенести в конфигурации
throw new InvalidOperationException("В данный момент невозможно закрыть задачу");
// ... в противном случае закрывваем задачу
}
}
Чтобы закрыть задачу (метод Close()) необходимо, чтобы выполнилось условие на проверку прошедшего времени.
Вопрос в том, что хотелось бы перенести значение "24 часа" в файл конфигураций, у нас для этого используется json и собственный менеджер файлов конфигураций: IConfigurationManager.
Правильно ли будет "инжектировать" менеджер конфигураций в сущность следующем образом:
public class Issue
{
public int IssueId { get; private set; }
public string Num { get; private set; }
// ... другие свойства
public DateTime DateClosed { get; private set; }
private readonly DefaultConfiguration _configuration;
private Issue() // Для EF
{
var configurationManager = IoC.Resolve<IConfigurationManager<DefaultConfiguration>>();
_configuration = configurationManager.LoadConfiguration();
}
public Issue(string num) : this()
{
Num = num;
}
public void AcceptToWork()
{
// ...
}
public void Close()
{
if (!DateTime.UtcNow - DateClosed > TimeSpan.FromHours(_configuration.PermittedHoursToClose)) // Используем конфигурацию
throw new InvalidOperationException("В данный момент невозможно закрыть задачу");
// ... в противном случае закрывваем задачу
}
}
Или есть более правильное решение?
Я немного упроситл пример, на самом деле для переходов по статусам задач используется Stateless framework и соответствующие условия при её настройке:
_workflow.Configure(State.InProgress)
.Permit(Trigger.Cancel, State.Canceled)
.PermitIf(Trigger.Close, State.Closed, () => (DateTime.UtcNow - DateClosed) > TimeSpan.FromHours(24)); // Число - "24 часа" хотелось бы перенести в конфигурации