Дата создания - это значение должно быть установлено в BL или DAL? - PullRequest
2 голосов
/ 31 августа 2010

Дата. Создан конкретный пример, который меня интересует, но есть и другие данные, относящиеся к той же категории: данные, которые вы хотели бы получить о любой неопределенно важной сущности.

Где лучше всего это сделать: бизнес-логика (BL) или уровень доступа к данным (DAL)?

До сих пор я полагался на getdate() SQL Server для заполнения даты, созданной для меня, при вставке в таблицу, но теперь я начинаю задумываться, стоит ли мне делать это больше в BL.

FYI - это в основном происходило в веб-системах, где вы создаете объект в BL (на основе пользовательского ввода) и запускаете его в DAL - это не то, что я хотел сослаться на объект в память на века (поэтому наличие свойства «дата создания» для объекта для использования в BL при создании объекта не было проблемой).

Возможно, есть третий вариант - после прочтения ответа Marr75 мне приходит в голову, что запись его дважды может быть полезна в некоторых сенарио (один раз в обоих местах). Вы получите выгоду от согласованной даты / времени в слое данных, но у вас все равно будет значение BL, на которое можно ссылаться - я думаю, я бы зависел от ваших вариантов использования. Однако эта опция не без риска - люди могут начать использовать неправильную дату для неправильной вещи.

Ответы [ 2 ]

1 голос
/ 31 августа 2010

Я голосую за всегда DAL. Опираясь на даты и время из слоев за пределами базы данных, я был источником ошибок в прошлом. В большинстве случаев вы, скорее всего, гарантируете постоянную дату и время в вашей базе данных. Проблемы синхронизации времени клиент-сервер и даже сервер-сервер привели к неприятным, трудным для дублирования, трудным для решения проблем.

0 голосов
/ 31 августа 2010

Я бы сказал: да.

Возможно, вы привыкнете устанавливать даты создания и последнего доступа в вашем BL.Затем в вашем DAL всегда проверяйте наличие пустых значений в этих полях.Если они нулевые, рассмотрите ваш вариант: выбрасывание исключения или просто заполнение этих значений в этом слое.Вроде все до вставки / обновления.

У меня был такой же шаблон, как вы описали в своем вопросе.Затем я столкнулся с необходимостью использования / использования UTC временных меток приложения и решил, что просто перенесу это поведение в классы BL и / или DL.Да, я мог бы использовать GETUTCDATE(), но было бы более уместно иметь эту логику в BL / DL.

...