2015-06-11 3 views
0

У меня есть приложение Windows Forms и одно из моих бизнес-правил: когда я дезактивирую клиента, DeactivationDateTime определяется с текущей датой и временем.Должен ли я взять DateTime.Now из базы данных?

Я использую Entity Framework и Domain Driven Design.

Должен ли я взять дату-время из базы данных или установить правильную дату и время на локальном компьютере?

public void DeactivateCustomer(int customerId, int userId) 
{ 
     Check.ValidId(customerId); 
     Check.ValidId(userId); 

     var u = userRepository.GetById(userId); 
     if (u == null) 
      throw new EntityNotFoundException(userId); 

     var c = customerRepository.GetById(id); 
     if (c == null) 
      throw new EntityNotFoundException(id); 

     c.DeactivateData = new DeactivateData(userId, dateTimeProvider.Now); 
     customerRepository.SaveOrUpdate(c); 
} 

dateTimeProvider - это интерфейс инфраструктуры, который вводится конструктором.

+0

Является ли это свойство сопоставлено с вашим пользовательским объектом? –

+0

Привет, Марк. Да. ' –

+1

Nothin, связанный с вашим вопросом, но я бы изменил 'Check.ValidId (id)' с конкретными 'UserId' и' CustomerId' VOs или унифицированным 'EntityId' VO. Кроме того, 'DeactivatedData' выглядит для меня странной модельной концепцией. Почему бы не что-то вроде 'user.activationStatus = new InactiveStatus (date)' или даже 'user.status = new InactiveStatus (date)'. Если бы у вас действительно был эксперт по бизнесу, когда «DeactivateData» пользователя/клиента ... – plalx

ответ

3

Если объект, который он сопоставил в вашем объекте для меня, более естественно сделать это с вашего кода приложения на вашем бизнес-уровне, получая дату с пользовательской машины. Если нет, то я буду новым разработчиком, работающим над этим кодом. Мне будет сложно обнаружить, где заполняется DeactivationDateTime. Я предполагаю, что вы можете верить, что вы не собираетесь менять дату и время.

Если вы не хотите, чтобы пользователи сохраняли DateTime в формате UTC или с информацией TimeZone.

+0

Удивительно, я согласен с вами, Марк, но это будет новый звонок в базу данных, и мне становится неудобно. –

+0

Зачем нужен новый звонок в базу данных? Вы можете сделать это одновременно с тем, что вы задали пользователя Деактивированному клиенту, или вы деактивировали пользователя столбца и DeactivatedDateTime в отдельных таблицах? –

+0

DeactivatedUserId и DeactivatedDateTime в той же таблице. Я использую шаблон хранилища. У меня сложный тип, который имеет DeactivatedUserId и DeactivatedDateTime. –

Смежные вопросы