- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 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);
}
}
}
我的 Controller1
和 Controller2
将是:
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 是 FerarriVehicleController
和 FordVehicleController
现在它在 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/
我有两个 Controller ,它们几乎没有相同的方法: public class Controller1 : Controller { private readonly ITestBL b
我是一名优秀的程序员,十分优秀!