【问题标题】:Sharing DAL between full and compact framework在完整和紧凑的框架之间共享 DAL
【发布时间】:2014-04-27 02:00:42
【问题描述】:

我在 Compact Framework 上运行了 WinCE 应用程序。

DAL 使用 OpenNETCF.IOC 库实现为 IoC 服务(仍在主 EXE 中)。 该层处理 POJO 类。使用 Compact Framework 版本的 ADO.NET 提供程序建立数据库访问。此版本已弃用且不受支持。

现在我们应该有第二个应用程序,它将使用完整框架在 Windows 桌面上运行。我希望在这两个应用程序之间共享一个数据访问层。

正如我提到的,有两种方法:

  • 又快又脏:在 CF 和 FF 之间共享 DAL C# 源代码。两个版本都应该使用 一些平台差异应该通过条件编译指令来解决
  • DAL 代码必须从 CF 应用程序移动到新的 FF 应用程序(可以实现为 WCF 服务)。 CF 应用现在通过客户端界面访问数据库。

推荐哪种方式?

【问题讨论】:

    标签: c# dependency-injection refactoring compact-framework data-access-layer


    【解决方案1】:

    绝对选择#1。

    既然您已经在抽象事物,为什么不抽象 DAL 以使用 an ORM that is compatible with both the CF and the desktop 并允许您交换数据存储实现? If 将避免您陷入被绑定到特定数据存储的陷阱。

    【讨论】:

    • 我的 DAL 现在是提供对数据库的直接访问的 IoC 服务。我现在正在使用火鸟。正如我提到的,如果在 WinCE 设备中使用内部数据存储(作为 SQL CE /SQLite 抽象),那么您出色的 ORM 框架会很有用。我的应用程序仍然很简单:扫描条形码/执行 SP 或扫描条形码/显示来自 db 的信息。您的 ORM 框架隐藏了实体的 CRUD,但我所有的 POCO 实体都是只读的。
    【解决方案2】:

    由于您使用的是依赖注入,因此从 DAL 中提取平台差异并将它们隐藏在抽象之后会相当容易。该抽象的特定于平台的实现可以注入到 DAL 类中。这允许您在 CF 和 FF 之间共享 CAL C# 代码,而无需恢复到条件编译指令。 IMO 这种方法不又快又脏。

    【讨论】:

    • OK,第一种方式有代码共享比较合适?
    • @hellboy:将这个逻辑隐藏在 Web 服务后面只是为了共享对我来说似乎有点过头了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多