哪种设计模式是它?无法识别。

4

我有一个情况,需要按特定顺序调用我的方法。这在多个地方都出现过,所以我想知道是否有一些我看不到的模式。

目前,在每种情况下,我都有准备阶段,在此阶段执行基于先决条件的某些代码,操作阶段(其中修改数据)和保存阶段,在此阶段将其保存到数据库中。 现在我有:

accessRightsService.Shift(document, userRole);
updateService.ApplyChanges(document, newData);
documentRepository.Update(document);

我在思考类似于myService.WrapOperation(doc, d => {})这样的东西,它会先调用准备函数,然后执行操作,最后将结果保存到数据库中。
所以,这是一种模式吗?如果是,是哪一种模式呢?
在我看来,它并不像模板方法或装饰器。

1
http://www.dofactory.com/net/facade-design-pattern 或者 http://www.dofactory.com/net/command-design-pattern。 - Eminem
@Eldho 刚刚完成了这件事。 - chester89
2
不是为了贬低它们的实用性,但世界并非完全由设计模式构成。 - TaW
2
@TaW,示例代码真的很糟糕(商标),因为存在秘密的时间耦合。仅通过检查方法签名,根本无法知道它们彼此依赖,并且必须按特定顺序调用。这里需要进行一些重构。 - sara
1
你是否遇到了重复的代码,可以提取到一个方法中吗?http://refactoring.com/catalog/extractMethod.html - Fuhrmanator
显示剩余7条评论
1个回答

1
这与“构建者模式”非常相似。尽管构建者模式说明它用于类实例化,但它也可以应用于方法调用。

http://www.blackwasp.co.uk/Builder.aspx

public class Director
{
    public void Construct(Builder builder)
    {
        builder.BuildPart1();
        builder.BuildPart2();
        builder.BuildPart3();
    }
}


public abstract class Builder
{
    public abstract void BuildPart1();
    public abstract void BuildPart2();
    public abstract void BuildPart3();
    public abstract Product GetProduct();
}


public class ConcreteBuilder : Builder
{
    private Product _product = new Product();

    public override void BuildPart1()
    {
        _product.Part1 = "Part 1";
    }

    public override void BuildPart2()
    {
        _product.Part2 = "Part 2";
    }

    public override void BuildPart3()
    {
        _product.Part3 = "Part 3";
    }

    public override Product GetProduct()
    {
        return _product;
    }
}


public class Product
{
    public string Part1 { get; set; }
    public string Part2 { get; set; }
    public string Part3 { get; set; }
}

这看起来很像模板方法,只是在这里你在客户端代码中定义步骤顺序。 - chester89

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