Интерфейсы в файлах классов - PullRequest
1 голос
/ 07 января 2009

Должен ли мой интерфейс и конкретная реализация этого интерфейса быть разбиты на два отдельных файла?

Ответы [ 7 ]

10 голосов
/ 07 января 2009

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

3 голосов
/ 07 января 2009

Если есть только одна реализация: почему интерфейс?

Если существует более одной реализации: куда вы помещаете другие?

1 голос
/ 07 января 2009

Если под разными файлами вы подразумеваете разные файлы xxx.cs в вашей сборке, то, как правило, из-за моих собственных приемов я бы сказал, что да, но это соответствует домашним стандартам, которые вы используете. Если вы просто программируете для себя, то я бы сказал, что это хорошая практика кодирования, она содержит все в чистоте и легко читается. Чем меньше блоков кода в любом конкретном файле, тем легче что-то следовать (в пределах разумного), очевидно, вы можете начать входить в частичные классы, где вещи могут начать становиться смешными, если вы не сохраните власть над ним.

Как правило, я храню свои проекты в структуре логической папки, где части проекта могут быть распределены в папки DAL или BM, и в них у меня может быть несколько папок с логическим именем, каждая из которых содержит несколько файлов: одна интерфейс, одна реализация и любые вспомогательные классы, специфичные для них.

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

0 голосов
/ 07 января 2009

Да, даже если кто-то дает встречные аргументы, например, есть только одна реализация, или он / она предвидит, что долгое время будет только одна реализация, или он / она является единственным пользователем / разработчиком и т. Д. Если существует несколько реализации, несколько пользователей и т. д., тогда очевидно, что вы захотите хранить их в отдельных файлах. Так почему же следует относиться к этому по-разному только в случае одной реализации?

0 голосов
/ 07 января 2009

Общее правило, да. Интерфейс означает, что он может быть реализован другими классами, он более чистый и простой в управлении, когда они явно находятся в отдельных файлах.

Более того, в зависимости от уровня разделения и изоляции вашего приложения, вы даже можете разместить свои интерфейсы в своем собственном проекте . Тогда потребляющие проекты будут ссылаться на проект интерфейса, а не на каждую сборку, которая содержит реализации этого интерфейса.

0 голосов
/ 07 января 2009

Да, для классов они называются partial class, посмотрите текст ссылки

0 голосов
/ 07 января 2009

Отдельные файлы ... FTW! Возможно, вы даже захотите создать отдельные проекты / сборки в зависимости от того, насколько расширяемый ваш код. По крайней мере, оно должно быть в отдельном пространстве имен.

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

Но, как отмечает @balabaster, все зависит от практики вашей команды (хотя это не всегда "лучшие практики").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...