2009-02-12 55 views
1

我们的核心业务应用程序使用业务对象的库(C#项目)。数据访问使用Wilson O/R Mapper完成(我们今年夏天将迁移到NHibernate)。该应用程序有3个前端用户界面:Windows Forms,ASP.NET和安装在平板电脑上的Windows Forms应用程序。三个前端执行不同的功能,但他们都访问业务类的核心子集。维护业务类库的两个版本

平板电脑应用程序是问题所在。我们尝试限制推送到平板电脑的数据量,以减少使用SQL Server合并复制进行同步所花费的时间。我们遇到的问题是当我们向主应用程序添加新功能时,我们无需将其分发给平板电脑,或者如果它是敏感数据,则强烈需要不分发。其中一些可以通过复制来控制,但我们偶尔会在核心业务对象中引入依赖项,这些对象必须存在才能使O/R映射器正常工作。

理想情况下,我们将有两个版本的核心业务对象库Full和Compact。这似乎是一个维护噩梦。是否有任何策略来管理这个?或者选择? Microsoft如何管理完整和紧凑的.NET框架?

+0

平板电脑的运行XP平板电脑版,因此无法运行CF.你的意思是掌上电脑? – ctacke 2009-02-12 18:22:01

回答

2

你的问题谈Tablet PC,这实际上就是XP,因此CF还真是不相关的,但对于这个问题主体本身,我们仍然可以谈论保持由CF和FFX使用的代码的缘故(假设你实际上是指Windows Mobile或Windows CE)。

要知道的第一件事是CF组件是retargetable。这意味着一个CF程序集可以直接被一个完整的框架应用程序使用,而不需要任何重新编译(假设它没有使用像P/Invoking coredll这样的设备特定的东西,而不检查运行时环境,使用WindowsMo​​bile命名空间等)。

如果使用重定向不会让你一路走到那里,那么你可以使用编译器指令以及部分类来处理maintennace。 Daniel Moth在his MSDN article中涵盖了这些技巧。

2

您可以做的一件事是,如果您可以分别编译每个平台,则可以使用编译器指令来限制Tablet PC平台所需的内容。但是,使用可能证明是困难的OR映射器。

现在,在一个理想的世界中,您实际上会拥有您的Domain对象(映射到OR的那些对象),而共享的业务逻辑却非常少。然后有一个使用这些Domain对象的BO层。如果你以这种方式设法打破了你的代码库,那么理论上你可以根据自己的需要选择需要部署的单独的图层。

但是,听起来更像是你需要进行智能分割。

您可能需要做的是分割您的代码,以使Tablet PC BO位于核心根BO组装体中。然后有一个BO扩展程序集,它具有Winform/Web应用程序版本所需的其他对象,规则等。

因此,虽然此时您将有两个域级别的业务对象组件,但您实际上不会有任何重复。由于您的Tablet PC BO对象也将成为Winform/Asp.net应用程序的基础。然后,扩展dll只包含更大版本的hte应用程序所需的额外资源。

如果您遵循此方法,可能会使管理更容易。只需从所需的Common东西和专门的方法来看它。 :)

我可以进入更多的细节,如果你想,只是想给你一个基本命中。