1

レガシーアプリケーションを更新しようとしていますが、データレベルを整理する方法についてアドバイスが必要です。

現在、すべてのデータは、バイナリシリアル化を使用して作成されたバイナリファイルに保存されています。保存されるデータは、いくつかのレベルの深いツリー構造です。

保存されたデータのオブジェクトレベル:

ApplicationSettings
   CommunicationSettings
   ConfigurationSettings
      HardwareSettings
         and so forth some additional levels

このすべてのクラスには、さまざまなことを行うための多くのロジックがあります。また、ファイルに保存してはならないステータス情報もあります。

データはプログラムの実行中に常に更新され、「ビジネスロジック」によってバイナリファイルに更新されると保存されます。

プログラムを更新しようとしていますが、このための単体テストを行うのは悪夢です。

データをファイルに保存したいのですが。しかし、そうでなければ、私はこれを改善する方法の提案を受け入れています。

編集:

プログラムは非常に小さく、大きくて複雑なフレームワークに依存したくありません。ヘルプが必要な理由は、実質的にアプリケーションロジック全体が1つの巨大なメソッドに含まれているコードをクリーンアップしようとするためです。

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 に答える