Я должен разделить Список на подклассы <T> или иметь его как свойство?

jsonD = json.dumps(htmlContent.text) преобразует необработанный HTML-контент в строковое представление JSON. jsonL = json.loads(jsonD) анализирует строку JSON обратно в обычный объект string / unicode. Это приводит к неработоспособности, поскольку любое побег, сделанное в dumps(), отменяется в loads(). jsonL содержит те же данные, что и htmlContent.text.

15
задан André Chalella 20 October 2008 в 06:46
поделиться

8 ответов

Вопреки большинству ответов здесь я не разделил бы на подклассы из Списка в большинстве случаев. Я нашел, что наследование от класса до функциональности повторного использования обычно вызывает проблемы позже.

У меня обычно просто есть свойство списка типов (или IList), который возвращает ссылку на список. Обычно Вам только нужно получить свойство здесь. Можно управлять доступом к списку путем желания возвратить версию только для чтения списка с.AsReadOnly () или просто представления списка как IEnumerable.

В случаях, где я хочу, чтобы Тесты были списком, я обычно реализую IList и называю внутреннее поле List для фактической реализации IList. Это - немного больше работы и приводит еще к некоторому коду для поддержания, но я нашел, что это лучше удобный в сопровождении, чем наследовавшийся Список просто, поскольку это - реализация.

12
ответ дан 1 December 2019 в 03:25
поделиться

Подкласс из Списка <T>. Если у Вас есть Список, универсальный как свойство, он также не инкапсулируется как подкласс.

Если это похоже на Список <T>, и это походит на Список <T>, это, вероятно - Список <T>.

Я назвал бы это TestCollection.

6
ответ дан 1 December 2019 в 03:25
поделиться

Если это буквально делает все a List сделал бы, и весь List функции действовали бы на Tests объект интуитивным способом, который дает корректный результат, затем по-моему, он должен просто разделить на подклассы List<Test>.

Иначе у Вас просто будет класс с тонной методов, которые просто обращаются к методу того же имени List<Test> переменная в экземпляре. Это просто будет несовершенным расширением List<Test> сам класс.

1
ответ дан 1 December 2019 в 03:25
поделиться

Наследование обычно отображается на, "-" отношения. Так как Ваш контейнер является списком, но с некоторыми другими вещами, я наследовался бы Списку и добавил бы Ваши дополнительные свойства к Вашему подклассу.

1
ответ дан 1 December 2019 в 03:25
поделиться

Я не думаю, что Вы имеете, простой "список тестов", потому что Вам было нужно что-то больше. Я предложил бы, чтобы Вы назвали его TestSuite и составьте Список как свойство. Имеет - намного легче поддержать по сравнению с наследованием.

В целом я очень старался бы наследовать что-то как a List.

1
ответ дан 1 December 2019 в 03:25
поделиться

При чтении ответов кажется, что ключевой вопрос, к какой длине Ваш объект является действительно списком? Таким образом, возможно, хороший компромисс между опасностями наследования и отсутствием прозрачности состава состоял бы в том, чтобы иметь a List<Test> как частный бэкенд и выставить только методы, которые использовались бы.

1
ответ дан 1 December 2019 в 03:25
поделиться

"Состав пользы по наследованию" всегда является хорошим эмпирическим правилом. Методы, которые используют этот класс с помощью всех методов Списка, а также те Вы добавляете, или только те Вы добавляете?

0
ответ дан 1 December 2019 в 03:25
поделиться

В Вашем примере Вы сказали, что "Тесты класса содержат много Тестовых объектов", не "Тесты класса набор Тестовых объектов". IMO не необходимо разделить Список на подклассы в этом сценарии, если у Вас не должно быть подобного Списку интерфейса для этого класса.

Однако ответ действительно зависит от контекста Тестового класса. Если это ведет себя как Список и будет использоваться в контекстах, где Список объектов ожидается, наследуйтесь Списку.

Обратите внимание, что наследование более трудно поддержать, чем состав.

Кроме того, я переименовал бы Тесты к TestCollection (если бы Вы разделяете Список на подклассы), или что-то как TestUnit (если он содержал бы список Тестовых классов.

0
ответ дан 1 December 2019 в 03:25
поделиться