인프런 커뮤니티 질문&답변

jlim님의 프로필 이미지
jlim

작성한 질문수

[C#/.NET 7.0]어서와, WPF는 처음이지?

다음 수업에서 "DB Restore Failed" 발생하면 클릭해주세요!

Business logic 처리 (코드 비하인드 관련)

해결된 질문

작성

·

309

·

수정됨

1

business logic은 code behind가 아닌 viewmodel 클래스에서 만드는 거 아닌가요? DashboardPage.xaml.cs에서 버튼 처리하는 거 보고 질문드립니다.

View의 code behind에서 business logic 처리가 mvvm에서 위배되는게 아닌건지? 혹은 대규모 프로젝트로 이어진다면 유지보수에서 문제의 소지가 되는게 아닌건지 궁금합니다.

 

답변 2

1

jlim님의 프로필 이미지
jlim
질문자

우선 좋은 강의 제공해주셔서 감사드립니다.

Data Binding 강의 16:22 에서 뷰 로직은 behind에서 한다는 이야기가 있었고 view code behind에서 버튼에 대한 배경색처리하는 걸보고 질문드렸습니다.

 

그런데 보아하니 뷰로직과 비즈니스 로직은 다른 개념인가 보군요.? (뷰로직으로 언급하셨는데 저는 뷰로직을 비즈니스 로직으로 받아들인 것 같네요 ㅎㅎ)

보통 MVVM 관련 인터넷 글들 보면 버튼 컨트롤 처리 시 강의에서 해주셨던 Command를 이용해 ViewModel에서만 처리하는 것들만 보았고 CodeBehind에서는 무엇도 하지 않더군요. 그래서 버튼 배경색 처리도 business logic에 포함되어서 viewmodel에서만 처리하고 behind 코드는 어느 경우든 가급적 사용안하는 걸로 인지하고 있었습니다.

 

++) xaml 그 자체가 뷰로직이고, xaml 내에 있는 객체들을 활용하는 것이 viewmodel(비즈니스 로직)에만 국한되서 진행하는 줄 알았습니다.

 

 

RAZOR님의 프로필 이미지
RAZOR
지식공유자

안녕하세요 jlim님! 좋은 아침이네요!

코드비하인드이 가급적 작성하지 말아야하는건 비즈니스 로직에 국한됩니다 ㅎㅎ 그말인즉슨 UI 처리 관련된 로직만 작성하면 됩니다 ㅎㅎ 그러면 UI 로직 처리(코드 비하인드) 비즈니스 로직처리(뷰 모델) 나눠니지 유지보수도 더 쉬워지겠죠 ㅎㅎ! 공부 열심히 하셨네요! 남은 강의 화이팅하시고 이번 한 주도 잘 보내세요 :)

jlim님의 프로필 이미지
jlim
질문자

선생님 제가 잘 못들은게 아닌 것 같습니다. 물론 완강을 하고 답을 받아서 code behind에서 UI로직을 짠다는 걸 알고 있지만,

WPF..? 너 뭔데? (WPF소개, vs. Winfrom, MVVM Pattern) 강좌

3:53~4:06 Code-behind 설명부분에서 비즈니스로직을 짠다고 언급을 해주셨네요..

초기답변에 자세한 강의명 + 시간대 알려달라해서 참고하시라 알려드립니다. ㅎㅎ

 

1

RAZOR님의 프로필 이미지
RAZOR
지식공유자

안녕하세요 jlim님! 주말 늦은 시간까지 열공..하시네요!!

말씀 해주신 대로 로직은 View Model에서 처리하는게 맞습니다. 저도 질문 듣고 내가 그랬나..? 하고 헐레벌떡 왔는데요..! 말씀 주신 DashboardPage.xaml.cs 에는 아래 코드밖에 없는 것으로 확인 됩니다..!

 

// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT.
// Copyright (C) Leszek Pomianowski and WPF UI Contributors.
// All Rights Reserved.

using UiDesktopAppMaster.ViewModels.Pages;
using Wpf.Ui.Controls;
using System.Windows.Media;

namespace UiDesktopAppMaster.Views.Pages
{
    public partial class DashboardPage : INavigableView<DashboardViewModel>
    {
        public DashboardViewModel ViewModel { get; }

        public DashboardPage(DashboardViewModel viewModel)
        {
            ViewModel = viewModel;
            DataContext = this;

            ViewModel.PropertyChanged += ViewModel_PropertyChanged;
            InitializeComponent();
        }

        private void ViewModel_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
                case "AdministrativeAgency":
                    this.loadingGrid.Visibility = Visibility.Collapsed;
                    this.dashboardGrid.Visibility = Visibility.Visible;
                    break;
            }
        }
    }
}

 

코드 비하인드에서는 UI Logic만 처리하는 코드만 들어있는게 베스트입니다. 위 처럼 Visibility 컨트롤 정도만 들어가 있습니다..! 이 강의를 몇달 전에 찍었어서.. 제가 강의할 때 잠깐 그런 내용이 들어갔었을까요..? 최종 코드에서는 위와 같이 확인됩니다 ㅠ____ㅠ 자세한 강의 명 + 시간대 말씀 주시면 재확인 후에 답변 드리겠습니다! 감사합니다 :)

jlim님의 프로필 이미지
jlim

작성한 질문수

질문하기