【发布时间】:2013-08-13 15:55:51
【问题描述】:
我有不同种类的报价单,例如船报价单、摩托车报价单、汽车报价单,它们都派生自 Quote 类。当客户想要获得报价时,我只需要返回报价。 我可以通过两种方式实现:
工厂:
public class QuoteFactory{
public Quote GetQuote(string QuoteType )
{
if(quoteType = "car")
{
return new CarQuote()
}
}
使用 Spring.Core 进行 DI
将所有引用类型添加到上下文中,然后让客户决定需要哪种类型。 提前致谢。
【问题讨论】:
-
您应该使用满足您需求的一种,并且您只概述了一种您认为可以同时满足两种方法的方法。您还没有为 DI 案例提供任何代码,我不确定您将如何使用 DI 实现这一点。如果它们都满足您的需求,如果您发现您的设计妨碍可测试性或其他任何问题,请掷硬币并稍后重构。
-
你是在吹嘘还是有问题?
-
@itsme86 我认为这是“我应该使用工厂还是 DI?”尽管如此,这不是一个很好的问题,因为两者都做同样的事情并且选择是任意的,缺乏其他要求,或者只有其中一个可以工作并且选择是显而易见的。 (或者 OP 希望我们给他一个关于非功能性设计约束的概要,在这种情况下,我的魔法八球说前景不是很好,因为这些天对于建筑宇航员的独白来说 SO 并不多。)
-
@itsme,把我当成一个学习设计模式的新人吧:)
-
那么,我可以推荐一本书吗?此外,当涉及到它们解决的问题时,设计模式并不是零重叠的。当前的集体想法是 SO 不是教学网站,以及“做 X 的最佳方法是什么?”缺乏任何其他约束的问题表现不佳。特别是因为这意味着您的问题没有上下文,并且“现实世界”的解决方案实际上可能是几个工厂,每个工厂都在需要的地方注入。 (所以销售汽车的模块会得到
CarQuoteFactory等)或者它可能不会,没有上下文就不容易分辨。
标签: c# design-patterns ooad