在企业应用程序中抽象数据连接层和表示层

时间:2008-10-24 19:10:26

标签: .net design-patterns connection-string database-connection abstraction

我们正在构建一个企业应用程序,我们将在其中整合多个用户界面平台(即ASP.net webapp,Windows应用程序,有朝一日,移动应用程序)和多个后端数据库平台(即SQL Server,XML,甲骨文)。另一个必要条件是这些后端数据库要么集中存储,要么通过网络访问,要么本地化在客户端计算机上,偶尔也会同步到中央服务器。

任何人都可以就如何抽象用户界面层提供建议。数据层,以便我们可以更简单地创建各种UI之间的即插即用适应性和DB的各种选择?例如:在一种情况下,我们可能有一个通过互联网在中央服务器上运行的Web应用程序,我们可能有远程机器通过Windows应用程序运行本地化副本。在预定的时间间隔内,我们希望所有机器都同步,以便它们都可以拥有接近实时的数据。

我们还需要处理所涉及的各种连接字符串的建议,以便在任何一个应用程序上需要更改的唯一设置是“本地”或“远程”,这将确定必要的连接字符串。

2 个答案:

答案 0 :(得分:5)

一旦掌握了n层体系结构,抽象表示层就是一个相当简单的概念。只关注区分“域逻辑”和“应用逻辑”。域逻辑在不同平台上很常见,应用程序逻辑是特定于平台的。例如,数据验证是域逻辑(虽然它很好,当你可以在前端执行,这使事情变得更复杂,但在这里与我一起工作......)并确定在某些操作之后重定向到哪个URL是应用程序逻辑。确保将域逻辑放在任何平台可用的级别,并确保不要在域层中放置任何应用程序逻辑。

你问题的另一半似乎是你更大的焦点,但我会在这里要求澄清,因为我可以看出两个不同的基本问题。

  1. 我希望你不要追求数据库独立性的“圣杯”。在设计阶段,这总是一个崇高的目标,几乎总是,几乎每次都不需要。

    如果这不是你想要的,那么我建议你应该知道哪些对象存储在哪个持久性介质中,你应该避免灵活性的复杂性,只需将你的垂直路径编码为以尽可能的方式前进。 IE不会将额外的东西编写到某个业务类中,该业务类将其数据存储在Oracle中,以使您能够“在将来的某个时刻”将其放入SQL Server。 (我循环回到数据库独立,不是吗?)

  2. 本地缓存数据以提高某些平台性能的问题是针对这些平台的,我建议您研究智能客户端和MS P& P团队的缓存框架/指导。在过去的几年里,我一直专注于网络工作,但是在05/06年它非常好,同时他们在Smart Client上做了很多工作。

答案 1 :(得分:1)

我会考虑使用提供者模型在您的应用程序中建立数据库连接。

我首先看一下Microsoft数据应用程序块中提供的示例和详细信息,我认为它将帮助您了解其中的一部分。