そういう意味ではデザインパターンは使えないと思います。ケース シナリオでは、これらのプロパティと対応する 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
ありがとう