2012-05-22 52 views
0

我们正计划在Prism.v4中开发一个WPF轻量级CRM(客户,订单,资源等)应用程序。我们已经构建了一个类似于outlookbar的用户控件,并使用了microsoft ribbons。还有其他地区,但这些是这种情况下最重要的地区。Prism CRM技术

而且存在与所有的车型,仓库,接口等等等等

我们用下面的事实,想出了一些头脑风暴后的基础设施DLL:

的customermodule需要什么了解的ordersmodule( ordersmodule知道客户模型)。但我们希望用户加载所有属于特定客户的订单。因此,在客户详细模式下(客户ribbontab和客户outlookbar项目被注入),我们需要一个ribbonbutton从“客户详细信息”导航到“此客户订单”。

问题是:如何在不打破松耦合的情况下实现这一点?

我们的方法:为客户ribbontab提供一个区域供其他模块与客户进行交互。因为ordermodule明确地知道客户(基于我们的datamodel的1:n关系)。

预先感谢您

+0

今天我可能有点累,我不知道这是不是你需要的东西,但是你可能想阅读[PRISM Navigation](http://msdn.microsoft.com/en-us /library/gg430861%28v=pandp.40%29.aspx),如果你还没有:) –

+0

这不是我正在寻找的。我的导航工作正常。我想要实现的是contactmodule与ordermodule之间的交互,而contactmodule对命令一无所知。 – csteinmueller

+0

你松散耦合的关键是你可以单独测试它。当您使用OrderModule.dll进行引用时,情况并非如此。因此,您可以添加一个额外的属性“列表订单”,并将其用于您的特定客户的订单。如果你的订单在ordermodule中存在,那么你做错了。因为它是你的“域层”的一部分,所以它需要在应用程序范围内,以便你可以重新使用它。所以你把这些模型/实体在一个单独的DLL像ApplicationName.Domain –

回答

0

我认为,通常情况下,打开客户的订单按钮应该来自客户的模块,而不是为了模块。点击此按钮可以要么...

  • 抬起与URI的导航请求像/ ShowCustomerOrders?的CustID = 1234,其中订单模块将理解并拿起
  • 打开包含的区域具有名称的视图如“CustomerOrders”,然后将客户ID插入到区域上下文中。订单模块将通过查看发现注册其客户订单视图。

这些选项都不需要添加对OrderModule.dll的引用,所以这不会添加耦合。但是,如果订单模块丢失,则导航将不执行任何操作,否则视图将变为空白。

如果您想要避免在订单模块不存在的情况下出现按钮,那么您可以改为通过查看发现将订单模块添加到客户功能区。然后,它必须从区域上下文中为当前客户提取客户ID,这将为其提供足够的信息,以便能够在单击时打开正确的客户订单视图。