В настоящее время я читаю "Чистый код" Роберта Мартина (UncleBob) и вообще любит размышления о UncleBob. Тем не менее, я немного смутился, когда прочитал, что он избегает префикса таких интерфейсов, как "IPerson". Он утверждает: "Я не хочу, чтобы мои пользователи знали, что я передаю им интерфейс".
Думая о перспективах TDD/инъекции, я всегда буду очень заинтересован в том, чтобы рассказывать "пользователям" моих классов о том, что я передаю интерфейс. Основная причина заключается в том, что я рассматриваю Interfaces контракты между различными "агентами" системы. Агент, работающий с одним углом моей системы, не должен знать о конкретной реализации работы других агентов; они должны только обменивать контракты и ожидать, что контракты будут выполнены, не зная, как это сделать. Другая, но также очень важная причина заключается в том, что интерфейс можно полностью издеваться и, таким образом, сделать модульное тестирование намного проще. Есть ограничения на то, насколько вы можете издеваться над конкретным классом.
Поэтому я предпочитаю визуализировать, что я действительно передаю интерфейс... или воспринимаю интерфейс как аргумент. Но поскольку UncleBob является чемпионом в супертяжелом весе в нашем сообществе, и я всего лишь еще один пилот для настольных игр, я хотел бы знать, не хватает ли я чего-то.
Неправильно ли мне настаивать на я в интерфейсах?