在业务层中需要httpcontext值

时间:2013-07-03 14:52:14

标签: c# asp.net-mvc oop c#-4.0 asp.net-mvc-4

我有一个MVC4项目,它调用一个业务层方法,其当前签名如下:

businessObject.BusinessMethod(param1, param2, param3)

在此业务层方法中,我现在需要从HttpContext.Current.Session["SomeSessionValue"]属性获取一些数据。

因此,我不想使用Resharpers重构功能添加另外两个参数,而是希望将这三个参数中的所有参数都添加到一个对象中并重命名签名,如下所示

businessObject.BusinessMethod(myParametersObject)

此业务层方法在整个解决方案中使用,并且是经过测试的代码。如果我使用resharper来修改方法签名,我现在需要在调用方法businessObject.BusinessMethod(myParametersObject)

之前将param1,param2,param3的值分配给MyParameters类对象中的相应属性。

我需要超过2000个地方才能进行此项更改。是否有更快的方法来进行此更改?我不想在任何地方手动更改代码或将HttpContext添加到业务层。一些OOP技术可以帮助我吗?

感谢。

1 个答案:

答案 0 :(得分:2)

使用HttpContext对象传递全局对象是个坏主意。通常,业务层甚至不应该引用System.Web。

Resharper具有“Extract Class from Parameters ...”重构功能,可以自动化您描述的内容。您可以通过右键单击方法的名称来访问它,然后选择Refactor>提取物>从参数中提取类。然后,您可以选择要包含在课程中的参数。

Resharper将更新对该方法的所有引用,以创建和使用新类。

在任何情况下,超过3或4个参数是代码气味,表明该方法可能试图做太多事情。当你越过这个门槛时,是时候改变你的设计了,要么合并参数,要么拆分方法。