良好的编码实践:在另一个函数调用的参数列表中使用函数调用?

时间:2014-03-04 15:36:42

标签: c# .net asp.net-mvc vb.net

假设我有一个网页(使用VB.Net构建在MVC 4上),显示用户可以通过点击编辑链接编辑的数据。此链接将通过传递相关数据字段的Edit来路由到id函数。

要显示我的编辑页面,我将获取数据,将其映射到模型,然后将其传递给视图。我们将调用我的映射函数Map2Model,它接受​​实体框架模型&返回模型和返回实体框架模型的数据访问函数GetDataGetData接受id数据和userid。我们将使用SimpleMembership进行用户身份验证。执行以下操作被认为是不好的做法(在另一个函数调用的参数列表中调用一个函数:

Function Edit(ByVal id as Integer) as ActionResult
    Dim Model2Edit = Map2Model(GetData(id, WebSecurity.GetUserId(User.Identity.Name)))
    Return View(Model2Edit)
End Function

VS。 (首先声明变量)

Function Edit(ByVal id as Integer) as ActionResult
    Dim TheData as New EntityModel
    Dim UserID as Integer
    Dim Model2Edit as New Model

    UserID = WebSecurity.GetUserId(User.Identity.Name)
    TheData = GetData(id, UserID)
    Model2Edit = Map2Model(TheData)

    Return View(Model2Edit)
 End Function

在C#中:

    public ActionResult Edit(int id)
    {
    dynamic Model2Edit = Map2Model(GetData(id, WebSecurity.GetUserId(User.Identity.Name)));
    return View(Model2Edit);
    }

VS

public ActionResult Edit(int id)
{
    EntityModel TheData = new EntityModel();
    int UserID = 0;
    Model Model2Edit = new Model();

    UserID = WebSecurity.GetUserId(User.Identity.Name);
    TheData = GetData(id, UserID);
    Model2Edit = Map2Model(TheData);

    return View(Model2Edit);
}

除了是否是不好的做法之外,我希望我的代码可读。我觉得在描述性方面命名这些函数应该足以让它足够容易。

编辑修正我的标题

编辑2 进一步完善了问题。

编辑3 添加了C#代码

2 个答案:

答案 0 :(得分:5)

我假设您的确切问题是:

  

在另一个函数调用的参数列表中调用函数是不好的做法:

                                       V---------------------------------------V
Dim Model2Edit = Map2Model(GetData(id, WebSecurity.GetUserId(User.Identity.Name)))

不,因为那是你唯一使用完全没法的价值的地方。如果你曾经重新使用过该值,那么显然最好保留引用而不是再次调用函数。

还需要考虑其他一些事项:

  • 是否会长时间不必要地调用函数?
  • 这个电话会抛出你想要处理的异常吗?
  • 调用是否返回了您想要在using块中包装的一次性对象?

如果你想要一个真正的试金石让别人看一下代码,看看他们是否很难理解意图是什么。

答案 1 :(得分:1)

首先制作一些变量:

Dim name = User.Identity.Name
Dim User = WebSecurity.GetUserId(name)
Dim Data = GetData(id, User)
Dim Model2Edit = Map2Model(Data)
Return View(Model2Edit)

然后识别程序其他部分中使用的部分,例如获取用户,并开始重构:

Dim User = GetUser() -> introduce a new function
Dim Data = GetData(id, User)
Dim Model2Edit = Map2Model(Data)
Return View(Model2Edit)

这只是重构的一个开始,使其更具可读性。