Вопрос разработки API - PullRequest
       29

Вопрос разработки API

4 голосов
/ 02 сентября 2011

при разработке моего API я думаю о том, как бы я хотел смоделировать следующее поведение.

вариант 1 кажется более логичным, но вместе с этим приходит применение инвариантов, таких как проверка, действительно ли электронная таблица принадлежит книге.

вариант 2 кажется странным, электронная таблица знает, как удалить себя, но на самом деле электронная таблица имеет ссылку на свою родительскую рабочую книгу и может делегировать вызов непосредственно ему.

или это действительно недопустимый случай, поскольку рабочая книга должна была бы проверить ее электронную таблицу, несмотря ни на что ?? мысли?

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

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

// option 2:
ss.RemoveFromWorkbook();

Спасибо всем

Ответы [ 6 ]

9 голосов
/ 02 сентября 2011

Я бы использовал wb.Sheets.Remove (ss).Это позволяет разделить обязанности, так как объект Sheets является коллекцией электронных таблиц.Позже это также позволяет понять, что лист может находиться в нескольких рабочих книгах.

1 голос
/ 02 сентября 2011

Я бы лично остановился на option 1, так как рабочая тетрадь - это то, что содержит рабочие листы, поэтому это своего рода контейнер. Таким образом, чтобы удалить лист из него, логично и более естественно ИМХО использовать объект книги.

1 голос
/ 02 сентября 2011

Я бы пошел с Вариантом 1. Думайте о Рабочей книге как о коллекции или перечисляемой.Как и в случае с любой коллекцией, частью рабочей книги является управление элементами внутри нее.Добавление и удаление листов из рабочей книги является обязанностью рабочей книги, а не листов.

1 голос
/ 02 сентября 2011

Я думаю, вариант 1 лучше использовать, потому что каждый раз, когда вам нужно удалить какую-либо дочернюю сущность из некоторого контейнера, в первую очередь вы будете ссылаться на контейнер, и только потом вы будете искать некоторых членов. в самой сущности.

0 голосов
/ 02 сентября 2011

Вариант 1:

Лист не должен знать о книге вообще, вам нужно искать «разделение»!.

0 голосов
/ 02 сентября 2011

Определенно 1 для меня.

У вас есть wb.CreateSpreadsheet, поэтому, если бы я уже использовал это, я бы определенно искал функцию удаления в объекте wb.

...