Что такое префикс `I` перед именем класса, например, IController, IObserver?
Я изучаю скороговорку MVP. В некоторых примерах я видел это! Кто-нибудь может продемонстрировать, почему программисты используют это соглашение об именах?
3 ответа
Обычно я там, чтобы указать интерфейс. Без Я это класс. Лично я не фанат этого. Я думаю, что это чаще встречается в точечной сети. Я не видел это слишком много в Java
Причины, по которым я не люблю:
- В средах разработки теперь отображаются значки, указывающие, является ли класс интерфейсом или нет.
- Если я хочу изменить интерфейс на абстрактный класс, я должен переименовать класс
- Это вредит читабельности.
"Я" обозначает интерфейс. Это общее соглашение об именах, чтобы отличать интерфейсы от классов / структур.
Интерфейсы не являются классами - они определяют поведение, а классы обеспечивают реализацию.
Прочитайте эту статью на MSDN для получения дополнительной информации: Выбор между классами и интерфейсами
Интерфейс определяет сигнатуры для набора членов, которые должны предоставлять разработчики. Интерфейсы не могут предоставить детали реализации для участников. Например, интерфейс ICollection определяет члены, связанные с работой с коллекциями. Каждый класс, который реализует интерфейс, должен предоставить детали реализации для членов этих тезисов. Классы могут реализовывать несколько интерфейсов.
Это артефакт того времени, когда венгерская нотация считалась хорошей идеей. Это позволяет пользователю знать, что имя для интерфейса.
Кроме того, это чрезвычайно глупая практика.
Имя интерфейса должно отражать тип контракта между классами. Он не должен сказать вам, к какому классу он был привязан.
Так должно быть class PDF extends Document implements Printable
потому что это позволяет вам знать, что класс реализует print()
метод по какой-то причине (в реальном мире это будет на самом деле плохой дизайн API, но это пример) вместо class PDF extends Document implements IDocument
.. потому что это ничего вам не скажет.