Особенности реализации базового класса - PullRequest
0 голосов
/ 17 декабря 2010

Я написал класс, чтобы сделать что-то, и через некоторое время я обнаружил, что многие другие классы разделяют функциональность, поэтому решил реализовать базовый класс (абстрактный в C #) и поместить в него все разделяемые.

Так какневозможно создать экземпляр такого класса, тогда как его отладить?

Есть ли практические соображения по разработке базовых классов?

Ответы [ 8 ]

1 голос
/ 17 декабря 2010

Отладка абстрактного класса

Ничто не мешает вам отладить абстрактный класс, при отладке ваших дочерних классов отладчик автоматически перенаправит вас к реализации родительского класса, как требуется.

Проектирование иерархий классов

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

Наследование - не единственный способ обеспечить повторное использование в OO.

Несколько рекомендаций, которые могут помочь:

  • Создатьубедитесь, что ваши базовые классы несут явную ответственность
  • Сохраняйте низкую глубину наследования.
  • Склонитесь к композиции по сравнению с наследованием.(Использование interfaces может быть хорошим выбором)
1 голос
/ 17 декабря 2010

Если вам нужно проверить это, вы можете сделать одну из двух вещей:

1) У вас могут быть базовые классы, которые не являются абстрактными, поэтому базовый класс может быть создан и, следовательно, протестирован.

2) В вашем тестовом проекте вы можете сделать макет обертки вокруг базы и протестировать макет.

1 голос
/ 17 декабря 2010

Поскольку создание такого класса невозможно, то как его отладить?

Если вы спрашиваете, как на самом деле протестировать его тогда (т. Е. Unit Test), я обычно пишупроверить класс, который наследуется от базового класса, и протестировать его таким образом.Если вы спрашиваете о фактической отладке, то она ничем не отличается от любого другого класса, если вы создали его с дочерним классом в работающем приложении.Имеет ли это смысл?

Есть ли какие-либо практические соображения по поводу развития базовых классов?

За эти годы я слышал об этом две школы: 1)что-нибудь общее, помещенное в базовый класс и 2) Не создавайте базовый класс, если он не является истинным наследством.Я склонен проектировать / кодировать первый, но у # 2 есть свои преимущества в том, что он может сделать счетчик дизайна интуитивно понятным до некоторой степени.Просто мои $ 0,02 ...

0 голосов
/ 17 декабря 2010

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

0 голосов
/ 17 декабря 2010

Вы можете создать производную версию в сборке своего тестового устройства (я полагаю, что вы тестируете базовый модуль, следовательно, необходимо создать его экземпляр индивидуально) только для целей тестирования функциональности базового класса.Производная версия предоставит любую дополнительную инфраструктуру, необходимую для тестирования базы.Вы можете решить создать несколько производных версий для проверки различных аспектов абстрактной базы.

0 голосов
/ 17 декабря 2010

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

0 голосов
/ 17 декабря 2010

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

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

0 голосов
/ 17 декабря 2010

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

Держите его под рукой, чтобы запускать свои юнит-тесты, если только вы не используете что-то вроде Rhino Mocks (мой любимый фреймворк для насмешек).

...