Что мне делать, если нужно изменить функционал библиотеки - PullRequest
0 голосов
/ 23 января 2019

У меня есть класс в библиотеке Java (open-m3u), который мне нужно немного изменить. Функциональность легко реализовать самостоятельно без использования библиотеки. Библиотека с открытым исходным кодом, поэтому у меня есть доступ ко всему ее коду. Класс сделан таким образом, что наследовать его или даже изменить эту небольшую часть невозможно. Мой вопрос заключается в том, должен ли я скопировать этот класс и все классы, от которых он зависит, и поместить их в свою собственную кодовую базу и изменить функциональность или должен реализовать ее самостоятельно. Или есть другой вариант?

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Шаблон декоратора позволяет добавлять новые функциональные возможности к существующему объекту.

Если используемая вами библиотека Java имеет какой-либо класс, подобный этому:

public class LibraryClass implement ILibraryInterface {

    public void someMethod() {
        ...
    }
}

Тогда вы можетесоздать Decorator класс:

public class LibraryClassDecorator implement ILibraryInterface {

    private LibraryClass libObj;

    public LibraryClassDecorator(LibraryClass libObj) {
        this.libObj = libObj;
    }

    public void someMethod() {
        libObj.someMethod();
        // here you can do whatever you want. 
        // Add some additional logic
        // transform result value if there is some
    }

}

Примечание: вы должны реализовать тот же интерфейс, чтобы следовать принципу замены Лискова

0 голосов
/ 23 января 2019

Функциональность легко реализовать самостоятельно без использования библиотеки.

ИМХО, тогда это путь.Другие варианты:

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

Все они имеют свои недостатки.

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

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

0 голосов
/ 23 января 2019

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

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