Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在同一溶液中混合F和C的模式_C#_.net_Design Patterns_F# - Fatal编程技术网

C# 在同一溶液中混合F和C的模式

C# 在同一溶液中混合F和C的模式,c#,.net,design-patterns,f#,C#,.net,Design Patterns,F#,我学习了一些函数式语言,主要是为了学术目的。尽管如此,当我必须设计一个客户机-服务器应用程序时,我总是开始采用域驱动的设计,严格来说是OOP 在.Net框架中编写的复杂解决方案使用的不仅仅是一种语言,有时也不仅仅是一种范例,它可以获得优势。将C或C++与Lua或Python混合是一种常见的实践,有时嵌入Prolog可以很有趣。 我从未尝试过将OOP和函数范式混合使用 F#是一种较新的函数式面向对象语言,我认为在同一个解决方案中混合C#和F#库在技术上非常容易。但我想知道这是否有意义:我使用LIN

我学习了一些函数式语言,主要是为了学术目的。尽管如此,当我必须设计一个客户机-服务器应用程序时,我总是开始采用域驱动的设计,严格来说是OOP

在.Net框架中编写的复杂解决方案使用的不仅仅是一种语言,有时也不仅仅是一种范例,它可以获得优势。将C或C++与Lua或Python混合是一种常见的实践,有时嵌入Prolog可以很有趣。 我从未尝试过将OOP和函数范式混合使用

F#是一种较新的函数式面向对象语言,我认为在同一个解决方案中混合C#和F#库在技术上非常容易。但我想知道这是否有意义:我使用LINQ来满足我的许多功能需求

什么时候,怎样,你认为把这两种语言混合在一起是个好主意吗? 我想知道是否存在一套尝试这种方法的模式


你真的在C解决方案中使用F吗?

在某些地方,传统的函数技术非常有意义,并且会产生更小更简洁的代码。一个典型的例子是文本解析和树处理,当您实现DSL时,这两者经常同时出现。F#匿名迭代器、可扩展模式匹配以及定义自定义中缀运算符作为组合符的能力等功能在这方面确实有很大帮助。与此同时,在C#side,LINQ是一个良好的开端,但它不会让你一路走到那里


我建议您看一看,看看它比用C#编写的任何库更适合高级文本处理/解析

你让我思考,我试着决定在哪里做。我突然想到两种情况:

  • 如果我在做一个castle(MVC)项目,我可能会在C中有控制器,而所有BL和模型都在F中(我倾向于进行领域驱动设计,并将BL连接到模型中,或者通过注入组件[ala DI])
  • 开始一个新的项目,但合并现有的库,以避免重新发明轮子

  • 此外,我是“适合工作的正确工具”的大力倡导者,因此如果我认为其中一种更适合,我会使用它。

    语言只是一种工具。和卢克一样,我也非常喜欢在工作中使用正确的工具。如果某个特定的应用程序同时使用C#和F#会从中受益,那么混合对我来说似乎是合理的

    有关如何操作,请参见:


    一句话:作为后期构建步骤,您可以将使用不同语言的两个DLL合并到一个DLL中。或者,您可以在服务器端编译的网站中使用多种语言。

    我已经在F#中编写了一个WCF服务,它充当用于读取WFS(地理空间数据)服务的转换器插件。代码很好,很简洁

    虽然我编译的独立dll在我同事的C#解决方案中运行良好,但当我向他展示代码时,他确实试图扼杀我。我想是文化冲击

    那么我们在同一个项目中使用了F和C吗?是的,也不是。不是,因为我用C#重写了这个东西。是的,因为用F#构建和测试原型比我把它翻译成C#LINQ风格节省了更多的时间


    我不想尝试在F#中构建所有东西,但我耐心地等待有一天我可以在F#中处理混合语言解决方案的数据处理/算法部分,而不用担心我的生命。

    是的,将来我认为我们必须将OOP(C#)和函数式语言(F#)结合起来利用多核处理的优势。C#4有支持这一点的类,但有些东西在F#中做得更好。

    我在C#解决方案中使用F进行探索性编程。例如,我通过visualstudiosf交互式控制台启动我的C#WPF应用程序,并在运行的应用程序中漫游。可以为您节省大量的编辑编译调试会话。

    我们有一个应用程序,它通过加载部件获得所有功能。 大多数部分都是用C#编写的,但有一部分是用F#编写的二进制数据处理。在这种情况下,F#更适合这份工作

    F#部件符合C#中定义的接口,C#应用程序对此一无所知 它处理的是一个F#部分(而不是对fsharp.dll的依赖)

    当然,这不仅仅适用于F#,如果有人想用不同的语言编写或重写一个部件(插件、模块,无论你想叫它什么),MEF会选择它,并将其提供给我们的应用程序,而不会有任何缺点


    我们选择最适合解决特定问题的语言,MEF将所有细节从我们身边抽象出来,因此我们没有什么可担心的。

    还没有尝试过它,但有一个地方我肯定想使用函数式语言,尽管这可能不是使用它的理由,这样我就可以避免这里所描述的

    我想把它命名为动词,然后执行它


    CalculateMething()而不是SomtingCalculator.Execute()

    这似乎是一个“投票”问题。应该是社区维基。不过,这是一个很好的民意测验。为了清楚起见,你实际上将它们混合在同一个“解决方案”中——一个项目等同于一个库(泛化)。@a Levy:你的意思是我应该标记“Wiki社区”复选框吗?谢谢。@卢克:更正,谢谢。F#使事情变得更简单、更简洁的另一个具体领域是异步操作,通过异步工作流习惯用法。@Pavel:FParsec非常有趣,我将研究它。你认为Haskell版本的翻译使用了F#能够表达的所有功能吗?我可能不太了解F#来回答这个问题:),但就我所见,它确实使用了很多功能(工作流-
    parse{…}
    -最明显的是)。F#中的模型意味着您无论如何都要使用OO范式,对吗?为什么会这样?有什么好处?也许我的BLs太简单了,无法理解。