我是您的经典 OOP 开发人员。然而,自从我发现纯函数式编程语言以来,我一直对为什么OOP 似乎以合理的方式解决大多数业务案例感到好奇。
在我的软件开发经验中,我现在已经到了寻求更简洁和更具表现力的语言的地步。我通常用 C# 编写我的软件,但对于我的最新项目,我决定采取飞跃并使用 F# 构建业务服务。在这样做时,我发现很难理解如何使用纯函数方法完成解耦。
情况是这样的。我有一个数据源,即 WooCommerce,但我不想将我的函数定义与该特定数据源联系起来。
在 C# 中,我很明显想要一个看起来像这样的服务
public record Category(string Name);
public interface ICategoryService
{
Task<IEnumerable<Category>> GetAllAsync();
}
// With a definition for the service that specifies WooCommerce
public class WcCategoryService : ICategoryService
{
private readonly WCRestEndpoint wcRest;
// WooCommerce specific dependencies
public WcCategoryService(WCRestEndpoint wcRest)
{
this.wcRest = wcRest;
}
public Task<IEnumerable<Category>> GetAllAsync()
{
// Call woocommerce REST and map the category to our domain category
}
}
Run Code Online (Sandbox Code Playgroud)
现在在未来,如果我决定我们需要一个新的存储来提供类别,我可以为该特定服务定义一个新的实现,替换注入的类型,并且不会因为这个变化而弄乱依赖项。 …