小编Bja*_*ing的帖子

函数式编程和解耦

我是您的经典 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)

现在在未来,如果我决定我们需要一个新的存储来提供类别,我可以为该特定服务定义一个新的实现,替换注入的类型,并且不会因为这个变化而弄乱依赖项。 …

c# f# functional-programming decoupling

37
推荐指数
3
解决办法
3684
查看次数

标签 统计

c# ×1

decoupling ×1

f# ×1

functional-programming ×1