将usercontent解析为存储库。哪种方法更好?

时间:2013-02-27 09:41:40

标签: c# deserialization

在阅读了许多不同的设计模式后,我对我当前的项目提出了疑问,希望有人能帮助我。

我的项目将不同的用户文件作为输入,并将它们转换为对象的存储库以便于使用。

例如:

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

现在我看到两种不同的方法将这个文件解析成对象(哪个更好?):

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) 这个approche只包含两个类(没有服务类):

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)
        }
    }
}

项目还包含一些插件,这些插件获取对存储库的引用以使用包含的对象。

哪种方法更好?可能有更好的选择吗?如果需要其他依赖关系来解析用户内容会发生什么?如果实体依赖于服务,或者在实体对象中没有依赖关系更好吗?甚至还有一个问题,UserContent类是DTO,因为它用于将用户内容解析为它并将其传递给其他插件吗?

我希望有人可以帮我解决很多问题。

此致 格里特

1 个答案:

答案 0 :(得分:0)

你确实有很多疑问,而且他们很难回答,因为他们在很大程度上取决于你的背景,这是暗示给你的,而不是暗示给你们。另外,我认为你在前期过于担心并且在你不应该做的时候想“如果”太多。

但是,作为一般建议,您应该遵循SRP并将每个责任放在它自己的类中,因此将解析器作为单独的类是有意义的。将它放在一个单独的类中将允许您从中提取 Parser 接口,并且具有多个实现并管理解析器的依赖关系(如果您已达到此目的)。

你应该担心当他们来找你或当你知道他们会根据以前的经验而不是之前来找你时会出现“假设”问题。