我们正在构建一个企业应用程序,我们将在其中整合多个用户界面平台(即ASP.net webapp,Windows应用程序,有朝一日,移动应用程序)和多个后端数据库平台(即SQL Server,XML,Oracle).另一个必要条件是这些后端数据库要么集中存储,要么通过Web访问,要么本地化在客户端计算机上,偶尔也会同步到中央服务器.
任何人都可以就如何抽象用户界面层和数据层提出建议,以便我们可以更简单地在各种UI和DB的各种选择之间创建即插即用的适应性?例如:在一种情况下,我们可能有一个通过互联网在中央服务器上运行的网络应用程序,我们可能有远程机器通过Windows应用程序运行本地化副本.在预定的时间间隔,我们希望所有机器都同步,以便它们都可以拥有接近实时的数据.
我们还需要有关处理所涉及的各种连接字符串的建议,以便在任何一个应用程序上需要更改的唯一设置将是"本地"或"远程",这将确定必要的连接字符串.
一旦掌握了n层体系结构,抽象表示层就是一个相当简单的概念.只关注区分"域逻辑"和"应用逻辑".域逻辑在不同平台上很常见,应用程序逻辑是特定于平台的.例如,数据验证是域逻辑(虽然它很好,当你可以在前端执行,这使事情变得更复杂,但在这里与我一起工作......)并确定在某些操作之后重定向到哪个URL是应用程序逻辑.确保将域逻辑放在任何平台可用的级别,并确保不在域层中放置任何应用程序逻辑.
问题的另一半似乎是你更大的焦点,但我会在这里要求澄清,因为我可以看出两个不同的基本问题.
我希望你不要追求数据库独立性的"圣杯".在设计阶段,这总是一个崇高的目标,几乎总是,几乎每次都不需要.
如果那不是你想要的,那么我建议你应该知道哪些对象存储在哪个持久性介质中,你应该避免灵活性的复杂性,只需要以直接的方式编写垂直路径尽可能.IE不会将额外的东西编写到某个业务类中,该业务类将其数据存储在Oracle中,以使您能够"在将来的某个时刻"将其放入SQL Server.(我循环回到数据库独立,不是吗?)
在本地缓存数据以提高某些平台性能的问题是这些平台所特有的,我建议你研究一下智能客户端和MS P&P团队的缓存框架/指导.在过去的几年里,我一直专注于网络工作,但在05/06年它非常好,而且他们在此期间一直在为他们的智能客户端工作做很多工作.