3

最近、リファクタリングを行いました。基本的に、XML ファイルを読み取り、それに対していくつかの操作を実行し、更新して書き出すシステムがあります。この機能を 2 つのクラスに分割しました

  1. XML を「制御」し、XML で何をすべきかを抽象的に示すクラス
  2. XML ですべてを処理し、#1 が関心を持っていることを更新および読み取るための単純なインターフェイスを提供するクラス

実装が大幅に明確になりました。#1 XML 名前空間や XPath クエリなどについて心配する必要はありません。「#2、この部分を 'foo' から 'bar' に更新してください」というだけです。

しかし、私はそれを何と呼ぶべきか確信が持てません。古いクラスは my と名付けられましたFooManifestXml。この 2 つのクラスを何と呼べばよいでしょうか。いくつかのアイデアがありますが、結果を歪曲したくありません。

また、この単純な命名について私が心配している大きな理由は、これに似たリファクタリングが将来行われる可能性が高く、直感的な命名スキームが必要なためです。

4

2 に答える 2

2

小さな変更を加えたコマンド パターンのように聞こえます。

XML を「制御」し、XML で何をすべきかを抽象的に示すクラス

これは、ICommand

public interface ICommand
{
    void Execute();
}

XML ですべてを処理し、#1 が関心を持っていることを更新および読み取るための単純なインターフェイスを提供するクラス

これには、アクションの実装を含めることができます。

public class UpdateCommand : ICommand
{
    private XML file;

    public UpdateCommand(XML file)
    {
        this.file = file;
    }

    public void Execute()
    {
        //omn nom nom xml
    }
}

そして、main次のように見えるかもしれません

XML file = new XML("file.xml");
ICommand updateCommand = new UpdateCommand(file);
updateCommand.Execute();
于 2013-02-07T17:45:56.213 に答える
1

大まかに言えば、私は次のように考えています。

保管所:

  • ファイルシステム
  • データベース
  • メモリー

鮮明なストレージの抽象化 ( AbcStoreまたはAbcRepository ) を使用すると、キャッシュやロックなどの動作をより簡単に追加できます。

シリアル化形式:

XML を選択した理由は、おそらく変更されるか、データがさまざまなクライアントでさまざまな形式で利用できるようになるためです。これが理にかなっているのかどうかを知るには、あなたのアプリケーションについて十分に知りません。

この抽象化にAbcSerializerと名前を付けるかもしれません。

ビジネスの論理:

これは、データを操作する場所であり、メソッド名はソリューション ドメインではなく、問題ドメインにある必要があります。つまり、メソッド名は次のようにする必要がありますchangeAddressupdateChildNode

于 2013-02-07T17:55:36.363 に答える