C#解耦类

4
这可能有点含糊,但我正在开发一个程序,其中有几个类负责更新UI。我创建了一个“中间人”类,基本上接受所有UI请求(以及其他内容),并将它们路由到UI本身,这样UI类只与中间人交互。
问题在于,UI类在其接口中有大约20个不同的函数,而我的中间人类基本上只是从较低级别的类中获取调用,然后在UI中调用一个实质上相同的函数,这让我想知道是否这种方式有些违背初衷。我相信这是经常出现的问题。有没有更优雅的方法来解决这个问题?
谢谢,
PM
2个回答

2
“不必在后端引用UI相关的内容是很好的。我猜这就是你想要这样做的原因。”
“如果是这样,你可以实现一些发布/订阅模式(比如观察者模式)。这样,你就不必特别引用UI。你只需要从后端进行“发布”,并从UI订阅这些事件。”
“或者,你可以从一个接口继承你的UI,并指定你需要的方法。然后,在后端中只引用该接口。”

甚至更好(即更有趣的是),为每个后端类在您的UI中实现一个接口(或者以任何合理的方式)。然后,您可以将UI潜在地拆分为单独的类,而后端永远不会知道。 - Zooba
另外,我喜欢你的个人资料图片上有一个颤音琴。 - Zooba
谢谢你!我很高兴你认出它是颤音琴,而不是一些类似的体鸣乐器。你自己是颤音琴手/打击乐手/音乐家吗? - Smashery
嗯,我认为这会消除我拥有的一些功能。假设我有一些在后端发生变化的字段,C#是否有一种简单的方式可以自动将更改发布给观察者?(如果有一个关键字“published”可以自动通知任何订阅者进行更改的话,那就太酷了) - user472875
1
http://www.akadia.com/services/dotnet_delegates_and_events.html - Kevin Stricker
好的,基本上为每个观察字段的更改创建一个新事件,并在 UI 端处理它。我仍然需要在每次更改后引发事件,但我想我会尝试将我的 UI 接口分成几个组,就像 Zooba 建议的那样,并尝试每组使用一个或两个事件。 - user472875

2
很遗憾,您没有说明您用来构建UI的工具。但是,使用WPF(或Silverlight)和数据绑定可以快速解决整个问题。简而言之,UI中的项目绑定到后备类中的属性和命令。当属性更改时,引发PropertyChanged事件,UI就知道要更新自己了。要获取更多信息,请开始搜索MVVM。总体来说,这实际上是观察者模式的一种形式,但您不必亲自进行所有的连接。

这正是我一直在寻找的,可惜界面已经编码完成,所以现在转向WPF有点晚了,但肯定会记在未来项目中。 - user472875

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接