2010-04-09 74 views
1

在我们公司,我们正在开发一个应用程序,它将由多个模块组成。该架构的定义非常清晰,但对于演示层我有几秒钟的想法,我真的很想听听您的意见。该体系结构如下:企业应用程序中的表示层体系结构

Foreach模块我们创建了几个名称空间,这些名称空间将被编译到它们自己的类库中。因此,对于我们的CRM模块,我们创建以下文件:

  • ProductName.CRM.ServiceLayer(持有CRM模块的servicecontracts接口)
  • ProductName.CRM.ServiceLayer.Implementation(实现CRM模块的servicelayer接口)
  • ProductName.CRM.BusinessLayer(持有CRM模块的businesscomponents)
  • ProductName.CRM.BusinessLayer.BusinessObjects(持有CRM模块的BUSINESSOBJECTS)
  • ProductName.CRM.DataLayer(持有CRM模块的DAO接口)
  • ProductName.CRM.DataLayer.SqlServer(实现CRM模块的数据层接口)

我们创建的模块财务,人力资源管理,供应类库的结构相同,等:

  • ProductName.Finance ....
  • ProductName.HRM ....
  • 等 我想你会得到的想法,现在:)

此外,我们想到了“横切关注点”,为此我们创建以下的命名空间和类库

  • ProductName.Framework.ExceptionHandling
  • ProductName.Framework.Logging
  • ProductName.Framework.Security
  • etcetra ...

所以这是我们的建筑怎么这么远,在这一刻,我试图找到一个prope用于设置PresentationLayer的方法。例如,我应该制作一个PresentationLayer库的foreach模块(ProductName.CRM.PresentationLayer,ProductName.Finance.PresentationLayer等)。并且创建一个整体的ProductName.PresentationLayer库,它引用了所有其他的Module.PresentationLayer库。这个整体ProductName.PresentationLayer将具有登录/ MainForm功能并能够启动在其中一个模块PresentationLayer中实现的表单。它将像其他模块的应用程序入口点一样。

或者......

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

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

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

在此先感谢, 干杯!

回答

1

如果需要交换数据,您可以随时创建表单实现的接口。事实上,让大量表单彼此了解可能不是一个好主意,因为长期来看,这会造成维护和增强问题。

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

+0

您如何看待整个presentationlayer库,它就像是应用程序和模块的入口点? 012kIk认为库还会包含登录功能以及为特定的用户角色启用模块的功能。 当然,业务逻辑中定义了为特定的userrole启用的模块。 – Lionel 2010-04-10 09:44:47