这是一个通用的软件设计问题。
使用#if 编译器指令来支持多个平台是否是个好主意。例如,我有三个文件:
IScreen.cs
public interface IScreen {
...
}
ScreenWin.cs
#if WIN
public class Screen : IScreen {
...
}
#endif
ScreenMac.cs
#if WIN
public class Screen : IScreen {
...
}
#endif
看起来很酷的是我可以使用 BDD 并拥有类似的东西:
Given a Screen exists with width: 1920 and height: 1080
并且将根据编译器指令使用正确的屏幕。
与尝试使用抽象工厂相比,这似乎也可以获得更好的性能。
有哪些缺点?