asp.net - 应用程序设计和所需的存储过程约定

标签 asp.net asp.net-mvc asp.net-mvc-3 oracle

首先是一些背景,

我目前正在开发一个相对较大的 Asp.Net MVC 应用程序,我已尽可能尝试使用良好的设计原则围绕域驱动模型进行设计。我们需要通过存储过程(Oracle)进行所有数据库访问。在此应用程序中,我有各种 Controller ,它们使用服务对象来执行业务逻辑,然后调用存储库对象来完成访问。

我刚刚获悉,除了获取/更新/插入数据所需的参数之外,dba 还需要将几个通用参数传递给每个存储过程。这些参数包括发出原始 Web 请求的用户的用户名、IP 地址和域。然后,每个存储过程使用该数据来调用记录访问的函数,并检查用户是否有权执行该特定存储过程。

我试图温和地解释说,我觉得这是一个糟糕的设计,.Net 应用程序可以在必要时简单地调用专门用于日志记录和检查权限的存储过程。不幸的是,这种方法在环境中已经很成熟,并且 dba 不愿意改变它。

现在回答我的问题,

有人对如何完成检索这些额外参数并将它们传递到存储库对象而不造成巨大困惑有任何好主意吗?据我所知,这些数据只能在 Controller 层的 Web 上下文中获得。这意味着将额外的数据传递给服务层中的类,然后传递给每个存储库类。我想尽可能减少这里的痛苦。

最佳答案

如果您正在使用依赖注入(inject)(您不是您 - 这是一个更大的项目) 您只需将服务注入(inject) Controller 即可。然后将存储库注入(inject)到服务中。存储库的构造将采用 IUserSettings (或任何其名称),它是您所需的详细信息的具体实现。然后它可用于每个存储库。

public YourRepositoryClass(IUserSettings userSettings)
{
 _userSettings = userSettings;
}

瞧 - 它可用。

关于asp.net - 应用程序设计和所需的存储过程约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069244/

相关文章:

C# ASP.NET MVC 模型绑定(bind)

c# - 在 C# 中创建 session

asp.net - ASP.NET GridView 模板字段中的复选框在提交时不保留其值

asp.net - 使用 javascript 进行回发

使用 iPhone UIWebView 时的 Asp.Net 表单例份验证

c# - 带有 Ninject 错误 : MVCApplication does not implement inherited abstract member 的 MVC3

c# - 获取 session 值 - ASP.NET Web 处理程序文件

sql-server - 外键 Entity Framework 6 在依赖表中插入 null

asp.net-mvc - 是否可以使 HtmlHelper 扩展方法仅对具有特定类型的 View 可用

c# - MVC3如何更新多个项目的库存