gpt4 book ai didi

asp.net - 一个存储库应该调用另一个存储库吗?或者存储库应该调用服务层吗?

转载 作者:行者123 更新时间:2023-12-04 01:40:50 24 4
gpt4 key购买 nike

我试图弄清楚如何解决这个问题。我必须将一些数据插入到 2 个表中,我们称它们为表 A 和表 B。

Table A has these columns
AId<PK>
A1
A2
A3

Table B has
AId<PK>
A1
B2
B3
B4

现在我的第一个问题是另一个存储库是否应该调用另一个存储库?我认为这不会解决我当前的问题,但我只想知道这一点以供将来引用?

现在谈谈我的问题。

当我在存储库层(TableARepository)中调用创建来创建表 A 时。我也立即为表 B 创建字段。
// linq to sql.
TableA myATable = new TableA();
dbContext.myATable.A1 = "hi"; // all these values would come from parameters.
dbContext.myATable.A2 = "bye";
dbContext.myATable.A3 = "go";

dbContext.myATable.insertOnSubmit(TableA);
dbContext.SubmitChanges();

TableB myBTable = new TableB();
dbContext.myBTable.AId = myATable.AId;
dbContext.myBTable.A1 = myATable.A1;
dbContext.myBTable.B2 = "2";
dbContext.myBTable.B3 = "3";
dbContext.myBTable.B4 = "4";

dbContext.myATable.insertOnSubmit(TableB);
dbContext.SubmitChanges();

所以我认为这很好,我认为我不需要为此或服务层调用 myBTable 存储库(创建 tableB)。

现在问题来了。只有当且仅当它不等于“hi”时,TableB 表才应该将信息插入到该表中。
so param1 != "hi"  // insert 
param1 == "hi" // ignore and only insert table A

所以这意味着我必须像这样包装我的 TableB
if(param1 != "hi")
{
TableB myBTable = new TableB();
dbContext.myBTable.AId = myATable.AId;
dbContext.myBTable.A1 = myATable.A1;
dbContext.myBTable.B2 = "2";
dbContext.myBTable.B3 = "3";
dbContext.myBTable.B4 = "4";

dbContext.myATable.insertOnSubmit(TableB);
dbContext.SubmitChanges();
}

现在我不确定我是否应该在这里执行此操作,因为这看起来几乎像业务逻辑。但与此同时,我不确定如何执行此业务逻辑,因为无论哪种方式,我仍然必须传入要插入到 create 方法中的值,即使它为空(A1 是一个可为空的字段)。

所以我应该在 TableA.Id、A1 中调用 tableB 服务层传递并检查 A1 是什么。如果好,那么去 TableB 存储库并以这种方式插入它?

所以 TableARepostiory -> TableB 服务层 -> TableBRepository(如果发现那个值!=“hi”)。

所以我不确定该怎么做。

最佳答案

不 - 我想不出一个存储库调用另一个存储库或另一个服务的原因。他们唯一关心的应该是持久化您的实体并从数据存储中检索实体。除了底层域之外,他们应该对应用程序的大多数方面一无所知。

听起来您假设它们应该是每个表的存储库,这是不正确的。每个聚合根应该有一个存储库,并且该存储库应该负责将数据存储到所有底层相关表中。存储库可以有一些关于在何处或如何保存数据的逻辑,但最好尽可能将其封装在一个公共(public)区域中。

例如,如果您有 person 对象并且需要根据性别保存到不同的表中,您可以使用继承( if (person is Woman) save here...)或对象的属性( if (person.Gender == Gender.Female) 保存在这里...) 或规范(如果 (FemaleSpecification.IsSatisfiedBy(person)) 保存在这里...)。

关于asp.net - 一个存储库应该调用另一个存储库吗?或者存储库应该调用服务层吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1364461/

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