WPF 棱镜 + 现有 WPF 应用程序
WPF Prism + Existing WPF Application
我有一个现有的应用程序。
在 WPF/MVVM 方面有大约 3 年的良好经验 - 我觉得我应该从 Prism 开始(到目前为止我对 PRISM 框架一无所知 - 我打算现在学习它)。
目标是 -
- 使应用程序成为基于 SOLID(设计)的框架。现有代码混合了 MVVM(最近的新功能)和代码隐藏模型(现有功能)
由于它是一个庞大的应用程序 - 将所有内容移动到 Prism 将是一项艰巨的任务。
问题:
- 我计划开始一项新的开发(一项重要的功能实施)。我可以使用 Prism 进行新开发吗?我很高兴从头开始编写大部分组件,然后慢慢地在功能上明智地将整个应用程序移动到 Prism。
例如现有的前台实时交易应用,计划回加office/middle办公功能,慢慢将前台功能移至Prism。
我有一种感觉,学习 PRISM 的学习曲线与从 Winforms 转移到 WPF 一样多 - 是这样吗?关于我应该遵循的书籍有什么建议吗?我是一个程序学习者,更喜欢从基础开始逐步学习(即关于 Prism 的一切)。
我将通过 Prism 获得哪些巨大优势。 GUI 级别的性能会受到影响吗?
此致维奈
我推荐 the official guide 顺便说一下,它首先定义 Prism 如下:
Prism provides guidance in the form of samples and documentation that
help you easily design and build rich, flexible, and easily maintained
Windows Presentation Foundation (WPF) desktop applications. Using
design patterns that embody important architectural design principles,
such as separation of concerns and loose coupling, Prism helps you to
design and build applications using loosely coupled components that
can evolve independently but which can be easily and seamlessly
integrated into the overall application. In short, these applications
are "built to last" and "built for change." These types of
applications are known as composite applications.
我已经突出显示了我认为最能概括的句子以及它们用来指代此类应用程序的术语:复合应用程序。
如果您的应用程序可以从松散耦合的模块中获益,那么 Prism 可能是您的不二之选。例如,在开发 ERP 时,您可以选择将每个相关功能区域实现为一个模块。您可能希望更细化并为 UI 的不同部分使用模块,例如 stock trader reference implementation.
我没有发现学习曲线非常陡峭。事实上,the guide 组织得非常好,您可以直接进入每时每刻需要的概念,而无需通读整篇文章。绝不是从 WinForms 迁移到 WPF 这样的变化:它建立在您熟悉的 MVVM 基础之上,添加了一些更高级别的抽象并使用了一些已知的模式,例如 publisher/subscriber 事件。
底线是,对于适当大小的应用程序,您应该通过投资使用 Prism 来获得可维护性。已经精通MVVM,学习起来应该很容易。
编辑:回复评论
So, I could start a PRISM based GUI set in the existing WPF application?
当然,是的。您可以使用您认为有用的部分,并且很可能最终会使用得越来越多。请注意,您可能需要更改应用程序的初始化以实现 Bootstrapper。但是,这不是强制性的,所以只需看一下模式并开始使用您认为合适的模式。它不是一个全有或全无的框架。
将现有应用程序迁移到 Prism 是一项艰巨的任务。让应用程序的一部分成为 Prism 而另一部分不是是可能的,但我认为您会发现自己变得非常沮丧,因为必须在两个世界之间来回跳转,并且必须找到让它们很好地协同工作的方法。
我个人不会走这条路。如果您希望获得依赖注入的好处,那么逐步采用依赖注入库比采用更大的 Prism 框架要容易得多。具体来说,当您构建新功能时,编写它们以便注入它们的依赖项……最初这段代码将失败,因此您将转到实际定义每个依赖项的位置并添加一行代码以将它们注册到您的DI 容器。
我有一个现有的应用程序。
在 WPF/MVVM 方面有大约 3 年的良好经验 - 我觉得我应该从 Prism 开始(到目前为止我对 PRISM 框架一无所知 - 我打算现在学习它)。
目标是 - - 使应用程序成为基于 SOLID(设计)的框架。现有代码混合了 MVVM(最近的新功能)和代码隐藏模型(现有功能)
由于它是一个庞大的应用程序 - 将所有内容移动到 Prism 将是一项艰巨的任务。
问题: - 我计划开始一项新的开发(一项重要的功能实施)。我可以使用 Prism 进行新开发吗?我很高兴从头开始编写大部分组件,然后慢慢地在功能上明智地将整个应用程序移动到 Prism。
例如现有的前台实时交易应用,计划回加office/middle办公功能,慢慢将前台功能移至Prism。
我有一种感觉,学习 PRISM 的学习曲线与从 Winforms 转移到 WPF 一样多 - 是这样吗?关于我应该遵循的书籍有什么建议吗?我是一个程序学习者,更喜欢从基础开始逐步学习(即关于 Prism 的一切)。
我将通过 Prism 获得哪些巨大优势。 GUI 级别的性能会受到影响吗?
此致维奈
我推荐 the official guide 顺便说一下,它首先定义 Prism 如下:
Prism provides guidance in the form of samples and documentation that help you easily design and build rich, flexible, and easily maintained Windows Presentation Foundation (WPF) desktop applications. Using design patterns that embody important architectural design principles, such as separation of concerns and loose coupling, Prism helps you to design and build applications using loosely coupled components that can evolve independently but which can be easily and seamlessly integrated into the overall application. In short, these applications are "built to last" and "built for change." These types of applications are known as composite applications.
我已经突出显示了我认为最能概括的句子以及它们用来指代此类应用程序的术语:复合应用程序。
如果您的应用程序可以从松散耦合的模块中获益,那么 Prism 可能是您的不二之选。例如,在开发 ERP 时,您可以选择将每个相关功能区域实现为一个模块。您可能希望更细化并为 UI 的不同部分使用模块,例如 stock trader reference implementation.
我没有发现学习曲线非常陡峭。事实上,the guide 组织得非常好,您可以直接进入每时每刻需要的概念,而无需通读整篇文章。绝不是从 WinForms 迁移到 WPF 这样的变化:它建立在您熟悉的 MVVM 基础之上,添加了一些更高级别的抽象并使用了一些已知的模式,例如 publisher/subscriber 事件。
底线是,对于适当大小的应用程序,您应该通过投资使用 Prism 来获得可维护性。已经精通MVVM,学习起来应该很容易。
编辑:回复评论
So, I could start a PRISM based GUI set in the existing WPF application?
当然,是的。您可以使用您认为有用的部分,并且很可能最终会使用得越来越多。请注意,您可能需要更改应用程序的初始化以实现 Bootstrapper。但是,这不是强制性的,所以只需看一下模式并开始使用您认为合适的模式。它不是一个全有或全无的框架。
将现有应用程序迁移到 Prism 是一项艰巨的任务。让应用程序的一部分成为 Prism 而另一部分不是是可能的,但我认为您会发现自己变得非常沮丧,因为必须在两个世界之间来回跳转,并且必须找到让它们很好地协同工作的方法。
我个人不会走这条路。如果您希望获得依赖注入的好处,那么逐步采用依赖注入库比采用更大的 Prism 框架要容易得多。具体来说,当您构建新功能时,编写它们以便注入它们的依赖项……最初这段代码将失败,因此您将转到实际定义每个依赖项的位置并添加一行代码以将它们注册到您的DI 容器。