Вопрос о константах для поиска данных - PullRequest
0 голосов
/ 23 января 2011

В моем проекте есть следующие слои: Web / UI, Service, Repository, Common и некоторые другие, которые я не считаю важными для этого случая.

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

В моем почтовом сервисе у меня есть следующий метод.

public string SendPurchaseConfirmationEmail(string email, string firstName, string dealName) {
   Email email =  EmailRepository.GetByCurrentByType(EmailType.PurchaseEmail.GetStringValue());
   variables = createVariablesList();
   SendEmail(email.ListId, email.externalEmailId, variables);
}

EmailType - это unum с расширением для получения атрибута value, который является guid и хранится в моем репозитории. Таблица EmailType отлично работает в администраторе, который генерирует тестовые электронные письма, но для реального веб-уровня вызов службы требует жестко закодированных значений в хранилище.

У меня вопрос: это лучший или рекомендуемый способ сделать это, или я могу каким-то образом сделать это более динамичным? В этой части мне не нравится, что моему сервисному слою нужен метод для каждого письма, поскольку веб-слой должен касаться хранилища.

Кроме того, размещение перечисления в сервисном слое было бы неправильным размещением, если возникла проблема с разделением кода.

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 апреля 2011

Да, вам нужно будет повторить какое-то значение «ключа» для набора типов электронной почты как на уровне «службы», так и в вашей БД.

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

Iпредложил бы использовать целочисленный суррогатный ключ для таблицы типов электронной почты и создать набор именованных числовых констант, которые сопоставляются с этими значениями суррогатного ключа в любом слое, который должен использовать этот набор типов (особенно, если этот слой подключается к самой БД),Каждый другой слой должен использовать этот набор констант имен через один из этих слоев.

0 голосов
/ 23 января 2011

Измените метод обслуживания на этот

public string SendConfirmationEmail(EmailType selectedType, string email, string firstName, string dealName) {    
    Email email =  EmailRepository.GetByCurrentByType(selectedType);    
    variables = createVariablesList();    
    SendEmail(email.ListId, email.externalEmailId, variables);
}

Что касается вызова "веб-уровня" (вызова службы из представления), я не знаю, что именно вы имеете в виду, но если это вызов AJAX, то вы можете просто использовать перечисление для вызова. Кроме AJAX, я не знаю, какие вызовы вы можете сделать, потому что у вас в основном есть GET и POST в MVC. И когда вы делаете POST для действия контроллера, вы снова можете просто использовать enum.

Как это

EmailService.SendConfirmationEmail(EmailType.Purchase, email, fname, dealname);

Конечно, приведенный выше пример действителен, если вы используете статические методы обслуживания.

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