2017-03-16 53 views
4

我的工作将不得不从C#迁移到基于什么对表明天带来了食品F#项目的F#和C#方 - 换句话说,这两种语言都住并排在这个项目中未来几年。如何组织并排

我一再面临的问题是我应该怎么组织项目的解决方案来满足这一需求。

我翻译从C#件F#所有的时间,因为它经常缩短了开发时间,提高质量。但是,我最终想要使用F#代码的C#代码和想要使用C#代码的F#代码,在同一图层中,或者在图层或模块之间的边界上。我发现自己把代码放在错误的项目中,只是为了避免在某个层次上创建另一个项目。

现在的情况还不错,但我担心,我会自己画成一个角落在某些时候,除非我能拿出一个图案或结构,或者简单地理解这个问题更好。

是否对正常的F#架构(模式,子结构或上层建筑)进行了一些修改,它非常适合这种混合解决方案?

有没有已知的模式对解决这个特殊的挑战特别有帮助?

+5

你能提供一个例子吗?我认为现在这个问题有一个很好的话题,但对于具体的建议来说这太抽象了。 – CodeMonkey

+1

举一个例子:我将各个地方的实用程序方法移动到库CsUtils中。然后我将一些实用方法转换为F#并将它们移动到库FsUtils中。到现在为止还挺好。但我希望实用方法能够相互使用。 CsUtils可以使用FsUtils,或者FsUtils可以使用CsUtils,但不能同时使用。我是否还创建了另一个库,是否真的足以解决所有可能出现的依赖问题? –

+0

所以现在你只有CsUtils,但你正在把它们中的一部分迁移到FsUtils。所以CsUtils需要调用一些你的FsUtils。但是如果您从不依赖于其他CsUtils的CsUtils开始迁移,则不需要采用其他方式。 – CodeMonkey

回答

6

使用接口两种语言之间的通信。

通常移植时,F#是较低级别的DLL和C#可以调用F#如常。

现在让f#来调用c#在c#中实现的f#dll(例如IClibApi)中定义一个接口(例如ConcreteClibApi扩展IClibApi)。创建一个ConcreteClibApi的实例并将其传递给f#。现在f#可以通过IClibApi调用c#。

以后你就可以开始移植ConcreteClibApi :)