对存储库模式的理解混乱



我是MVC模式的新手,但我参与了一个项目,该项目要求我实现存储库模式和工作单元,大量的示例在线,有100种不同的实现,这也是一种痛苦,因为没有明确的方法,无论如何,这是我正在做的,我希望你给我一个为什么我应该使用这个该死的模式的原因:

我有很多控制器,我实例化模型,并在我的控制器中使用它:

public CentralEntities DB = new CentralEntities(); 

我在我的控制器中使用它,例如:

var turbineid = (from s in DB.MasterDatas
where s.name == turbinename
select new TrBineId
{
turbineID = s.m_turbine_id
}).Single();

TrBineId是我的viewModel,无论如何,控制器的数量都在增加,而且在每个控制器中我都有许多不同的LINQ,我应该从通用存储库开始吗?

使用存储库模式的原因在于实现您的解决方案时,清晰地分离了关注点,并以可在代码库中重用的方式利用域I/O。

您应该开始重新访问OOP,并且需要仔细检查存储库模式

一天下来,对某些图案的需求已经存在,但一旦你把这些图案整理好,它就会出现在你的脑海中。

我将开始在网上学习一些关于存储库模式的教程,以实现概念验证项目并实现它的工作原理。

最后,控制反转依赖注入是您需要管理的概念,以便在项目中集成存储库和其他模式,以提高代码的可组合性和可测试性。

免责声明:以下链接来自我的软件体系结构网站。您可能希望将它们作为存储库模式:的可能参考实现进行检查

  • 存储库
  • 不可知论知识库

存储库模式允许您使用单一责任原则的概念,这意味着(作为概述(一个类=一个角色。

您的controler类在这里用于管理请求(Get、Post(和发送回响应(FileResult、ActionResult…(

对于数据访问(DAL,DAO(,您通常会为每个模型实体创建一个类(ClientRepository,CommandRepository(,然后创建获取它们的方法(GetClients((,GetOneClientById(int id(…(在这个类别中。

编辑Matías评论后的澄清:

这个类将在你的控制器中通过他的接口调用,你也将实现这个接口(无论是否使用IOC(然后,您将在控制器中创建ClientRepository的类实例,但该类实例被分配给接口类型(IClientRepository(的引用。

**结束编辑**

因此,我们可以想象客户实体:

ClientController(All route for clients data)
IClientRepository (interface)
ClientRepository (Class which implement IClientRepository )

然后,在您的控制器中,您将调用类似的存储库

IClientRepository clientRepo = new ClientRepository();

然后使用以下方法:

ICollection<Client> clients = clientRepo.YourMethod(int param1);

优点:

首先,您的代码将更加清晰和可维护。您的DAO(DAL in.net(将保留数据访问层,您可以多次使用GetAllClients方法,并且不会重复自己的操作(DRY(。

你也可以很容易地在方法上应用一些参数(比如顺序、分页限制等(

它也是可测试的,我不认为在控制器中调用数据库可以给您合理的单元测试结果。你也会用一种更"优雅的方式"抓住借口。

小提示:当你对回购模式有更多经验时,你可以看看控制反转模式

最新更新