如何使用ExpandoObjects来替换列出的增量组合类?

时间:2014-11-10 18:03:51

标签: c# expandoobject expando

我不认为在这种意义上可以使用设计模式。 案例场景是具有一个基础对象,该对象具有这些属性,并且始终定义相应的getter / setter:(id,name,content)。除此之外,还有对象具有可选属性和相应的getter / setter(注释,作者,已删除)。 我希望这些对象能够为API提供我所需要的确切属性/方法,而不是更少。

一种方法是将所有内容放在一个具有大量状态的类中

class Article {
    int id;
    int name;
    String content;
    List<Comment> comments;
    Author author;
    bool deleted;

    //getters and setters omitted 
}

另一个是拥有多个类,但这会导致类名称膨胀

class Article {
    int id;
    int name;
    String content;
    //getters and setters omitted 
}


class DeletedArticle : Article {
    bool deleted = true;
    //getters and setters omitted 
}


class ArticleWithAuthor : Article {
    Author author;
    //getters and setters omitted 
}


 class ArticleWithComments : Article {
    List<Comment> comments;
    //getters and setters omitted 
}


 class DeletedArticleWithAuthor : Article {
    bool deleted = true;
    Author author;
    //getters and setters omitted 
 }

 class DeletedArticleWithComments : Article {
    bool deleted = true;
    List<Comment> comments;
    //getters and setters omitted 
 }

 class DeletedArticleWithAuthorAndComments : Article {
    bool deleted = true;
    Author author;
    List<Comment> comments;
    //getters and setters omitted 
 }

 //AND SO ON... 

由于总是具有(id,name,content)和三个可选变量的Class的所有可能配置都是2 ^ 3,我想知道是否有办法用设计模式(希望没有Reflection)。请记住,我知道我可以使用更轻松的类型语言或只使用JSON / XML,但这不是重点:P。另外,我不熟悉部分类(来自C#),如果它完全相关的话。

正如我所指出的那样,ExpandoObjects可能就是这样。您能否提供一些示例代码来表示ArticleWithCommentsDeletedArticleWithAuthorAndComments,以便将这些代码定义为单独的类?

由于

0 个答案:

没有答案