【发布时间】:2016-02-24 21:19:56
【问题描述】:
我正在开发一个 Xamarin.Forms 解决方案,该解决方案使用 PCL 库在我的 Android 和 iOS 项目之间共享代码。这在大多数情况下效果很好,因为大多数 UI 和逻辑代码都可以保存在一个地方。当然,我使用DependencyService 创建了一些特定于平台的类并链接到 PCL,这对于大多数类来说都很好,因为平台之间的代码有很大不同(例如 UI 布局/外观)。
但是,有一个类子集使用了 PCL 项目不可用的各种命名空间(尤其是 System.Data 命名空间)。为了绕过这个限制,我必须为这些类中的每一个编写一个 DependencyService。我担心的是 Android 和 iOS 之间的代码完全一样,只是少了一两行。代码非常复杂,我不想在需要时记住更新它两次。
考虑到由于必要的命名空间不可用,我无法将代码放入 PCL 中,有什么方法可以减少这两个项目之间重复的代码量?
【问题讨论】:
-
我使用
bait and switch方法 (log.paulbetts.org/the-bait-and-switch-pcl-trick) 但通过创建两个特定于平台的项目在特定于平台的程序集中使用相同的代码文件,包括/链接每个项目中的这些代码文件一个共享项目,然后对平台之间更改的几行代码使用平台编译器指令......因此,通过将 PCL 样式的代码与平台指令混合,您可以跳过重复的代码 PCL requires ... -
(cont'd)... 如果您有非常大的接口定义或快速更改的接口定义,为了节省更新 PCL 虚拟签名的时间,我使用 T4 模板来定义和生成接口和平台-特定的部分类...
-
@SushiHangover 不错的把戏。将把那个粘在袖子上:)
-
@Mage Xy,管理那些只有几行差异的大型代码库的有效方法是将有问题的代码放入共享项目并 if-def 该代码。 #ifdef 不是最简洁的方式,但如果它在整个代码主体中只有 1 或 2 行,则成本相当低。
标签: c# xamarin cross-platform xamarin.forms code-duplication