Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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#存储库_C#_Design Patterns - Fatal编程技术网

具有两个数据提供程序的c#存储库

具有两个数据提供程序的c#存储库,c#,design-patterns,C#,Design Patterns,我正在创建一个存储库,我必须处理两个数据提供者(IFileDataAccess、IDbDataAccess)来构建我的模型对象(MyModel) 我已经写了下面的代码,但我觉得这是不正确的,重要的是让MyModel类具有所有编写的属性,因为它们都可以一起使用 请提出一个实现这一目标的好方法 谢谢 class MyModel { public Schedule Schedule { get; set; } public Rates Rates { get; set; }

我正在创建一个存储库,我必须处理两个数据提供者(IFileDataAccess、IDbDataAccess)来构建我的模型对象(MyModel)

我已经写了下面的代码,但我觉得这是不正确的,重要的是让MyModel类具有所有编写的属性,因为它们都可以一起使用

请提出一个实现这一目标的好方法

谢谢

class MyModel
    {
    public Schedule Schedule { get; set; }
    public Rates Rates { get; set; }
    public Balance Balance { get; set; }
    }

class MyRepository 
{
    private IFileDataAccess  _fileDataAccess;
    private IDbDataAccess  _dbDataAccess;

    public MyClass (IFileDataAccess fileDataAccess, IDbDataAccess dbDataAccess)
    {
        _fileDataAccess= fileDataAccess;
        _dbDataAccess=dbDataAccess;
    }

    public MyModel GetMyModel()
{
    return new MyModel(){Schedule=_dbDataAccess.GetSchedule(),Rates=_fileDataAccess.GetRates(), Balance=_fileDataAccess.GetBalance()};
}

}

您是否可能因为“它做得太多”而质疑您的存储库类?看看这个变化,例如

class MyModel
{
    public Schedule Schedule { get; set; }
    public Rates Rates { get; set; }
    public Balance Balance { get; set; }
}

class MyFileDataRepository
{
    private IFileDataAccess _fileDataAccess;

    public MyFileDataRepository(IFileDataAccess fileDataAccess)
    {
        _fileDataAccess = fileDataAccess;
    }

    public Rates GetRates()
    {
        return _fileDataAccess.GetRates();
    }

    public Balance GetBalance()
    {
      return _fileDataAccess.GetBalance();
    }
}

class MyDbDataRepository
{
    private IDbDataAccess _dbDataAccess;

    public MyDbDataRepository(IDbDataAccess dbDataAccess)
    {
        _dbDataAccess = dbDataAccess;
    }

    public Schedule GetSchedule()
    {
        return _dbDataAccess.GetSchedule();
    }
}

class MyModelProvider
{
    private MyFileDataRepository _fileDataRepository;
    private MyDbDataRepository _dbDataRepository;

    public MyModelProvider(MyFileDataRepository fileDataRepository, MyDbDataRepository dbDataRepository)
    {
        _fileDataRepository = fileDataRepository;
        _dbDataRepository = dbDataRepository;
    }

    public MyModel GetModel()
    {
        return new MyModel
        {
            Schedule = _dbDataRepository.GetSchedule(),
            Rates = _fileDataRepository.GetRates(),
            Balance = _fileDataRepository.GetBalance()
        };
    }
  }

你必须提供更多的信息。你认为哪里不对?这种方法没有错。您的模型是干净的(因为它不应该反映数据存储策略),并且您的数据访问是清晰和独立的。在存储库中使用两个数据提供程序是一种好方法吗?就像我在做IFileDataAccess&IDbDataAccess一样?当然可以,如果您需要的话。存储库应该对应用程序隐藏这两个数据提供程序,但是如果您看到需要,存储库内部的工作可以重新进行。我不明白为什么您甚至需要FileDataAccess。此外,我真的不明白,为什么你想要获得的信息存储在不同的地方?下一件事是,存储库应设计为单例,以避免并发访问