Как ViewModels and Services общаться в приложении Javafx + Spring Boot MVVM?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как ViewModels and Services общаться в приложении Javafx + Spring Boot MVVM?

Сообщение Anonymous »

контекст:
Я создаю приложение Javafx + Spring Boot с использованием шаблона MVVM:
  • Просмотры поддерживаются контроллерами. /> < /li>
    Услуги обрабатывают бизнес -логику. < /p>
    < /li>
    < /ul>
    Я хочу поддерживать разделение проблем и сохранять связь между ViewModels и службами модульных и тестируемых. SharedLoginViewModel, который управляет состоянием рабочего процесса (например: переключение между различными формами входа в систему или шагами создания токенов). < /P>
    В одно и то же время, токно, обрабатывает логику для создания токенов (например, валидация формы, подчиняющаяся токен). SharedLoginViewModel для продвижения рабочего процесса (например, после успешного создания токена). TokenCreationViewModel. < /P>
    Попытки подходов: < /p>
    1. Прямая ссылка
    Pros: простой, простой для отслеживания.
    минусы: вызывает жесткую связь и круглые зависимости, когда несколько видовых моделей должны общаться.
    2. Весенние события < /strong> < /p>
    Pros: Декулируют компоненты, позволяют гибко общаться. Прямая, нисходящая цепочка связи.
    В MVVM я предпочитаю четкий путь (контроллер → ViewModel → Service), который легко проследить и отладить.
    Spring Events хорошо работают для проблем с бэкэнд (например, аудит), но чувствуйте себя как излишние для UI-связанных рабочих процессов. Пользовательский интерфейс (текущее решение)

    Я представил интерфейс loginnavigationservice, чтобы отделить логику навигации от общей видоизоля. /> Определите интерфейс: < /p>

    Код: Выделить всё

     public interface LoginNavigationService {
    void advanceStep();
    void cancel();
    }
    < /code>
    < /li>
      Реализовать интерфейс в SharedloginViewModel < /p>
    @Component
    public class SharedLoginViewModel implements LoginNavigationService {
    // Existing workflow logic...
    
    @Override
    public void advanceStep() {
    advanceLoginStep();  // Internal method to move workflow forward
    }
    
    @Override
    public void cancel() {
    cancelWorkflow();  // Internal method to reset workflow
    }
    }
    < /code>
    < /li>
      Внедрить интерфейс (не полный sharedloginviewmodel) в TokenCreationViewModel < /p>
     @Component
    public class TokenCreationViewModel {
    private final LoginNavigationService navigationService;
    
    @Autowired
    public TokenCreationViewModel(LoginNavigationService navigationService) {
    this.navigationService = navigationService;
    }
    
    public void onTokenCreated() {
    // After token creation logic...
    navigationService.advanceStep();  // Decoupled navigation call
    }
    }
    

    Альтернативное рассмотрение: слушатель против интерфейса
    Я также рассматривал использование слушателей между ViewModels, например:

    Код: Выделить всё

    tokenCreationViewModel.setOnTokenCreated(() -> sharedLoginViewModel.advanceStep());
    
    Почему я избегал этого
  • Создает жесткую связь между ViewModels. /> почему интерфейс чувствовал себя чище < /strong> < /p>

    Входной ряд, связанный с навигацией, связанный с навигацией. Логика.

Вопрос

Это подход, основанный на интерфейсе, хорошая практика?>

Подробнее здесь: https://stackoverflow.com/questions/795 ... ot-mvvm-ap
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»