gpt4 book ai didi

c# - 用于实现业务逻辑的代码改进

转载 作者:太空狗 更新时间:2023-10-30 01:11:35 27 4
gpt4 key购买 nike

我问过this之前关于SO的问题。这与它有关。我们有类似于这样的代码库:

IRecipie FindRecipiesYouCanMake(IEnumerable<Ingredientes> stuff, Cook cook)
{
if(stuff.Any(s=>s.Eggs && s.Flour) && cook.DinerCook)
{
if(s=>s.Sugar)
return new Pancake("Yum");
if(s=>s.Salt)
return new Omlette("Yay");
}
/*.....
......
.....
loads of ifs and buts and else*/
}

我想摆脱这个烂摊子,走更多的数据结构和OO路线。即使是我提供的代码示例也没有现在那么可怕。我查看了规范模式并发现它适用。关于如何改进代码的任何想法。

编辑:既然我意识到了,我什至可能想实现这个签名的方法:

List<IRecipe> WhatAllCanBeCooked(IEnumerable<Ingredients> stuff, Cook cook);

最佳答案

我会将此逻辑委托(delegate)给各个 IRecipie 类:

if (Pancake.CanBeMadeBy(stuff, cook)) {
return new Pancake("Yum");
}
....


public class Pancake: IRecipe {
...
public static bool CanBeMadeBy(IEnumerable<Ingredientes> stuff, Cook cook) {
return stuff.Any(s=>s.Eggs && s.Flour && s.Sugar) && cook.DinerCook;
}

}

编辑以回应评论

要找到所有可以 cooking 的食谱,只需执行以下操作:

List<IRecipe> results = new List<IRecipe>();

if (Pancake.CanBeMadeBy(stuff, cook)) {
results.Add(new Pancake("Yum");
}
....

编辑 2或者,如果您将所有可能的配方列表存储在某处,则可以将 CanBeMadeBy 转换为实例方法而不是静态方法,然后执行以下操作:

List<IRecipe> allRecipes = // all possible recipes
...
return allRecipes.Where(r => r.CanBeMadeBy(stuff, cook));

关于c# - 用于实现业务逻辑的代码改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2157852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com