问题标签 [composite-application]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
476 浏览

domain-driven-design - 在复合应用程序中重用域模型的最佳实践是什么?

我们有一个使用复合 UI 应用程序块 (CAB)/智能客户端软件工厂 (SCSF) 构建的复合应用程序。迄今为止,我们的复合应用程序中的每个模块都使用了自己的一组 DTO,并且业务逻辑已在整个模块中重复,包括 UI 层和服务层。我想追求更多领域驱动的方法,以便将业务逻辑封装在一个领域层中,该领域层可以分布到 UI 层和服务层,并且(理想情况下)跨模块。

我们的复合应用程序中同时有多个模块正在开发中,我们需要能够以任何顺序部署它们。理想情况下,我希望我们的模块共享一个通用的域模型,但我担心当我们部署新版本的域模型和一个模块时,我们需要针对域模型对其他模块进行回归测试.

另一种方法似乎是在每个模块中复制域模型,但所有这些代码重复对我来说都很有趣。该行业是否针对这种情况制定了任何最佳实践?

0 投票
1 回答
6102 浏览

wpf - 防止 WPF 框架在堆栈中存储历史记录

这似乎是一个简单的解决方案,但我浪费了太多时间试图解决这个问题。也许我的应用程序设计不正确(可能是这种情况),所以如果您有更好的解决方案,请帮助我。

我正在设计一个企业级 WPF 应用程序,它看起来很像带有Ribbon工具栏而不是工具栏的 Outlook。当用户单击RibbonButton. 请记住,他的功能区在所有模块中共享。

所以我有一个带有丝带和框架的外壳。当用户单击功能区按钮时,它会将适当的模块(用户控件)加载到框架中。一切都很好。但是,如果我导航到另一个模块(通过单击另一个 RibbonButton),然后单击原来的RibbonButton,我现在打开了同一个模块的两个实例......但框架中只显示一个......另一个模块在框架的堆栈中。

所以我的问题是,当我导航到不同的模块时,如何告诉框架关闭用户控件?我试过设置JournalEntry.KeepAlive="False",但还是不行。有什么想法吗?确实没有太多代码可以发布,但是如果对您有帮助,我可以这样做。

0 投票
1 回答
738 浏览

silverlight - 在 Silverlight 解决方案中使用框架/页面和复合应用程序指南 (Prism)

有什么方法可以在 Silverlight 复合应用程序中使用页面/框架?

我之前创建了一个使用 System.Windows.Controls.Navigation.Frame 和 System.Windows.Controls.Pages 的 Silverlight 应用程序。这是关键的代码:

我正在尝试将项目集成到复合应用程序指导解决方案中。在尝试加载帧源之前,一切似乎都很好。然后我得到:

