asp.net – 存储库是否应该调用另一个存储库?或者存储库是否应该调用服务层?

前端之家收集整理的这篇文章主要介绍了asp.net – 存储库是否应该调用另一个存储库?或者存储库是否应该调用服务层?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想弄清楚如何解决这个问题.我必须将一些数据插入到2个表中,然后将它们称为表A和表B.
Table A has these columns
AId<PK>
A1 
A2
A3

Table B has
AId<PK>
A1
B2
B3
B4

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

现在我的问题.

当我在我的存储库层(TableARepository)中调用create来创建表A.我也立即创建了tableB的字段.

// 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方法,即使它是null(A1是一个可空字段).

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

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

所以我不知道该怎么做.

解决方法

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

听起来你假设他们应该是每个表的存储库,这是不正确的.每个聚合根应该有一个存储库,该存储库应该负责将数据存储到所有底层的相关表中.存储库可以有一些与存储数据的位置或方式有关的逻辑,但最好在可能的情况下将其封装在公共区域中.

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

猜你在找的asp.Net相关文章