gpt4 book ai didi

c# - 来自不同 Controller 的相同方法是否应该移动到 CommonController?

转载 作者:行者123 更新时间:2023-11-30 17:30:48 27 4
gpt4 key购买 nike

我有两个 Controller ,它们几乎没有相同的方法:

public class Controller1 : Controller
{
private readonly ITestBL bl;

public Controller1(ITestBL bl)
{
this.bl= bl;
}

[HttpGet]
public ActionResult Method1(string data)
{
using (bl)
{
var res = ...

return Json(res, JsonRequestBehavior.AllowGet);
}
}

[HttpGet]
public ActionResult Method2(string data, int data2)
{
using (bl)
{
var res = ...

return Json(res, JsonRequestBehavior.AllowGet);
}
}

// other methods
}

第二个 Controller 也有这两个方法。

我应该创建一些通用 Controller 来保留这些方法吗?所以,它看起来像这样:

public abstract class CommonController: Controller
{
private readonly ITestBL bl;

protected Controller1(ITestBL bl)
{
this.bl= bl;
}

[HttpGet]
public ActionResult Method1(string data)
{
using (bl)
{
var res = ...

return Json(res, JsonRequestBehavior.AllowGet);
}
}

[HttpGet]
public ActionResult Method2(string data, int data2)
{
using (bl)
{
var res = ...

return Json(res, JsonRequestBehavior.AllowGet);
}
}
}

我的 Controller1Controller2 将是:

public class Controller1 : CommonController
{
private readonly ITestBL bl;

public Controller1(ITestBL bl)
:base(bl)
{
}

// methods
}

这是正确的做法吗?我是否遗漏了什么或是否有更好的方法?

最佳答案

Should same methods from different controllers be moved to a CommonController?

是的,你不应该使用继承。我敢肯定有很多人可能不同意,但是您的示例非常通用并且提供的上下文非常差没有充分的理由让所有 Controller 都需要相同的代码(继承与否)。您的问题上下文没有理由在 Has A vs Is A 的 OOP 领域出现这种情况(摘录如下)。

  • 房子建筑物(继承);
  • 一个房子有一个房间(组合);

看起来你正在做的不是这些。

如果您的界面是 IVehicleEngine 并且您的 Controller 是 FerarriVehicleControllerFordVehicleController 现在它在 context 中有意义.在这种情况下每个 Controller 都应该使用继承,这是有道理的。

以我个人拙见,从多个方面来说,从您自己的 Controller 继承是相当困难的。首先,它不直观;那就是它将变成tribal knowledge因为它取代了大多数程序员遵守的常规约定(从基本 MVC Controller 派生而来)。其次,我已经看到它成为每个人都决定向 (God Object) 添加代码的地方,即使它可能不适用于 某些 Controller 。第三,它很难重用对派生类型有意义但对基本类型 (/search?searchFor=) 有意义的 url。由于 MVC 暴露于网络(安全等),因此还有许多其他注意事项非常特定于 MVC。

根据实现情况,您可能还难以确定在什么情况下使用哪个 URL。

/Controller1/Method1/Data/1是否与/Controller2/Method1/Data/1相同但不同于/Controller3/Method1/Data/1?如果它们都一样或者有些相同有些不同那么很可能是架构出了问题。

关于c# - 来自不同 Controller 的相同方法是否应该移动到 CommonController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49107771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com