未处理的异常(“Silverlight 应用程序
代码中的未处理错误:4004
类别:ManagedRuntimeError
消息:System.InvalidOperationException:在“/Pages/StartPage.xaml”位置找不到 XAML。

当我从 XAML 中删除“源”属性时,区域加载正常(尽管没有一段内容)。

我是复合应用程序、Silverlight 和 XAML 的新手;但我可以理解该应用程序正在该特定位置寻找页面,该页面在主应用程序中不存在(并且仅存在于特定项目中)。

无论如何,我可以以编程方式加载框架吗?或者是否有另一种解决方案来加载这些页面?

0 投票
1 回答
531 浏览

entity-framework - 复合应用程序中的实体框架代码优先 TpT 映射

我正在开发一个复合整体系统应用程序,不同的公司可能会添加不同的模块,但只有一个数据库。我的框架中有一个通用存储库,它是技术独立的(我的意思是它是提供者基础,现在默认提供者是 EF 4.1)。我已经分离了包含 poco 实体的公共层,并且每个模块在它们自己的程序集中也有不同的实体。现在的问题是实体映射。我无法从我的 EF 提供程序项目中访问我的实体,因为我不知道未来的模块!那么如何以通用方法映射我的实体?可能吗?

我认为一种解决方案是拥有一个配置文件并添加实体 FullName 然后迭代和反映每个实体,然后我可以将它们添加到 OnModelCreat(...) 方法中,但当然存在一些性能问题。

编辑:首先感谢您的回复 Ladislav。但是还有更多信息给你。

您可以要求每个模块必须包含它使用的每个新实体的映射类。当您启动应用程序时,您将只使用反射来获取从 StructuralTypeConfiguration<> 派生的所有类(包括实体和复杂类型),创建这些类型的实例并将它们添加到 DbModelBuilder 中的 Configurations 集合中(可以在 OnModelCreating 中完成)。

这将需要一些时间,但它只会在第一次使用上下文时发生一次。您可以在应用程序启动期间触发此创建 - 应用程序只需要一些时间来启动和配置它们需要使用的所有基础设施。

编辑:

我必须在每个不适合这种情况的模块中引用 EntityFramework.dll。

是的。您希望允许其他开发人员定义他们自己的实体,这些实体将由您的核心应用程序持久化。在这种情况下,他们必须使用您选择的持久性框架来告诉您的应用程序如何持久化他们的实体。

==>正如我之前提到的,EF 不是我唯一的 DataProvider !我必须有一些其他的 DP,例如 DB4O 的数据提供者等,所以我不想引用每个提供者对每个模块的依赖项......因此我需要将 EF 封装在一个单独的程序集中

如果您使用存储库,每个模块甚至应该包含自己的存储库以使用其自己的实体 - 通用存储库不存在。通用存储库是多余的无用层,只会使您选择的 ORM 的工作更加困难。说清楚 - 存储库模式的正确实现不是通用的。它是特定的,它公开了单个实体或聚合根的数据访问功能。

==>我可以要求任何可靠的参考吗?!为什么我应该为每个模块添加一个存储库,以防只有一个存储库可以满足我的所有要求?哪个是多余的?在我看来,使用特定或通用代表在正确的情况下都是正确的。我的模块中有 90% 具有来自存储库的相同要求,并且它们都应该具有 CRUD ...

如果您不希望模块中的 EF 依赖,要么根本不使用 EF,要么定义您自己的中间映射层,该层将在您的应用程序中转换为特定映射 - 大量工作零附加值。

==>事实上,我正在尝试定义自己的映射层,因为我在我的应用程序架构中需要它。它对我来说不是没用的。这是我问如何实现它的唯一原因。我正在寻找最好的解决方案,我希望你能帮我解决它:)

其他选项就是不允许您的模块使用新实体,因为它看起来更像您当前的期望。如果模块开发人员必须为他的实体定义新的数据库表,他还必须能够使用持久性并定义表和他的实体之间的映射。

==>好主意,但不适合我的情况;)

我必须在启动时反映每个模块 dll,这意味着要反映很多沉重的 dll 并且......还有其他想法吗?

您是否在启动过程中见过 Photoshop、Visual Studio 甚至 MS Office 应用程序等应用程序?当您看到启动画面时,您认为发生了什么?应用程序正在初始化 - 它正在加载和初始化其功能和插件。即使是服务器应用程序也可能需要几分钟才能完全启动。您正在构建模块化应用程序(不是复合应用程序),因此您必须为该要求付费。

==>是的,我想我看到了其中一些!例如,如果他们在启动时加载所有托盘或侧边栏,他们必须雇用我。嘿亲爱的微软,如果您不知道什么是延迟加载,我可以帮助您提高性能 :)

如果您不想自己使用反射,可以使用 MEF 构建模块化基础架构。

==>我已经在使用 Prism 和 MEF 来处理模块化,但仅适用于模块,不适用于我的提供商......

听起来 EF 不是企业复合应用程序的好解决方案,对吧?

您没有提出任何不应由 EF 满足的企业要求。您只是与您的期望作斗争,以允许模块开发人员使用新实体,但不让他们能够描述这些实体将如何被持久化——但谁来描述呢?

