使用接口将保存数据写入文件

时间:2018-01-11 18:43:05

标签: c# oop design-patterns file-handling

所以就像我偶然发现设计相关的问题而无法解决问题,如下所示......我有两个类使用不同的< strong>结构,用于在内存中存储和处理他们的数据。 存储数据还有另一个类文件,名为 File_Data_Handler ,其本身实现了一个接口ID控制器进行读取,对文件进行写入,搜索,删除操作。现在,我正面临真正的问题是如何在界面和类之间为沟通建立一个优雅的渠道,以便根据不同的结构,同时保持与 File_Data_Handler 中的数据编写机制相关的代码。任何帮助将提前感谢。这是代码接口

public interface IDInterface
{

    /*Read data from the source*/
    object ReadData(params object[] _args);

    /*Write data from the source*/
    void WriteData(params object [] _args);

    /*Remove data from the source*/
    bool RemoveData(params object[] _args);

    /*Remove all data from the source*/
    bool RemoveAll(params object[] _args);

}

文件数据编写器代码...

public class File_Data_Handler : IDInterface
{

    #region Attribute/Properties

    /*Private Variables*/
    private XmlWriter _writer = null;   //Content writer for class.
    private string _fileLocation="";    //Content storage location.
    private string _fileName = "";  //Content file name.

    #endregion

    #region Compiler Implicit Callbacks

    /*Constructor*/
    public File_Data_Handler(string _fileLocation,string _fileName)
    {

        /*Instance Initialization*/
        this._fileLocation = _fileLocation;
        this._fileName = _fileName;

        /*Make file ready*/
        FileExistanceFlag(_fileName,_fileLocation);

    }

    #endregion

    #region Base overriden Methods

    /*Read data from the source*/
    public object ReadData(params object[] _args)
    {
        return "";
    }

    /*Write data from the source*/
    public void WriteData(params object[] _args)
    {

    }

    /*Remove data from the source*/
    public bool RemoveData(params object[] _args)
    {
        return true;
    }

    /*Remove all data from the source*/
    public bool RemoveAll(params object[] _args)
    {
        return true;
    }

    #endregion

    #region Processing Methods

    /*Check file existance*/
    private void FileExistanceFlag(string _fileName,string _fileLocation)
    {

        if (!File.Exists(_fileLocation + _fileName))
        {
            File.Create(_fileLocation + _fileName);
        }

    }

    #endregion


}

包含需要编写的结构的类

    public classA
{
 public structA
  {
   public int id;
   public string name;
   public string path;
  }
}

public classB
{
 public structB
  {
   public int id;
   public string name;
  }
}

现在我如何通过接口映射这些不同的结构,以便可以将其写入文件。任何优雅的解决方案都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

我不确定你究竟在问什么,但我相信下面的例子将详细阐述如何实现你的目标。

public interface IDataProcessor<TConfiguration>
{
     IEnumerable<TEntity> Read<TEntity>(TConfiguration configuration);
}

相当直接的代码,你有两个泛型,一个用于你希望构建的对象,另一个用于配置关联或交互以完成你的任务。

public class TextFileProcessor : IDataProcessor<TextFileConfiguration>
{
     private readonly TextFileConfiguration configuration;

     public TextFileProcessor(TextFileConfiguration configuration) => this.configuration = configuration;

     public IEnumerable<TEntity> Read<TEntity>(configuration)
     {
         // Map, based on data from configuration and create object.
         // More...
     }
}

以上可以模拟文本文件的处理器。在下面,将模拟不同的类型。

public class ExcelFileProcessor : IDataProcessor<ExcelFileConfiguration>
{
    private readonly ExcelFileConfiguration configuration;

    public ExcelFileProcessor(ExcelFileConfiguration configuration) => this.configuration = configuration;

    public IEnumerable<TEntity> Read<TEntity>(configuration)
    {
         // Map based on data from configuration and create object.
         // More...
    }
}

因此这两个类继承了接口,但实现是完全独立的。通过使用通用的配置对象,它允许额外的灵活性。我相信这是你正在寻求的概念性概念。