2013-10-01 10 views
1

У меня есть класс Java с методом весьма взаимосвязанной в моем приложении API, что-то вроде этого:Как добавить новый параметр к высокосвязному методу?

public class ProductModel { 
    public static Product createProduct(ProductType productType, String comment) { 
     return createProduct(productType, comment, null); 
    } 

    public static Product createProduct(ProductType productType, String comment, Long sessionTrackingId) { 
     // Here now need sessionTrackingId Long 
     // But this method is never called 
     .... 
    } 
} 

Первый метод вызывается во многих классах и в моем API проекта (бизнес) и в моем приложении проекта (внешний интерфейс). Второй метод просто вызывается в том же классе ProductModel, но теперь мне нужно сделать своего рода рефакторинг для использования этого второго метода, передав sessionTrackingId, который я получаю из проекта приложения (frontend).

API - это еще один проект, используемый как библиотека Java .jar, и мне нужно передать этот параметр во второй метод.

Как я могу это сделать? Может быть, добавить новый абстрактный класс к интерфейсу в каждом вызове первого метода?

ответ

0

В связи с тем, что этот метод весьма взаимосвязанной, я решил эту проблему с помощью одноэлементный шаблона и настройка этого значения, когда сеанс начинается и просто использовать его в методе вызовов:

public class ProductModel { 
    public static Product createProduct(ProductType productType, String comment) { 
     return createProduct(productType, comment, Application.getSessionTrackingId()); 
    } 

    public static Product createProduct(ProductType productType, String comment, Long sessionTrackingId) { 
     // Here now need sessionTrackingId Long 
     // But this method is never called 
     .... 
    } 
} 
1

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

0

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

Я в основном согласен с Карлом. Вы добавили бы сигнатуры методов, не применяя неподдерживаемые параметры. Пожалуйста, поймите, что «inlining» не является ответственностью разработчика на Java, он остается для JVM.

Смежные вопросы