source

반응성UI 실가동 준비 완료?

manysource 2023. 4. 20. 21:35

반응성UI 실가동 준비 완료?

프로덕션 코드에 Reactive UI를 사용할 수 있는지 알아보고 있습니다.몇 가지 기능은 매우 매력적이지만, 저는 이 라이브러리에 의존하는 것에 대해 고민하고 있습니다.여기에는 다음이 포함됩니다.

  1. ★★★★★★★★★★★★★★★★★★★★★★★★★★★소문자로 및 " " " 입니다.RaiseAndSetIfChanged방법은 밑줄로 시작하는 개인 멤버에 따라 달라집니다. Paul Betts)UI 작성자)는 Ruby의 배경을 가지고 있기 때문에, 거기서 이상한 이름이 유래했다고 생각합니다.그러나 Stylecop에 따른 표준 명명법이 프로젝트 전체에서 적용되기 때문에 이 문제는 저에게 큰 문제가 될 수 있습니다.강제하지 않더라도 이로 인해 발생하는 이름 짓기의 불일치가 우려됩니다.

  2. 문서/샘플이 없습니다.약간의 서류와 외로운 샘플이 있습니다.다만, 이 문서는 일련의 블로그 투고일 뿐이며, 샘플은 라이브러리의 V2(현재 V4에 게재되어 있습니다)에 근거하고 있습니다.

  3. ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★예를 들어 특정 로깅 프레임워크에 의존하지 않도록 로깅이 추상화됩니다.럴럴만만만만만만을하기 때문에 합니다.그러기 위해서는 이 시스템을IRxUIFullLogger여기에는 메트릭의 쓰레기가 포함되어 있습니다(50을 훨씬 넘습니다).하고 Reactive 하는 것이 합니다.UI 。이상한 IWantsToRegisterStuff(내부 인터페이스이기 때문에) NLog 어셈블리에 의존할 수 없는 인터페이스에는 의존할 수 없습니다.★★★★★★★★★★★★★▼

    어쨌든, 여기서 나의 관심사는 도서관의 전체적인 디자인이다.이거 물린 사람 있어요?

  4. 이미 MVVM Light를 광범위하게 사용하고 있습니다.Paul이 기술적으로는 둘 다 사용할 수 있다고 설명하는 블로그 투고를 한 것은 알고 있습니다만, 저는 유지관리성에 대해 더 관심이 있습니다.둘 다 코드 베이스에 섞이면 끔찍하게 혼란스러울 것 같아.

프로덕션에서 Reactive UI를 사용해 본 경험이 있는 사람이 있습니까?만약 그렇다면, 위의 우려 사항을 완화하거나 해결할 수 있습니까?

고객님의 우려 사항에 대해 하나씩 살펴보겠습니다.

#1. "허접한 이름 짓기와 규칙"

4.1 CallerMemberName을을 전혀 할 필요가 경우에도 ReactiveUI 4.1+ CallerMemberName을 통해 규칙을 수 ).RxApp.GetFieldNameForPropertyFunc 을 다음과 같이

int iCanNameThisWhateverIWant;
public int SomeProperty {
    get { return iCanNameThisWhateverIWant; }
    set { this.RaiseAndSetIfChanged(ref iCanNameThisWhateverIWant, value); }
}

#2. 문서/샘플의 부족

이것은 합법적이지만, 여기 더 많은 문서/샘플이 있습니다.

#3. "매우 단순한 인터페이스를 정의하고 Reactive 내에서 확장 방식을 제공하는 것이 훨씬 더 나은 접근 방식이라고 생각합니다.UI를 통해 필요한 모든 과부하를 지원합니다."

IRxUILogger 두 있다 (Resactive 2 가가가가가 2 가가가 가 instead instead instead instead instead instead instead instead instead instead instead instead instead instead 。UI를 사용하다 IRxUIFullLogger필요한 경우에만 있습니다.

게다가 이상한 IWantsToRegisterStuff 인터페이스도 있어요.

이 점에 대해서는 알 필요가 없습니다.:) 이것은 사후 대응적인 대처만을 위한 것입니다.UI가 자동으로 초기화되어 보일러 플레이트 코드가 필요 없습니다.

  1. "둘이 하나의 코드 베이스에 섞여 있는 것은 끔찍하게 혼란스러울 것이라고 생각합니다."

사실 그렇지 않아요.'슈퍼파워를 탑재한 MVVM 라이트'라고 생각하면 됩니다.

Reactive를 사용한 적이 있는 사용자로 답변합니다.일부 실가동 시스템의 UI는 RxUI의 작업 방식에 문제가 있으며, 지금까지 발생한 문제를 수정하기 위한 패치를 제출했습니다.

