序列化到数据层的文件

本文关键字:文件 数据 序列化 | 更新日期: 2023-09-27 18:03:30

我正在尝试更新一个遗留应用程序,需要一些关于如何组织数据级别的建议。

现在,所有的数据都存储在通过二进制序列化创建的二进制文件中。存储的数据是一个多级树状结构。

保存数据的对象级别:

ApplicationSettings
   CommunicationSettings
   ConfigurationSettings
      HardwareSettings
         and so forth some additional levels

所有这些类都有很多逻辑来做不同的事情。它们也有不应该保存到文件中的状态信息。

数据在程序执行过程中不断更新,更新到二进制文件时由"业务逻辑"保存。

我尝试更新程序,但是为此做单元测试是一场噩梦。

我希望数据仍然以任何方式保存在文件中。但除此之外,我愿意听取如何改进这一点的建议。

编辑:

程序很小,我不想依赖于大型、复杂的框架。我需要帮助的原因是试图清理几乎整个应用程序逻辑都在一个大方法中的代码。

序列化到数据层的文件

我会怎么做;

首先,把设置变成契约;

public interface IApplicationSettings
{
     ICommunicationSettings CommunicationSettings{get;} 
     IConfigurationSettings ConfigurationSettings{get;}
}

现在,将你的逻辑分解成单独的关注点,并在尽可能高的级别传递你的设置;如果MyLogicForSomething只关心通信设置,则只传递通信设置;

public class MyLogicForSomething
{       
    public MyLogicForSomething(ICommunicationSettings commSettings)
    {
    }
    public void PerformSomething(){/* ... */}
}

iccommunicationsettings在这里很容易被嘲笑;比如Rhino Mocks

当你运行你的逻辑

时,你现在可以很容易地测试,以确保你的设置中的某些东西被调用/set
var commSettings = MockRepository.GenerateStub<ICommunicationSettings>();
var logic = new MyLogicForSomething(commSettings );
logic.PerformSomething()
commSettings.AssertWasCalled( x => x.SaveSetting(null), o=>o.IgnoreArguments() );