Asp.net mvc 关于数据查找常量的问题
在我的项目Web/UI中,我有以下几层:服务层、存储库层、公共层和其他一些我认为与本例无关的层 我有一个电子邮件表,其中保存了所有网站生成的电子邮件数据。我还有一个名为EmailType的表,它跟踪应该调用emails表中的哪些电子邮件 在我的电子邮件服务中,我有以下方法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 =
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页面/视图和控制器。