gpt4 book ai didi

c# - 锁定类的功能,包括依赖项

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:20 24 4
gpt4 key购买 nike

我想设计一个框架,开发人员将能够对其进行子类化、插入单个方法并使其适合我的其余处理框架。他们实现的方法为他们提供了一条 Kafka 消息,并且他们执行生成他们返回的 DomainReportItem 对象所需的任何逻辑。我的其余框架计划、排队、发布这些项目的批处理,我希望他们无法利用这些项目、操纵它或手动执行操作。

问题是我的实现公开了一个抽象类,他们必须对其进行子类化并实现一个抽象方法。这一切都很好。

唯一的问题是抽象类的功能依赖于许多通过构造函数传递的 DI 对象。当然,当开发人员对其进行子类化时,他们必须将这些项目传递到他们自己的构造函数中并调用 base(DI params)

拥有 DI 对象将允许他们手动操作事物并自己发送我不想要的提交。

处理此问题的最佳方法是什么?我能想到的唯一方法是设计某种构建器工厂,在其中向它传递一个实现所需功能的委托(delegate)方法,然后返回一个对象。因此它处理对象本身的构造,使其对用户保密,并将 DI 对象插入黑盒中。将开发人员提供的委托(delegate)功能插入到抽象方法引用中,并传回一个构建项。

但我不完全确定是什么模式或如何建立这样一个工厂。有没有人有关于如何执行此操作的链接或解释?

最佳答案

当你遇到这样的情况时,回到第一条规则——总是prefer composition over inheritance .

您正在创建一个职责太多的类。您真的只需要一种方法来确保您的消费者编写从 Kafka 消息到 DomainReportItem 的自定义转换——这完全独立于发送提交或操作报告。这些不应该放在同一个类(class)。

我不知道用例或应用架构的细节,但 Strategy Pattern可能会让你的生活更轻松。您的类可以将 IMessageConversionStrategy(或任何您想调用的名称)作为方法参数。它可以从队列中读取,调用转换策略返回一个DomainReportItem,然后继续处理。然后消费者可以随时随地实现该接口(interface)。

关于c# - 锁定类的功能,包括依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43808890/

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