Asp.net mvc 关于数据查找常量的问题

Asp.net mvc 关于数据查找常量的问题,asp.net-mvc,separation-of-concerns,Asp.net Mvc,Separation Of Concerns,在我的项目Web/UI中,我有以下几层:服务层、存储库层、公共层和其他一些我认为与本例无关的层 我有一个电子邮件表,其中保存了所有网站生成的电子邮件数据。我还有一个名为EmailType的表,它跟踪应该调用emails表中的哪些电子邮件 在我的电子邮件服务中,我有以下方法 public string SendPurchaseConfirmationEmail(string email, string firstName, string dealName) { Email email =

在我的项目Web/UI中,我有以下几层:服务层、存储库层、公共层和其他一些我认为与本例无关的层

我有一个电子邮件表,其中保存了所有网站生成的电子邮件数据。我还有一个名为EmailType的表,它跟踪应该调用emails表中的哪些电子邮件

在我的电子邮件服务中,我有以下方法

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,具有一个扩展名,用于获取值属性,该属性是一个guid,存储在我的存储库中。EmailType表在生成测试电子邮件的管理员中工作得很好,但对于实际的Web层,对服务的调用需要存储库中的硬编码值

我的问题是,这是做这件事的最好或推荐的方法,还是我能以某种方式使它更具活力?我不喜欢的是,我的服务层需要为每封电子邮件提供一种方法,因为web层应该接触存储库

如果代码分离是一个问题,那么将枚举放置在服务层也将是不正确的


谢谢,

将服务方式更改为此

public string SendConfirmationEmail(EmailType selectedType, string email, string firstName, string dealName) {    
    Email email =  EmailRepository.GetByCurrentByType(selectedType);    
    variables = createVariablesList();    
    SendEmail(email.ListId, email.externalEmailId, variables);
}
关于“web层”调用(从视图调用服务),我不知道您的确切意思,但是如果是AJAX调用,那么您可以使用enum进行调用。 除了AJAX,我真的不知道您可以进行什么类型的调用,因为在MVC中基本上有GET和POST。 当您发布控制器操作时,您可以再次使用枚举

像这样

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

当然,如果您将服务方法设置为静态,则上述示例是有效的。

是的,您需要在“服务”层和数据库中为电子邮件类型集重复一些“键”值

如果不使用存储在电子邮件表中的“外键”值(或其他容易映射到DB代码中的值),则需要使用电子邮件类型表执行DB查找


我建议对电子邮件类型表使用整数代理键,并创建一组命名数字常量,映射到需要使用该类型集的任何层中的代理键值(特别是如果该层连接到数据库本身)。其他每一层都应该通过其中一层使用该组名称常量。

你说的“web层”是什么意思?对不起,我使用的是MVC,所以UI或web层只是实际的aspx页面/视图和控制器。