Абстрактные типы и интерфейсы
Абстрактные типы и интерфейсы являются механизмами для описания программных абстракций. Абстракция описывает контракт, которого должны придерживаться производные классы и реализации класса. Для абстрактных типов имеется возможность предоставления деталей реализации; интерфейсы не могут предоставлять детали реализации.
Не предоставляйте абстракции для использования, пока не проверите их путем разработки нескольких конкретных реализаций и API, которые используют эту абстракцию.
Если вы предоставите абстракции, не проверив их в сценариях реального окружения, существует большая вероятность пропуска ошибок проектирования, которые сложно или невозможно исправить без решения проблем совместимости в будущих версиях.
При проектировании абстракции тщательно выбирайте между абстрактным классом и интерфейсом.
Подробные рекомендации относительно выбора между абстрактным типом и интерфейсом см. Выбор между классами и интерфейсами.
Продумайте тесты конкретных реализаций абстракций. Такие тесты позволят пользователям проверить правильность своих реализаций.
Кроме того, эти тесты позволят вам самостоятельно проверить правильность реализации интерфейса. Например, тест для ICollection<T> поможет проверить, что после двух вызовов метода Add в случае реализации интерфейса, значение свойства Count увеличивается на два.
Охраняется авторским правом Copyright 2005 Microsoft Corporation. Все права защищены.
Фрагменты — © Addison-Wesley Corporation. Все права защищены.
Для дополнительной информации о разработке руководящих принципов, смотрите "руководства по разработке рамок: Конвенций, идиомы и шаблоны для повторного использования.NET библиотек"книга, Кшиштоф Cwalina и Брэд Абрамс, опубликованных Addison-Wesley, 2005 года.