我正在逐步切换到F#,用于我的许多家庭项目,但我对如何将完整应用程序,特别是跨领域问题联系在一起存在困惑。F#应用程序结构日志记录/存储库等
在C#中,如果我想记录东西,我会使用依赖注入来传递一个ILogger到每个类中,然后这可以很容易地从代码中调用。我可以在我的测试中验证给定特定情况下的日志写入,通过传递模拟并验证它。
public class MyClass
{
readonly ILogger _logger;
public MyClass(ILogger logger)
{
_logger = logger;
}
public int Divide(int x, int y)
{
if(y == 0)
{
_logger.Warn("y was 0");
return 0;
}
return x/y;
}
}
在F#我使用的模块多很多,因此上述将成为
module Stuff
let divde x y =
match y with
| 0 -> 0
| _ -> x/y
现在,如果我有一个模块调用记录我可以打开并从那里使用日志功能在y为0的情况下,但我如何将这个注入单元测试?
我可以让每个函数都有一个日志函数(字符串 - >单元),然后使用部分应用程序将它们连接起来,但这似乎是一个非常多的工作,就像创建一个新的函数一样,记录呼叫。是否有一个特定的模式或一点F#,我错过了,可以做到这一点? (我已经看到了kprintf函数,但我仍然不知道如何为各种测试场景指定函数,同时使用完整应用的具体实现)
同样,如何将存储库获取的数据?你需要实例化一些类并设置CRUD函数,或者有没有办法注入你打开哪些模块(除#define之外)
HTTP:/ /stackoverflow.com/questions/2003487/architectural-thinking-in-functional-languages http://stackoverflow.com/questions/192090/how-do-you-design-a-functional-program –