Первое, что вы должны понять, это то, что «I» в именах не относится к местоимению «I», а скорее соответствует стандарту именования, согласно которому интерфейсы начинаются с заглавной буквы «I».
В этом смысле интерфейсы на самом деле называются «HasContent», «HasValue» и т. Д., Поэтому не изменяйте их на «HaveContent» и «HaveValue», поскольку это было бы так же неудобно.
С учетом сказанного я не могу точно понять, для чего используются эти интерфейсы.Интерфейс (по определению) предназначен для навязывания условия всем классам, которые его реализуют, и я не уверен, что эти интерфейсы обеспечивают - все классы имеют функцию с именем HasContent()
?
Iподумайте, что вместо этого вам следует сосредоточиться на интерфейсах, имеющих отношение is a
.Когда вы объявляете класс, который реализует интерфейс IList
, вы не подразумеваете, что ваш класс имеет список, а скорее, что ваш класс является списком .
Так, например, один из них IHasGeometry
... ну, это дает мне возможность проверить, имеет ли он геометрию, но я бы реально хотел иметь дело только с фигурами, которые являются геометрическими фигурами,поэтому я бы вместо этого создал интерфейс с именем IGeometricFigure
, ограничив его использование всем, что работает с геометрическими фигурами.
Я согласен, что названия звучат неловко, но я думаю, что это больше, потому что эти интерфейсы используютсяв неловких целях, а не потому, что они неправильно названы.