면책사항:RxUI의 모든 기능을 사용하는 것은 아닙니다.그 이유는 이러한 기능의 구현 방식에 동의하지 않기 때문입니다.변경 사항은 가면서 자세히 설명하겠습니다.

  1. 이름 짓기. 나도 이상하다고 생각했어이것은 결국 제가 잘 사용하지 않는 기능 중 하나가 되었습니다.Property Changed를 사용합니다.AOP를 사용하여 변경 알림에 삽입하는 포디.결과적으로 내 속성은 자동 속성처럼 보입니다.

  2. 도코 네, 더 있을 수도 있어요특히 라우팅과 같은 새로운 부분에서는 더욱 그렇습니다.이것이 RxUI를 모두 사용하지 않는 이유일 수 있습니다.

  3. 로깅.전에도 이런 문제가 있었어요.pull request 69를 참조하십시오.결국 RxUI는 매우 독단적인 프레임워크라고 생각합니다.만약 당신이 그 의견에 동의하지 않는다면 당신은 변화를 제안할 수 있지만, 그것이 전부입니다.고집이 세다고 나쁜 것은 아니다.

  4. Caliburn Micro에서 RxUI를 사용하고 있습니다.CM은 View-ViewModel 위치 및 바인딩, 화면 및 컨덕터를 처리합니다.저는 CM의 컨벤션 바인딩을 사용하지 않습니다.RxUI는 명령어와 ViewModel INPC 코드를 처리하며 기존 접근 방식이 아닌 Reactive를 사용하여 속성 변경에 대응할 수 있습니다.이것들을 따로 떼어놓으면, 그 둘을 함께 섞는 것이 훨씬 쉬워집니다.

이러한 문제가 실제 가동 준비와 관련이 있습니까?아니요, 리액티브UI는 안정적이고, 상당한 규모의 사용자 기반을 가지고 있으며, 구글 그룹에서 문제를 빠르게 해결하고, Paul은 토론에 응한다.

생산에서 사용하고 있으며 RxUI는 완벽하게 안정되어 있습니다.어플리케이션의 안정성 문제, EMS 문제, Unhandled Exception 핸들러 문제 등 해결 방법보다 더 많은 문제를 일으키고 있는 문제 등이 있지만 Reactive에는 문제가 없었습니다.응용 프로그램의 UI 부분.그러나 ObservableForProperty가 전혀 실행되지 않는 문제가 있었습니다.오류 사용으로 인해 테스트 코드와 실행 시 UI에서 일관되게(잘못) 동작했을 가능성이 있습니다.

-1. Paul은 _상위는 당신의 수업에서 개인 영역에 도달하기 위해 반사를 이용하기 때문이라고 설명합니다.다음과 같은 블록을 사용하여 StyleCop 및 Resharper 메시지를 처리할 수 있습니다(Resharper SmartTag에서).

    /// <summary>The xxx view model.</summary>
    public class XXXViewModel : ReactiveObject
    {
    #pragma warning disable 0649
    // ReSharper disable InconsistentNaming

    [SuppressMessage("StyleCop.CSharp.NamingRules", 
      "SA1306:FieldNamesMustBeginWithLowerCaseLetter",
      Justification = "Reviewed. ReactiveUI field.")]
    private readonly bool _IsRunning;

    [SuppressMessage("StyleCop.CSharp.NamingRules", 
      "SA1306:FieldNamesMustBeginWithLowerCaseLetter",
      Justification = "Reviewed. ReactiveUI field.")]
    private string _Name;
    ....

또는 자신의 속성을 완전히 변경할 수 있습니다.

    /// <summary>Gets or sets a value indicating whether is selected.</summary>
    public bool IsSelected
    {
        get { return _IsSelected; }
        set { this.RaiseAndSetIfChanged(x => x.IsSelected, value); }
    }

컴포넌트 부품(예:

    /// <summary>Gets or sets a value indicating whether is selected.</summary>
    public bool IsSelected
    {
        get { return _isSelected; }
        set 
        { 
            if (_isSelected != value)
            {
                this.RaisePropertyChanging(x => x.IsSelected); 
                _isSelected = value;
                this.RaisPropertyChanged(x=>x.IsSelected);
            }
        }
    }

이 패턴은 "단순한" 속성 접근자를 실제로 제공하지 않는 경우에도 유용하지만, 한 값을 설정하면 여러 값에 영향을 미치는 더 파생된 변종이 필요할 수 있습니다.

2. 서류는 이상적이지 않지만, Rx 이후에 RxUI 샘플을 픽업하는 것은 매우 간단하다는 것을 알게 되었습니다.또, Windows 8/Windows 8 Phone을 서포트하기 위한 변경에 수반해, 2->4 로부터의 점프는 모두 Reactive 로 되어 있는 것 같습니다.Windows Store 앱용 UI는 DotNet 4.5 지원이 탁월합니다. 즉, [CallerName]을 사용하면 이 기능을 쉽게 사용할 수 있습니다.Raise And Set(Raise And Set)IFChanged(값) 식을 사용할 필요가 없습니다.

·3. 아직 사용을 선택하지 않았기 때문에, 로그측의 피드백은 없습니다.

-4. 다른 프레임워크와 혼재하거나 매칭한 적도 없습니다.

http://blog.paulbetts.org/index.php/2012/12/16/reactiveui-4-2-is-released/,에는 Phil Hack을 포함한 ReactiveUI 4.2의 기타 기여자 명단도 있습니다.

언급URL : https://stackoverflow.com/questions/14436861/is-reactiveui-production-ready