Представления с бизнес-логикой против кода - PullRequest
1 голос
/ 15 июня 2011

Для подачи заявки мне необходимо отправлять персонализированные электронные письма с приглашениями конечным пользователям каждый час.У этих пользователей адреса электронной почты, а остальная их информация находится в базе данных.

  • Для получения сообщения электронной почты доступны все пользователи, у которых бит Planned.IsPlannable установлен на True и между Planned.DateStart и Planned.DateEnd между определенным периодом доступны.
  • Существует около 350 сообщений для отправки каждый час .
  • Вся информация, которая должна быть включена в сообщение, поступает из базы данных.
  • Приложение является консольным приложением .NET4.0 , для доступа к данным я использую Subsonic3.0 .

Есть вминимум два сценария на выбор: извлечение соответствующих данных с помощью

1 :) Просмотреть что-то вроде:

SELECT    [Computer].ComputerName, 
          [User].UserEmail, 
          [Planned].DateAvailable, 
          [Planned].DatePlanned
FROM      [Computer] 
INNER JOIN
          [Planned] ON [Computer.ComputerID] = [Planned.ComputerID] 
INNER JOIN
          [User] ON [Computer].UserID = [User].UserID
WHERE     (DATEDIFF(dd, GETDATE(), [Planned.DateAvailable]) < 10) 
          AND Planned.IsPlannable = 1

и compose ,на основе результатов этого представления соответствующие сообщения в коде C # этого приложения.

graph of the structure

2 :) Составьте сообщение целикомна sql-сервере в представлении и возвращаем что-то вроде

[EmailTo]
[Subject]
[Body]

Затем итерируем только результаты и создаем MailMessage Объекты из него

, в обоих случаях я получаюсообщения типа:

foreach (vwGetInvitableComputer u in UserController.GetAllInvitableUsers())
{
    // where the usercontroller wraps the Subsonic logic.
    // the composition happens here
}

Выполните итерации в коде C # и просто составьте почтовое сообщение из этих предварительно отформатированных данных.

Какой сценарий целесообразно выбрать для повышения производительности и ресурсов?

обновление: В базе данных действительно есть текстовые манипуляции в варианте 2. Однако этозаменяя три строки в сообщении на CompterName, DateStart и DateEnd.Per возможно, SQL-представления достаточно умны, чтобы распределить производительность для этого, в то время как код c # делает это «по запросу»?

Ответы [ 2 ]

3 голосов
/ 15 июня 2011

Первое соображение: можете ли вы представить время, когда изменение формата электронных писем станет необходимым?Если нет, то это, вероятно, не имеет значения.

Второе соображение. Можете ли вы представить себе время, когда электронные письма будут требовать большего количества манипуляций, чем SQL способен легко доставить?Если это так, то вам определенно следует выбрать C #.

Третье соображение: насколько проблематичным будет повторное развертывание для среды?

И, наконец, альтернативный вариант: используйте C # для композиции сообщения, но используйтеБаза данных или файл на основе шаблона, который может быть легко обновлен.

0 голосов
/ 15 июня 2011

Я бы выбрал вариант 2, в котором собрана вся информация, необходимая для доставки электронной почты на сервер, с использованием представления или хранимой процедуры. В идеале вызовы базы данных должны приводить к как можно меньшему числу обращений к серверу.

...