Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在完整框架和紧凑框架之间共享DAL_C#_Dependency Injection_Refactoring_Compact Framework_Data Access Layer - Fatal编程技术网

C# 在完整框架和紧凑框架之间共享DAL

C# 在完整框架和紧凑框架之间共享DAL,c#,dependency-injection,refactoring,compact-framework,data-access-layer,C#,Dependency Injection,Refactoring,Compact Framework,Data Access Layer,我有WinCE应用程序在Compact框架上运行 DAL使用OpenNETCF.IoC库实现为IoC服务(仍在主EXE中)。 该层处理POJO类。使用ADO.NET provider的Compact Framework版本建立数据库访问。此版本已弃用,不受支持 现在我们应该有第二个应用程序,它将使用完整的框架在Windows桌面上运行。我希望在这两个应用程序之间共享一个数据访问层 正如我提到的,有两种方法: 快速而肮脏:在CF和FF之间共享DAL C#源代码。两个版本都应该使用 一些平台差异应

我有WinCE应用程序在Compact框架上运行

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

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

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

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

建议采用哪种方式?

因为您使用的是依赖项注入,所以从DAL中提取平台差异并将其隐藏在抽象后面相当容易。该抽象的特定于平台的实现可以注入到DAL类中。这允许您在CF和FF之间共享CAL C#代码,而无需返回到条件编译指令。在我看来,这种方法既不快速,也不肮脏。

一定要采用#1


既然您已经在抽象东西,为什么不抽象要使用的DAL,这样您就可以交换数据存储实现?如果你想避免陷入与特定数据存储绑定的陷阱。

好的,代码共享的第一种方式更合适?@hellboy:将这种逻辑隐藏在Web服务后面只是为了共享,这对我来说似乎太过分了。我的DAL现在是提供直接访问数据库的IoC服务。我现在用的是火鸟。正如我提到的,如果WinCE设备中使用内部数据存储(如SQLCE/SQLite抽象),那么您伟大的ORM框架将非常有用。我的应用程序仍然很简单:扫描条形码/执行SP或扫描条形码/显示数据库中的信息。您的ORM框架隐藏实体的CRUD,但所有my POCO实体都是只读的。