gpt4 book ai didi

c# - 这是策略模式吗?

转载 作者:太空狗 更新时间:2023-10-29 22:59:12 24 4
gpt4 key购买 nike

一点背景:

在我开发的系统中,需要读取各种类型的CSV文件,将内容保存在不同的数据库表中。由于这是关于根据输入改变行为,我研究了装饰器和策略模式,并为我的系统提出了以下解决方案。

首先我创建了以下接口(interface)。

  • ICDRMapper 从给定的 CSV 文件中读取每一行,并在运行验证/修改(如果有)后映射到一个对象。每种 CDR 类型都有许多具体实现。

  • ICDRReader 获取输入的 CSV 文件并读取每一行并将其传递给映射器。每个阅读器实现都装饰有 MEF 元数据,以便 ICDREngine 可以即时找到正确的阅读器。该接口(interface)还针对每个 CDR 类型有许多实现。

  • ICDREngine 实现使用 MEF 元数据来定位匹配的 ICDRReader 实现。这通常只有一个实现。

然后,我创建了一个 AbstractCDRReaderAbstractCDRMapper 并使用装饰器模式将特定实现委托(delegate)给不同的具体类。

AbstractCDRReader 像引擎一样根据 MEF 元数据选择正确的 ICDRMapper 实现。

下面是生成的类图。

generated class diagram

所以我的问题是,

  • 是这种策略模式还是另一种策略模式?

  • 有什么方法可以改进这个设计,以便下次我需要读取一个全新的不同 CSV 文件时,我可以非常快速地完成实现?

最佳答案

选择架构不要太看重设计模式,更要看逻辑思维。 您是否觉得您提出的内容可以轻松扩展为新型 CSV 文件?如果您这样做了,那么您就忘记了它是哪种模式,并确保您可以支持您的设计,并且您是能够向队友解释决定。

也就是说,它很可能是 Builder图案。从模式中看不出映射器的结果是什么,但我认为可以应用构建器。 enter image description here

基本上,AbstractMapperBuilder 部分,具体的映射器是 ConreteBuilder 并且肯定有一些 Director在你的架构中也是如此。它甚至听起来像 builder 。 “我有一个输入数据。我需要一些东西负责根据各种参数解析它并创建一个在我的应用程序的其余部分中使用的产品。”当你想到它时,你基本上是在构建一些东西,采用不熟悉的数据并构建已知对象 - 它会导致创建模式。

至于读者,可能是一样的,可能是策略,也可能是别的什么。这取决于您如何看待它以及它实际在做什么。

关于c# - 这是策略模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22222326/

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