首先是一些背景,
我目前正在开发一个相对较大的Asp.Net MVC应用程序,我尽可能地尝试使用良好的设计原则围绕域驱动模型进行设计。我们需要通过存储过程(Oracle)进行所有数据库访问。在这个应用程序中,我有各种控制器,它们使用服务对象来执行业务逻辑,然后调用存储库对象来完成访问。
我刚刚被告知,除了获取/更新/插入数据所需的参数之外,dba还需要将几个公共参数传递给每个存储过程。这些参数包括发出原始Web请求的用户的用户名,IP地址和域。然后,每个存储过程使用此数据来调用记录访问权限的函数,并检查用户是否有权执行该特定存储过程。
我试图轻轻地解释我认为这是一个糟糕的设计,并且.Net应用程序可以在必要时简单地调用专用于记录和检查权限的存储过程。不幸的是,这种方法在环境中已经很好地建立,并且dba不愿意改变它。
现在问我的问题,
有没有人对如何完成检索这些额外参数并将它们传递到存储库对象而不会造成巨大混乱有任何好的想法?据我所知,这些数据只能在控制器层中从Web上下文中获得。这意味着将额外数据传递给服务层中的类,然后传递给每个存储库类。我想尽可能减少痛苦。
答案 0 :(得分:3)
如果你正在使用依赖注入(你不是你 - 这是一个更大的项目) 您只需将服务注入控制器即可。然后将存储库注入服务。存储库的构造将采用IUserSettings(或其所谓的),这是您需要的详细信息的具体实现。然后它可用于每个存储库。
public YourRepositoryClass(IUserSettings userSettings) { _userSettings = userSettings; }
并且瞧 - 它可用。
答案 1 :(得分:1)
您是否曾要求DBA考虑使用DBMS_APPLICATION_INFO
?然后,您可以在分配与用户请求的连接时设置它,然后DBA的日志记录过程可以读取它。