gpt4 book ai didi

C# 设计模式 - 为多数据源设计的最佳方式

转载 作者:行者123 更新时间:2023-11-30 12:43:15 25 4
gpt4 key购买 nike

<分区>

我目前有一个使用 3 个外部数据源的 ASP.Net MVC 5 应用程序(调用外部 API,反序列化响应,并映射到业务 POCO)。

该应用目前使用 SimpleInjector 将每个数据源的具体存储库注入(inject)业务逻辑层以供使用。

问题是,随着更多数据源的添加(可能是 20-30 个),构造函数将变得庞大并且注入(inject)所有这些存储库似乎很麻烦。

是否有更好的模式/方法来使用所有数据源而不是使用不同的存储库?

立面还是其他模式更合适?

非常通用的例子:

    public class MyObject(){
public IEnumerable<Cat> Cats { get; set; }
public IEnumerable<Dog> Dogs { get; set; }
public IEnumerable<Fish> Fish { get; set; }

}

public class BusinessLogic{
private readonly ISourceARepository _sourceA;
private readonly ISourceBRepository _sourceB;
private readonly ISourceCRepository _sourceC;

public BusinessLogic(ISourceARepository sourceA, ISourceBRepository sourceB, ISourceCRepository sourceC){
_sourceA = sourceA;
_sourceB = sourceB;
_sourceC = sourceC;
}

private Dog MapSourceARecordToDog(SourceARecord record){
var result = new Dog();

if(record != null){
result.Name = record.NameField;
result.Age = record.Age;
}

return result;
}

private Cat MapSourceBRecordToCat(SourceBRecord record){
var result = new Cat();

if(record != null){
result.Name = record.NameField;
result.Weight = record.WeightField;
}

return result;
}

private Fish MapSourceCRecordToFish(SourceCRecord record){
var result = new Fish();

if(record != null){
result.ID = record.IDField;
result.Name = record.NameField;

}

return result;
}

public MyObject GetResults(){
var result = new MyObject();

result.Dogs = _sourceA.GetAll().Select(MapSourceARecordToDog).ToList();
result.Cats = _sourceB.GetAll().Select(MapSourceBRecordToCat).ToList();
result.Fish = _sourceC.GetAll().Select(MapSourceCRecordToFish).ToList();
return result;
}
}

public class SourceARespository : ISourceARepository{
public IEnumerable<SourceAResult> GetAll(){
return new List<SourceAResult>();
}
}

public class SourceBRespository : ISourceBRepository{
public IEnumerable<SourceBResult> GetAll(){
return new List<SourceBResult>();
}
}

public class SourceCRespository : ISourceCRepository{
public IEnumerable<SourceCResult> GetAll(){
return new List<SourceCResult>();
}
}

更新:这不是构造函数疯狂问题的重复,因为在这种情况下,一个类需要许多不同的数据源,但仍然有单一的责任。因此,它需要自己的解释和答案。

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