==>一个模型或一个中间映射器层,如果 EF 支持,它将在每个模块加载和映射实体(据我所知不能)我需要像引导程序这样的东西来为每个提供者映射实体:)

您不是在构建复合应用程序。复合应用程序采用单独工作的现有功能(组件、现有应用程序)并将它们组合到一个新应用程序中。您正在构建模块化应用程序,您的核心可以托管其他模块,但如果没有您的托管基础​​设施,这些模块将无法运行。

==>我不打算就我的应用程序及其架构进行演讲,但我认为就这么多就足够了,你知道这是一个复合/模块化应用程序......

我应该切换到模型优先吗?!!

模型优先(通常是 EDMX)确实不适合您的期望,因为在模型优先的情况下,每个模块都需要自己的 EDMX 文件和自己的上下文。

==>但我可以在运行时更改 EDMX 文件的模型和 xml,对吗?!

您也不能首先通过代码使用自动数据库生成,因为任何新模块都会破坏您的应用程序或 EF 将删除您当前的数据库。

==>感谢这个建议,虽然我以前知道,但我当然会更加关注它。

0 投票
1 回答
90 浏览

pylons - 如何将多个 Pylons 应用程序移动到单个复合应用程序中?

我们有几个单一的 Pylon 网站正在运行,但希望使这些网站更易于重用。

塔内有一个“复合应用程序”的概念,但关于如何实现这一点的说明似乎有限。

有没有人这样做或知道关于“如何将多个 pylons 应用程序转换为复合应用程序”的好教程??

我已经尝试过——也许过于乐观——简单地将现有应用程序复制到另一个应用程序中并摆弄 development.ini 文件,但这似乎不起作用。(在这种情况下,我收到错误“pkg_resources.DistributionNotFound:wiki”)

谢谢

0 投票
1 回答
73 浏览

.net - 复合应用程序块中的命令和事件之间的区别

我在我的应用程序中使用复合应用程序块。有 2 个概念,EventHandlers 和 CommandHandlers 看起来与我非常相似……它们都允许您从 UI 的一个部分调用另一部分的功能。它们之间有什么区别?

0 投票
1 回答
213 浏览

asp.net-mvc - Microsoft 复合应用程序块 (CAB) 加载问题

我对 Microsoft CAB 框架相当陌生,并且遇到了一个问题,即我无法在我的应用程序中“取消隐藏”功能区栏,因为它是在应用程序加载时设置的。之后我可以在 WorkItem 控制器中的事件中取消隐藏/显示它,如下所示:

我以为我可以从启动时加载的视图中发布上述事件,但是在应用程序启动后功能区栏仍然隐藏。

我公司的某个人正在使用以下 hack,它从“ShellCreated”事件将 F1 键发送到应用程序(我认为这是一个保留字事件,因为我可以在代码中的任何位置找到事件发布),但我发现它有时可以将 F1 键发送到错误的应用程序,如 Word、Outlook 等:

我尝试将 mShellUIExtensionService.ShowRibbon(True) 添加到上述 OnShellCreated 函数中,但功能区栏仍然隐藏。

我怀疑问题出在加载 CAB 架构的顺序上,那么有谁知道在加载应用程序后如何设置 CAB 加载的属性?或者至少知道我该如何解决这个问题?

0 投票
3 回答
445 浏览

java - 如何在 Eclipse Keplar 上安装 Lotus Expeditor

我正在尝试使用 Lotus Expeditor Toolkit 为 IBM Lotus Notes 开发复合应用程序。我正在使用 Eclipse Keplar SR2 并尝试安装 Lotus Expeditor 6.2.3(甚至 6.2.2 和 6.2.1)。我已经下载了 Expeditor Toolkit 的更新站点:

http://www14.software.ibm.com/webapp/download/nochargesearch.jsp?q=Lotus+Expeditor+Toolkit+6.2

