2017-03-16 1 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 #이 (가) IClibApi와 같은 f # dll (예 : IClibApi)의 인터페이스를 정의하면 (예 : ConcreteClibApi가 IClibApi를 확장 함). ConcreteClibApi의 인스턴스를 만들고이를 f #에 전달합니다. 이제 f #은 IClibApi를 통해 C#를 호출 할 수 있습니다.

나중에 ConcreteClibApi 포팅을 시작할 수 있습니다.

관련 문제