gpt4 book ai didi

wpf - ReactiveUI 生产准备好了吗?

转载 作者:行者123 更新时间:2023-12-02 00:55:55 25 4
gpt4 key购买 nike

我一直在研究在生产代码中使用响应式 UI 的可行性。有些功能确实很吸引人,但我担心依赖这个库。其中包括:

  1. 古怪的命名和约定。例如, protected 成员以小写字母开头,而 RaiseAndSetIfChanged 方法取决于以下划线开头的私有(private)成员。我知道 Paul Betts(ReactiveUI 作者)有 Ruby 背景,所以我猜这就是奇怪命名的根源。然而,这会给我带来一个真正的问题,因为在我的项目中强制执行标准命名(按照 Stylecop)。即使不强制执行,我也会担心由此导致的命名不一致。

  2. 缺乏文档/样本。有一些文档和一个孤独的示例。然而,文档只是一系列(旧的)博客文章,示例基于库的 V2(现在是 V4)。

  3. 部分设计有些奇怪。例如,日志记录是抽象的,以便不依赖于特定的日志记录框架。很公平。然而,由于我使用 log4net(而不是 NLog),我将需要我自己的适配器。我认为这需要我实现 IRxUIFullLogger,其中包含大量方法(远远超过 50 个)。我本以为更好的方法是定义一个非常简单的接口(interface),然后在 ReactiveUI 中提供扩展方法以促进所有必要的重载。此外,NLog 程序集依赖于这个奇怪的 IWantsToRegisterStuff 接口(interface),但我无法依赖它(因为它是一个内部接口(interface))。我希望我不需要那个......

    无论如何,我关心的是图书馆的整体设计。有人被这个咬过吗?

  4. 我已经广泛使用 MVVM Light。我知道保罗写了一篇博客文章,他解释说从技术上讲你可以同时使用两者,但我更关心的是可维护性。我怀疑将两者混合在一个人的代码库中会非常困惑。

有人有在生产中使用响应式 UI 的实践经验吗?如果是这样,您能减轻或解决我的上述担忧吗?

最佳答案

让我们逐一分析您的疑虑:

#1. "Whacky naming and conventions."

现在 ReactiveUI 4.1+ 有了 CallerMemberName,您根本不必使用这些约定(即使如此,您也可以通过 RxApp.GetFieldNameForPropertyFunc 覆盖它们)。只需将属性写为:

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

#2. Lack of documentation/samples

这是合法的,但这里还有更多文档/示例:

#3. "I would have thought a far better approach would be to define a very simple interface and then provide extension methods within ReactiveUI to facilitate all the requisite overloads"

实现 IRxUILogger 相反,它只有很少的两个方法:) ReactiveUI 将填充其余部分。 IRxUIFullLogger 仅在您需要时才出现。

"In addition, there's this weird IWantsToRegisterStuff interface "

您不需要了解这一点:)这仅用于处理 ReactiveUI 自身初始化,这样您就不必拥有样板代码。

  1. "I suspect it would be horribly confusing having both intermingled in one's code base."

不是真的。只需将其视为“具有 SuperPowers 的 MVVM Light”即可。

关于wpf - ReactiveUI 生产准备好了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14436861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com