1

在我们公司,我们正在开发一个包含多个模块的应用程序。架构非常明确,但我对表示层有几秒钟的想法,我真的很想听听你的意见。架构如下:

对于每个模块,我们创建了几个命名空间,这些命名空间将在它们自己的类库中编译。因此,对于我们的 CRM 模块,我们创建以下内容:

  • ProductName.CRM.ServiceLayer(持有CRM模块的servicecontracts接口)
  • ProductName.CRM.ServiceLayer.Implementation(实现CRM模块的servicelayer接口)
  • ProductName.CRM.BusinessLayer(持有 CRM 模块的业务组件)
  • ProductName.CRM.BusinessLayer.BusinessObjects(持有CRM模块的businessObjects)
  • ProductName.CRM.DataLayer(持有CRM模块的DAO接口)
  • ProductName.CRM.DataLayer.SqlServer(实现CRM模块的数据层接口)

我们为 Finance、HRM、Supply 等模块创建相同的类库结构:

  • 产品名称.财务....
  • 产品名称.HRM....
  • 等等。我想你现在会明白的:)

我们还考虑了“横切关注点”,为此我们创建了以下命名空间和类库

  • ProductName.Framework.ExceptionHandling
  • ProductName.Framework.Logging
  • ProductName.Framework.Security
  • 等等...

到目前为止,这就是我们的架构的方式,此时我正在尝试找到一种正确的方法来设置 PresentationLayer。例如,我是否应该为每个模块(ProductName.CRM.PresentationLayer、ProductName.Finance.PresentationLayer 等)创建一个 PresentationLayer 库。并制作一个整体 ProductName.PresentationLayer-library,它引用了所有其他 Module.PresentationLayer-libraries。然后,整个 ProductName.PresentationLayer 将具有 Login/MainForm 功能以及启动在 PresentationLayer 模块之一中实现的表单的能力。它就像应用程序到其他模块的入口点。

或者...

我是否应该只制作一个包含所有模块的所有表单的 ProductName.Presentation-library。通过这样做,我可以轻松导航到其他表单,并且在模块之间使用其他表单时不必担心模块之间的引用(有时他们会这样做)。

第一个解决方案对我来说听起来不错。但是,当来自不同模块的表单想要相互导航时。这种功能将很难实现,因为两者中只有一个可以引用另一个。

我真的很想听听您对我正在处理的这个问题的看法,也许有人可以给我一个合适的解决方案或想法,我可以使用。

在此先感谢,干杯!

4

1 回答 1

1

如果表单需要交换数据,您始终可以创建表单实现的接口。事实上,让许多表单相互了解可能不是一个好主意,因为从长远来看,这会产生维护和增强问题。

通过使用接口和可能的某种定位器服务,您可以避免表单之间的硬连线依赖 - 然后您可以自由地使用任何一种架构模型(1 个大型组件与许多较小的组件)。

于 2010-04-09T21:23:16.057 回答