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

时间:2017-05-05 15:40:27

标签: c# design-patterns

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

问题是我的实现暴露了一个抽象类,它们必须子类化并实现一个抽象方法。这一切都很好。

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

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

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

但我不完全确定什么样的模式或如何建立这样的工厂。有没有人有如何做到这一点的链接或解释?

1 个答案:

答案 0 :(得分:0)

遇到这种情况时,请返回#1规则 - 始终prefer composition over inheritance

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

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