【发布时间】:2013-11-21 13:22:17
【问题描述】:
我正在尝试在 C# 中设计一个类层次结构来正确建模我的应用程序模型。 问题是我不确定哪种方法是正确的。
假设我有一个 Order 类,它应该是所有订单类型的基础(抽象)类和我在使用订单时使用的引用类型。订单类只有一个“重要”方法:我们称之为 order.PlaceOrder(),但是订单可能必须执行(或不执行)多个(正交)要求:记录下订单、下订单异步排序(PlaceOrder 方法立即返回)等。
现在,我想创建可以支持任意数量的这些要求的实际具体类。例如: GoogleOrder 类:LoggedOrder、AsyncOrder 等 AppleOrder 类:AsyncOrder MicrosoftOrder 类:订单
问题是:如果我想通过从所有“策略”派生来创建这样一个类,那么它们(除了一个)都必须是接口,而我希望继承实际实现并避免复制/粘贴代码,我不知道该怎么做。
我来自 C++ 背景,我可以从多个基类派生(或者可能使用基于策略的设计,如 Andrei Alexandrescu 在他的书中描述的),但在 C# 中我不知道该怎么做,尽管这似乎是一个非常笼统的问题,但我现在应该知道了。
非常感谢任何帮助!
【问题讨论】:
-
这个问题比较适合程序员-programmers.stackexchange.com
-
或者您应该在单独的类层次结构中将订单上的实际“操作”分开。例如,您将拥有基类“OrderProcessor”,然后是派生类“AsyncOrderProcessor”和“OrderLogger”。
-
对于一些简单的事情,比如日志记录策略,很容易在构造函数中传入一个 Logger 接口(甚至是空的)并使用它来记录,但对于其他事情,比如执行异步,我没看到...
-
这些问题对我来说似乎不清楚。您不能将所有方法都放在基础中并根据需要从派生中调用它们吗?我什至不确定你是否解释了为什么需要派生。
标签: c# class design-patterns hierarchy