4

API を設計しているときに、次の動作をどのようにモデル化するかを考えています。

オプション 1 はより論理的に見えますが、スプレッドシートが実際にワークブックに属しているかどうかを確認するなどの不変条件を適用する必要があります。

オプション 2 は奇妙に思えますが、スプレッドシートは自分自身を削除する方法を知っていますが、実際には、スプレッドシートには親ワークブックへの参照があり、呼び出しを直接彼に委任できます。

それとも、ワークブックは何があってもスプレッドシートを検証する必要があるため、これは本当に有効なケースではありませんか?? 考え?

Workbook wb = new Workbook("Finances");
Spreadsheet ss = wb.CreateSpreadsheet("Bob's");

// option 1:
wb.RemoveSheet(ss);

// option 2:
ss.RemoveFromWorkbook();

みんなありがとう

4

6 に答える 6

9

wb.Sheets.Remove(ss)を使用します。Sheetsオブジェクトはスプレッドシートのコレクションであるため、これにより責任の分離が可能になります。これにより、後でシートが複数のワークブックに含まれる可能性があるという概念も可能になります。

于 2011-09-02T18:23:41.223 に答える
1

オプション1を使用する方が良いと思います。なぜなら、あるコンテナから子エンティティを削除する必要があるときはいつでも、最初にコンテナを参照してから、エンティティ自体の一部のメンバーを検索するからです。

于 2011-09-02T18:24:28.493 に答える
1

オプション1を使用します。ワークブックをコレクションまたは列挙可能なものと考えてください。他のコレクションと同様に、ワークブックの仕事の一部は、その中のアイテムを管理することです。ブックの追加と削除は、シートではなく、ブックの責任です。

于 2011-09-02T18:24:55.413 に答える
1

option 1ワークブックはワークシートを含むものであり、ある種のコンテナであるため、個人的には. したがって、そこからワークシートを削除するには、 workbook オブジェクトを使用する方が論理的でより自然です。

于 2011-09-02T18:24:57.947 に答える
0

私にとっては間違いなく1です。

あなたはwb.CreateSpreadsheetを持っているので、私がすでにそれを使用しているのであれば、私は間違いなくwbオブジェクトのremove関数を探しています。

于 2011-09-02T18:24:18.340 に答える
0

オプション1:

シートはワークブックについてまったく知らないはずです。「デカップリング」を調べる必要があります。

于 2011-09-02T18:27:21.810 に答える