1

我正在与非常支持 Prism 的 WPF 应用程序的其他开发人员合作,但我只是不了解其中的好处。我通过依赖注入框架和使用 EventAggregator 获得了模块化的想法。但是,如果没有这两件事,使用 Prism 有什么核心优势吗?

基本上我不知道为什么我需要动态加载视图并将它们放置在区域中,而我在开发过程中已经知道它们会去哪里并且它们永远不会改变。

我在网上找到的所有内容都将 DI 的优势视为 Prism 的唯一优势。有什么我想念的吗?

4

3 回答 3

1

PRISM 提供了一个以模块化方式组成应用程序的框架。因此,您不必将视图注入到区域中,但它会使其更加灵活。您可以更轻松地使用不同的视图并将它们注入您的区域。

我同意 DI 可能是 PRISM 最常用的功能,并且可以说是使用它的最有说服力的理由。一般来说,没有必要使用 PRISM,特别是如果你的应用程序足够小,但它确实使它更灵活地适应未来的变化。解耦组件很好,PRISM 提供了实现它的方法(不是唯一的方法)。

HTH。

于 2012-06-07T19:33:20.590 回答
1

我的恕我直言

您对 PRISM 的看法是错误的:

  • PRISM 是框架。因此,您可以独立使用它的任何部分。它是 DI 容器、导航框架、EventAggregator、DelegateCommand、NotificationObject、模块化结构、区域和许多其他东西。
  • DI与 PRISM没有任何关系。这是独立的事情。您可以在没有PRISM 的情况下轻松使用 Unity(或 MEF,但这不是真正的 DI 容器) 。PRISM 只是提供了所有东西的一些集成。

我对棱镜的看法:

  • “他们永远不会改变” - 如果您已经知道,请远离这个项目。如果项目永远不会改变 - 它已经死了。根据我的经验,如果项目存在 -任何事情都可以改变。甚至是不变的东西。我与一家保险公司合作得非常密切,他们说一件事永远不会改变。他们有几十万客户。5 (!!!) 年后它被改变了......非常酷。感谢上帝,我一直认为任何事情都可以改变。
  • PRISM 的另一个优点是“标准化”——所有标准类都具有相同的名称,它们具有相同的属性和方法,您的项目具有标准结构等。
  • PRISM 的区域为 XAML 提供了一些 DI 类比。没有它你能做到吗?当然可以。但同样 - 这是“标准”方式。你可以很容易地跳到另一个项目,你不会学习另一个“穷人框架”。

同样,这是我的恕我直言。当然,我可能是错的..

于 2012-06-08T12:51:32.060 回答
0

我确实大量使用区域和导航。它可能不适用于您的场景,但在我的情况下,我在 TabControl 中打开了多个视图(通过导航)。传递参数(查询字符串)和控制目标(NavigationAware)的能力对我来说很重要。

假设您有带有客户和订单的 UI。您会看到客户和他的订单。您单击特定订单,然后打开另一个页面。猜猜看,您可以使用如下导航访问订单视图:

  1. /订单视图

  2. /OrderView?OrderKey=123

第一个将打开您的视图。第二个将打开并导航到您需要的订单。您还可以将链接从订单视图链接到客户视图

/CustomerView - 将打开新客户屏幕

/CustomerView?CustomerKey=123 - 将打开您的客户或导航回您已经打开的视图。

如果您关心这样的场景 - PRISM 会有所帮助。

如果您的团队在同一视图上使用区域 - 我也没有看到太多好处。而且我没有这样的地区。

另一个示例使用:

我有一个区域的 MenuStackPanel。根据用户权限,应用程序将加载该用户可以使用的模块。当模块加载时 - 他们注册他们的作品并用他们的选项填充菜单。

于 2012-06-07T23:51:35.947 回答