Eclipse 能够看到 site.xml 文件并尝试安装 Expeditor,但我收到一条错误消息,指出找不到 org.eclipse.equinox.common [3.4.0,3.5.0]。

我为 KeplarSR2 下载了 Equinox:

http://download.eclipse.org/equinox/drops/R-KeplerSR2-201402211700/index.php

我可以下载一个包含二进制、功能和插件文件夹的 zip 文件,但没有 site.xml 文档,因此 Eclipse 无法以这种方式安装。但是,有一个 artifacts.xml 文件和一个 content.xml 文件。

那么如何将 Equinox 安装到 Eclipse 中?(以安装 Lotus Expeditor 为目标)

也许,我什至需要 Lotus Expeditor 吗?是否有其他 Java UI 类允许我添加菜单项,例如,如果用户邮件文件不在焦点上,我可以隐藏或灰显?

谢谢。

0 投票
1 回答
2296 浏览

c# - Windows 窗体应用程序仍然是一个不错的选择吗?

自 2005 年以来,我还没有创建过 Windows 窗体应用程序(使用 C# 和 .NET),所以我不确定它是否仍然是富客户端应用程序的好选择。另外我不知道除了复合应用程序块之外是否有任何(比较)新的构建 Windows 应用程序的框架。

我们公司有一个小团队(3 人)负责管理内容(例如音乐、手机游戏等),我想为他们构建一个工具。因为只有少数人会使用这个工具,所以我正在考虑创建一个 Windows 应用程序,这样我就可以专注于业务逻辑,而不是花费时间和精力来创建丰富的 Web UI(例如使用 ajax、jquery 等)。

我知道 WPF 是另一种选择,但据我所知,使用 WPF 构建应用程序有点复杂和耗时。

如果 Windows 窗体是我的最佳选择,是否有任何用于构建 Windows 应用程序的相当新的框架?10 年前,我曾经使用过 Microsoft 的复合应用程序块,但在我看来,这已经是过去式了!

0 投票
2 回答
284 浏览

c# - 使用 Prism 和 MEF 多次初始化静态变量

语境

我有一InteractionWindowPresenter堂课负责创建 Windows。其中一些可能是模态的,我想保留打开的模态窗口数量的计数器,以便通知应用程序的其他部分。

因此,我_modalsCount在类中添加了一个变量,每当打开或关闭模式窗口时都会更新:

初始化后,每个Prism 模块- 即。每个类都实现IModule- 实例化一个 InteractionWindowPresenter必须在 Window 上显示并持有对它的引用的每个视图。例如:

该类InteractionWindowPresenter在所有模块以及其他基础结构组件直接引用的基础结构组件中定义。启动器应用程序不引用它,它只是一个MefBootstrapper. 因此,MEF用于合成。

问题

在初始化行设置断点_modalsCount表明在InteractionWindowPresenter创建实例时不会执行断点。相反,它是在每个模块中使用变量的第一次(也是唯一一次)执行 - 即。第一次Show从每个模块调用该方法。因此,每个模块都有自己的价值,在该特定模块的所有实例中共享。

我知道懒惰的评估是由于beforefieldinit. 但是,我希望整个应用程序而不是每个模块的评估只发生一次。

我还尝试在静态构造函数中执行初始化:

在这种情况下,静态构造函数在实例构造函数执行之前被调用,但每次创建实例时。因此,变量似乎不再是静态的。

据我了解,static变量每AppDomain. 因此,由于我所有的程序集(模块和基础结构)都在同一个AppDomain中,因此不应该发生这种情况。这两个假设中的任何一个我错了吗?

到目前为止采用的解决方法

创建一个简单的类来保存计数器可以避免这个问题:

因此将调用替换为_modalsCount

和:


那么我在这里错过了什么?我是否以某种方式误解了静态变量的生命周期和范围,还是 Prism 模块和/或 MEF 惹恼了我?