2012-09-24 6 views
2

모든 응용 프로그램에는 구성 가능한 일부 설정이 포함되어 있습니다. 응용 프로그램의MVVM 아키텍처의 App.Config

  1. 표시 :이 설정은 더 많거나 적은 두 가지 범주로 넣을 수 있습니다 이러한 설정은 비즈니스 로직에 의해 사용되는 예는 윈도우 위치, 윈도우 크기, 전망 등
  2. 비즈니스 규칙에 대한 기본 옵션이 될 수 있습니다 .

구현 한 아키텍처에서 View에는 자체 프로젝트 (WPF)가 있고 ViewModel에는 자체 프로젝트 (클래스 라이브러리)가 있습니다. lofical 관점에서 View는 뷰 관련 설정을로드/저장해야하며 ViewModel은 비즈니스 설정을로드/저장해야합니다.

보기 설정은 취급하기 쉽습니다. 설정 (app.config)에서 필요한 속성을 만들고 쉽게로드 할 수 있습니다.

그러나 ViewModel은 View 프로젝트에서 사용할 수있는 기본 제공 메커니즘을 통해 app.config 설정에 액세스 할 수 없습니다.

처음 생각한 점은 ViewModel에서 app.config의 설정을 읽고 쓸 수있는 도우미 메서드를 만드는 것이 었습니다. 당신의 의견 것입니다? 내가 여기에 내용을 복잡하게 만들지 않습니까? 아니면 응용 프로그램 설정을 처리 할 수있는 방식입니까?

답변

1

여기에는 세 가지 방법이 있습니다.

  1. 는 System.Configuration.dll에 대한 참조를 추가하고 뷰 모델 프로젝트는 일반적으로 ConfigurationManager를 사용합니다.
  2. 는 뷰 모델 프로젝트는 생성자 또는 종속성 반전의 다른 방법을 통해 필요한 구성 정보를 요청하고,보기 프로젝트에 전달합니다.
  3. 주 응용 프로그램 프로젝트에서 ViewModels 및 뷰를 넣고이 되세요.

개인적으로 별도의 어셈블리에 있어야하는 몇 가지 이유가없는 한 개인적으로 옵션 3을 선택합니다. 그들이 분리되어야 할 필요가 있다면, 간단하기 때문에 옵션 1을 선호 할 것입니다. 검색 및 비즈니스 설정을 저장하는 방법 또는 속성을 제공하는 인터페이스를 추가,

당신의 ViewModel 프로젝트에서 : 별도의 당신의 어셈블리를 유지하고 검증하여 ViewModels을 유지하려는 경우

0

여기, 깨끗하고 있습니다. ViewModel로이 인터페이스를 생성자의 의존성으로 받아들입니다. 당신의보기 프로젝트에서

,이 인터페이스 및 예를 들어 설정 과의 대화를 구현하는 클래스를 추가,

namespace ViewModel 
{ 
    public interface IBusinessSettingsStore 
    { 
     public string SomeSetting { get; set; } 
     public int AnotherSetting { get; set; } 
    } 

    public class SomeViewModel 
    { 
     private IBusinessSettingsStore _businessSettings; 

     public SomeViewModel(IBusinessSettingsStore businessSettings) 
     { 
      _businessSettings = businessSettings; 
     } 

     private void DoSomething() 
     { 
      Console.WriteLine(_businessSettings.SomeSetting); 
      _businessSettings.AnotherSetting = 10; 
     } 
    } 
} 

namespace View 
{ 
    public class BusinessSettingsStore : IBusinessSettingsStore 
    { 
     public string SomeSetting 
     { 
      get => Settings.Default.SomeSetting; 
      set => Settings.Default.SomeSetting = value; 
     } 

     public int AnotherSetting 
     { 
      get => Settings.Default.AnotherSetting; 
      set => Settings.Default.AnotherSetting = value; 
     } 
    } 
} 
0

것은 내가이 라이브러리에 매우 감동했습니다 https://www.nuget.org/packages/UserSettingsApplied/. 기본적으로 사용자의 로밍 앱 구성에 원하는 모든 것을 직렬화 할 수 있습니다. 잘 생각하고 잘 테스트 한 것 같습니다. 이렇게하면보기 모델이 app.config의 설정을 쉽게 유지할 수 있습니다.

참고 View 프로젝트에서 View Model을 참조하는 것이 좋습니다.그것보다 훨씬 더 필수적이므로보기는보기 모델 계층을 통해 모든 지속성을 수행 할 수 있습니다.