0

そういう意味ではデザインパターンは使えないと思います。ケース シナリオでは、これらのプロパティと対応する getter/setter が常に定義されている基本オブジェクトがあります: (id,name,content)。それに加えて、オプションのプロパティと対応する getter/setter (comments、author、deleted) を持つオブジェクトがあります。これらのオブジェクトが、それ以上でもそれ以下でもない正確なプロパティ/メソッドを API に提供することを望みます。

1 つのアプローチは、膨大な状態を持つ 1 つのクラスにすべてを含めることです。

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

    //getters and setters omitted 
}

もう1つは複数のクラスを持つことですが、それはクラス名の肥大化を引き起こします

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) と 3 つのオプション変数を持つクラスの可能な構成はすべて 2^3 であるため、デザイン パターン (できればリフレクションなし) でそれを行う方法があるかどうか疑問に思います。よりリラックスしたタイプの言語を使用したり、JSON/XML を使用したりできることはわかっていますが、それはポイントではありません:P. また、関連する部分クラス (C# から) についても詳しくありません。

私に指摘されたように、ExpandoObjectsがその方法である可能性があります。たとえば、これらを個別のクラスとして定義する必要がないように、ArticleWithComments表現するサンプルコードを提供していただけますか?DeletedArticleWithAuthorAndComments

ありがとう

4

0 に答える 0