4

多くの異なる設計パターンについて読んだ後、現在のプロジェクトについて質問を受けました。誰かが私を助けてくれることを願っています.

私のプロジェクトは、さまざまなユーザー ファイルを入力として受け取り、それらを簡単に使用できるようにオブジェクトのリポジトリに変換します。

例えば:

Userfile A with the content: 
"id:a" - "value1:contentA1" - "value2:contentB1" 
"id:b" - "value1:contentA2" - "value2:contentB2" 
"id:c" - "value1:contentA3" - "value2:contentB3"

このファイルをオブジェクトに解析するための 2 つの異なるアプローチが表示されます (どちらが優れていますか?)。

1)

エンティティ クラスを取得しました。

public class UserContent
{
    public int ID { get; set; }
    public string Value1 { get; set; }
    public string Value2 { get; set; }
}

ユーザーファイルの行を取得し、それをオブジェクトに解析するサービス:

public class UserContentParser
{
    public UserContent ParseUserContent(string content)
    {
        // ...
        // splitting the content
        // ...
        return new UserContent
                            { 
                                ID = id,
                                Value1 = value1,
                                Value2 = value2
                            };
    }
}

ParseController:

public class ParseController
{
    private Repository _repository = new Repository();
    private UserContentParser _userContentParser = new UserContentParser();

    public Repository StartParsing(File userFile)
    {
        // ...
        // reading file
        // ...
        foreach(var contentLine in userFileContent)
        {
            _repository.AddUserContent(_userContentParser.ParseUserContent(contentLine));
        }
    }
}

私が見る他のアプローチは次のとおりです。

2) このアプローチは、2 つのクラス (サービス クラスなし) で構成されています。

public class UserContent
{
    public UserContent(string content)
    {
        // ...
        // splitting the content
        // ...
        ID = id;
        Value1 = value1;
        Value2 = value2;
    }

    public int ID { get; set; }
    public string Value1 { get; set; }
    public string Value2 { get; set; }
}

public class ParseController
{
    private Repository _repository = new Repository();
    private UserContentParser _userContentParser = new UserContentParser();

    public Repository StartParsing(File userFile)
    {
        // ...
        // reading file
        // ...
        foreach(var contentLine in userFileContent)
        {
            _repository.NewUserContent(contentLine);
            // in this method the repository creates the 
            // new UserContent(contentLine)
        }
    }
}

プロジェクトには、含まれているオブジェクトを操作するためにリポジトリへの参照を取得するプラグインもいくつか含まれています。

ここではどのアプローチが良いですか?おそらくより良い代替手段はありますか?また、ユーザー コンテンツを解析するために他の依存関係が必要な場合はどうなるでしょうか? エンティティがサービスに依存していても問題ありませんか、それともエンティティ オブジェクトに依存関係がない方がよいですか? もう 1 つ質問がありますが、UserContent クラスはユーザー コンテンツを解析して他のプラグインに渡すために使用されるため、DTO ですか?

誰かが私の多くの質問を手伝ってくれることを願っています.

よろしく、ゲリット

4

1 に答える 1

0

あなたには多くの質問があり、それらはあなたの文脈に大きく依存し、それはあなたに暗示されていますが、私たちには暗示されていないため、答えるのは難しいです。また、あなたは前もって心配しすぎて、すべきでないときに「もしも」と考えすぎていると思います。

ただし、一般的なアドバイスとして、SRPに従い、各責任を独自のクラスに配置して、パーサーを個別のクラスとして持つことが理にかなっているようにする必要があります。これを別のクラスに含めると、そこからパーサーインターフェイスを抽出し、複数の実装を作成して、パーサーの依存関係を管理できるようになります。

「もしも​​」の問題があなたに来たとき、または彼らが以前ではなく以前の経験に基づいてあなたに来ることがわかっているとき、あなたは心配する必要があります。

于 2013-02-27T12:27:31.570 に答える