Необязательные методы в интерфейсе - PullRequest
2 голосов
/ 29 марта 2011

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

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

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

Какая лучшая практика здесь, друзья?

Ответы [ 3 ]

4 голосов
/ 29 марта 2011

Вы можете добавить новый интерфейс (т. Е. INewInterface), реализующий старый (т. Е. IOldInterface). Затем Ane реализует INewInterface для класса / структуры.

public interface IOldInterface {
    object DoSomething( int number );
}
...
public interface INewInterface : IOldInterface {
    object DoSomething( int number, TimeSpan time );
}
...
public class MyClass : IOldInterface, INewInterface {
    public object DoSomething( int number ) { ... }
    public object DoSomething( int number, TimeSpan time ) { ... }
}
3 голосов
/ 29 марта 2011

Я бы старался избегать создания методов, которые действительно не "вписываются" во все разумные реализации. Пара вариантов:

  • Рассмотрим инкапсуляцию параметров в отдельный тип; что делает их более гибкими
  • Подумайте о расширении существующего интерфейса с помощью нового интерфейса и внедрите его только в нужное приложение.

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

1 голос
/ 29 марта 2011

Если вы контролируете весь код, может быть разумно и просто изменить интерфейс.

Однако это изменение может привести к дополнительным затратам, превышающим только начальное время кодирования.

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

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