1

我正在尝试更新旧应用程序,并且需要一些有关如何组织数据级别的建议。

今天,所有数据都存储在一个二进制文件中,该文件是在二进制序列化的帮助下创建的。存储的数据是多层深的树结构。

保存数据的对象级别:

ApplicationSettings
   CommunicationSettings
   ConfigurationSettings
      HardwareSettings
         and so forth some additional levels

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

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

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

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

编辑:

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

4

1 回答 1

1

我会做什么;

首先,将设置变成合约;

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

现在,将您的逻辑分解为单独的关注点,并以可能的最高级别传递您的设置;这样如果MyLogicForSomething只关心通信设置,则只传入通信设置;

public class MyLogicForSomething
{       
    public MyLogicForSomething(ICommunicationSettings commSettings)
    {
    }

    public void PerformSomething(){/* ... */}
}

ICommunicationSettings 在这里很容易模拟;像Rhino Mocks这样的东西

您现在可以轻松测试以确保在运行逻辑时调用/设置设置中的某些内容

var commSettings = MockRepository.GenerateStub<ICommunicationSettings>();
var logic = new MyLogicForSomething(commSettings );

logic.PerformSomething()

commSettings.AssertWasCalled( x => x.SaveSetting(null), o=>o.IgnoreArguments() );
于 2013-03-11T12:28:05.373 回答