Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET核心MVC中重用存储库?_C#_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 在.NET核心MVC中重用存储库?

C# 在.NET核心MVC中重用存储库?,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我创建的web应用程序包括主页和管理页面。我创建了一个_sliderRepository.AllSliders来返回数据库中的滑块列表。如何为2个控制器重用存储库代码 public class HomeController : Controller { private readonly ISliderRepository _sliderRepository; public HomeController( ISliderRepository sliderRepository)

我创建的web应用程序包括主页和管理页面。我创建了一个_sliderRepository.AllSliders来返回数据库中的滑块列表。如何为2个控制器重用存储库代码

public class HomeController : Controller
{
    private readonly ISliderRepository _sliderRepository;

    public HomeController( ISliderRepository sliderRepository)
    {
    
        _sliderRepository = sliderRepository;
    }

    public IActionResult Index()
    {  
        return View(_sliderRepository.AllSliders);
    }
}

public class AdminController : Controller
{
    private readonly ISliderRepository _sliderRepository;
    
    public AdminController( ISliderRepository sliderRepository)
    {
        _sliderRepository = sliderRepository;
    }

    public IActionResult Slider()
    {
        return View( _sliderRepository.AllSliders);
    }
}
有几种选择:

使用继承 创建继承控制器类的基本控制器类,并在其中添加CreateViewFrom等方法。这里的主要缺点是,如果您使用一些需要注入基本控制器中的服务,那么所有继承控制器都必须提供该服务

使用扩展方法 只需创建静态类并定义扩展方法,这些扩展方法将再次创建您需要的响应。这里的主要缺点是您无法访问控制器类中存在的功能

无所事事 您什么也做不了,成本为零,只需跨控制器复制和粘贴代码即可。缺点是随着时间的推移,维护成本会增加。您需要找到决定攻击代码重复的最佳时间。以我的经验,尽快做这件事

一般意见
保持你的控制器非常轻,它们不应该是服务。在您的特定示例中,我可以预测在某个时刻您可能希望在数据库中保存滑块,并在存储器中保存滑块图像。不要在控制器类中执行此编排。提取ISildersService抽象并在那里进行编排。保持轻松。

你是什么意思?怎么做?看来你正在这么做。什么不起作用?是什么阻碍了您实现目标?我想重用代码。因为两个动作都是一样的thing@AdrianIftode问题是什么?他只有多少钱?在标题中。。。这不是一个问题,而是一句肯定的话,也许我是如何为2个控制器重用存储库代码的。。。但是他已经在这个代码中重用了存储库,这两个操作并没有做相同的事情。一个显示主视图,另一个显示管理员视图数据相同,代码不同。没有要删除的重复项。此外,到周二,您将认识到管理页面需要与一般主页不同的数据,并且必须向AdminController添加另一个存储库。如果使用继承来删除字段分配或返回视图调用,您会发现在不中断HomeController的情况下修改AdminController非常困难。第三个选项:什么都不做。他们有各自的关注点,应该能够独立地改变。DRY是关于不复制业务逻辑的——它不是关于最小化代码重复。问题的代码中没有重复。继承只能通过让多个类继承来增加问题。。。什么分配给某个领域的任务?索引方法,当OP意识到管理页面需要与主页不同的数据时,可能必须更改?