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/

相关文章:

entity-framework-4 - MVC 将 View 模型映射到 POCO

c# - 获取当前用户 SID 的最佳方法是什么?

c# - 将具有不同关系值的表转换为 Excel 列

c# - 使用自定义功能覆盖 MVC 模型显示名称注释

asp.net-mvc - TempData:安全吗?

asp.net-mvc-3 - protected 内部集合属性的模型绑定(bind)

c# - 工作流是否适合在基于 Web 的应用程序中创建动态工作流?

c# - 通过对 SQL 数据库的一次调用检索两个级别的数据

html - 如何让一组开发人员访问同一个共享点站点并一起开发?

asp.net-mvc-3 - 创建 MVC 3 Razor - 显示模板库以在多个项目/解决方案之间共享