使用F#实现BLL是否有意义?

4

您认为使用F#实现业务逻辑层是一个好主意吗?我打算使用Entity Framework作为“数据映射器”,并使用C#实现UI逻辑。

欢迎任何想法。我会非常感激任何帮助!

谢谢。

P.S.这有什么目的?我是F#的新手,想试验一下这种语言(技术)。我必须实现一个相对较小的项目,获得F#经验可能是个不错的选择。

4个回答

5
在F#中实现“实际数据处理”可能是目前F#最常见的用途,因此在F#中实现业务逻辑似乎是一个不错的选择。
我认为你不会轻易地直接从F#使用Entity Framework,所以你需要使用C#生成数据模型并将相关数据暴露给F#。如果你想使用LINQ to SQL,那么你可以在C#中生成映射,并使用PowerPack在F#中编写查询(正如Mitya所建议的那样)。
也许最容易的方法是有三个项目:
  • C#数据访问层,简单地使用Entity Framework并公开重要数据(使用IEnumerable类型,可以轻松从F#中消耗)。

  • F#业务层使用数据执行“实际处理”,并公开可以从C#使用的几种类型。如果您声明一个F#类,它将像任何普通的.NET类一样编译,因此您可以轻松地从C#中使用它。您只需要注意不要在公共接口中使用F#特定的功能。一些建议是使用委托(而不是函数),类类型和IEnumerable(在F#中称为seq)而不是函数列表。

  • C#用户界面层调用在F#中声明的类型。如果您遵循上述简单规则,则C#代码可以轻松调用F#类型。

作为一个旁注 - 即使 F# 不支持设计师,它也可以非常适合用户界面编程(例如参见this article或者我的演讲about Silverlight in F#)。你可以做的一件事是在 C# 库项目中创建用户界面,将所有内容标记为 public,然后从实际控制用户交互的 F# 项目中引用它。但是,这有点更高级,所以我认为从业务层开始是个好主意。

1
所有的建议都很好;不过我认为数据访问层可以暴露IQueryables而不是IEnumerables(这意味着保持C#层最小化 - 只有edmgen生成的内容)。 - Dmitry Lomov
Entity Framework 在 F# 中也可以很好地工作,但为了简单起见,最好还是坚持使用 C#。无论哪种方式,都是很好的建议。 - user438034
@Mitya:你说得对。它取决于情境。例如,在当前版本的 F# 中编写分组或连接不是很容易,因此最好在 C# 中完成(以便简化)。但是,通过公开 IQueryable ,您不会失去任何东西,所以这可能是个好主意。 - Tomas Petricek

4

我只能代表自己说,但是在克服最初的F#学习曲线之后,我发现:

1) 我的F#代码比C#或C++更加简洁。

2) F#更易于维护。

3) 我能够更清晰地想象出解决问题的方案。

4) 我在F#中设计的模式更容易在新程序中重复使用。

因此,我将在许多未来的编码任务中考虑F#,包括BLL。

-Neil


3

你完全可以这样做。

我建议将UI逻辑保留在C#中,因为VS对F# UI设计的支持还不是非常好。


1
可能有原因。例如,OP指出“我是F#的新手”……如果这是一个有截止日期的生产系统,那么在尝试交付系统时学习语言可能不是一个好主意。 - codekaizen
不是“真正的生产”…… :) 我觉得测试是明智的 :) 但无论如何谢谢。 - Budda

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接