跨.NET子集共享我的界面实现

时间:2018-01-05 18:57:15

标签: .net mono .net-standard

我正在试图找出在可能引用不同.NET实现的项目中共享某个类的最佳方法,每个项目都有自己的库子集。

在昔日的日子里,我们曾经拥有过良好的'.NET Framework。然后是Mono和Xamarin。后者引入了可移植类库的概念,它是一个只使用.NET子集的库,因此可以在不同的平台/ .NET实现上使用。最近,.NET Core和.NET Standard为这一领域带来了更多变化。我喜欢.NET Standard几乎可以移植到任何地方,但这会给我带来设计问题。

传统上,我会使用我的应用程序的核心逻辑创建一个类库项目,然后添加一个仅关注应用程序的前端项目(无论是WinForms,WPF,Web应用程序还是移动应用程序) - 级别,特定于平台的功能。例如,库将具有数据类和ProductsDatabase类,定义与数据库的连接和数据对象的管理;在前端项目中,我将创建一个使用该类并生成HTML页面的控制器,或者生成Android活动的视图模型。

但是,在Xamarin PCL或.NET Standard类库中,我无法引用System.Data.dll。事实上,我可以使用Mono.Data.Sqlite命名空间(至少在PCL中),但是只要我调用SqliteConnection.Connect()就不会编译。通常,我在我的可移植库中定义了一个接口,我将在前端项目中实现该接口。但是,这意味着我的平台特定项目必须实现MySQL数据库,SQLiteDatabase,以及谁知道其他许多事情。但是,Android应用程序的SQLite数据库应该与iOS应用程序(通过Xamarin)或使用Mono的任何应用程序相同。移动到不使用Mono的平台时可能会有所不同,例如WPF应用程序和ASP.NET MVC Web应用程序。但是,你明白了。

所以,我的问题是:在特定于平台的项目之间共享代码实现的最佳方法是什么?我应该添加一个中间层,最后是三个:一个具有最不可知的类和接口,一个中间的具有特定于平台但可共享的实现,而上一个具有实际的可执行项目?还是有另外一种我缺少的设计模式?

0 个答案:

没有答案