Spiga

FAQ - 什么是软件工厂?(翻译)

2006-11-25 00:03 by Jeffrey Zhao, 3100 visits, 网摘, 收藏, 编辑

前言

Microsoft Patterns & Practices已经提供了不少“软件工厂(Software Factory)”,例如Smart Client Software FactoryWeb Service Software FactoryMobile Client Software Factory。而在CodePlex上也已经有了Microsoft P & P Team正在开发的下一代产品:Web Client Software Factory。这是一个非常有价值,非常值得关注的项目,目前正在以Weekly Drop的形式发布,按照计划将会在年底发布。在Terry Lee和我都曾经对它进行过介绍。

那么什么是“软件工厂”呢?它的作用又是什么呢?Jezz Santos在写了数篇有关这方面非常精彩的文章,他本人已经同意我将其文章进行翻译。我将陆续将它们翻译成中文,帮助大家和我自己理解一些概念。

原文信息

原文《FAQ - What is a Software Factory?》公布在Jezz Santos的博客上,版权归作者所有。
 

正文翻译

什么是“软件工厂”?这个问题经常能够引发下面的疑问:

如何给出软件工厂的定义?紧接着考虑下面的问题:我创建了一个命令行程序/一个指导性的包(Package)/一段脚本用于生成一些有用的组件 - 请您作出选择,它们也是软件工厂吗?

想用三言两语就给出清楚定义还真不是一件容易的事情。

背景

事实上这并不是个足够完整的问题,大多数人也正有这样的疑问,而且他们正在通过一些已经做好的东西或者重新去理解它们的区别,来设法搞清楚自己是否已经有了一个“工厂”或者“工厂”对他们来说还是个新事物。

解答

让我们先从“软件工厂”的官方定义开始谈起,然后我会尝试着使用更简单的词汇来解释它,并且使用一些示例来给出这些定义的衍生,希望能帮助您理解这些。

您能在这里找到一个官方而泛泛的定义,但是我想从JackKeth的那本有关软件工厂的书中所使用的那段短小些的定义开始。您也能够在我们的术语表中找到另一些定义。

软件工厂是使用一个基于软件工厂模式(Software Factory Schema)的软件工厂模版(Software Factory Template)来配置外部工具,过程和内容的一条产品线。通过适配(Adapting),装配(Assembling)和配置一些框架化的组件,能够自动化地对一个典型架构的产品进行开发和维护变化的工作。”

呃……好吧(“咕嘟”——咽了一下口水),这是一个学院派定义,我们来将它进行一点小小的延伸:首先,“软件工厂”的基本元素是一条使用一系列的工具(比如编辑器,代码模版,领域专用语言,命令行工具等等)创建出来的“产品线”。这些工具会是用一个被称为“工厂模版”的东西来配置普遍适用的,能够扩展的开发工具(就像Visual Studio)。工厂模版实际上只是“工厂规范”的一个物理实现(例如,一个工厂模版包含了工具,指导和这些工具创建和配置一些东西的蓝本)。接着,则会通过组装一些必须的组件,把这些工厂创建出来的不同产品的开发和维护过程进行自动化操作——理想情况下,这个过程会复用那些作为产品基础而存在的框架。

好吧,这里最关键的一点是产品线工厂规范,它的工厂模版以及一个产品。在我看来,如果您有了所有这些,您就已经基本上接近于有了一个工厂了,因为剩下的玩意儿都是通过这些东西来得到的。

“框架”也是非常重要的东西,因为有了它,您就已经在“为产品线上的产品定义变量”这个过程中迈出了一大步,大多数的工作它已经帮你完成了。请记住,您不应该为一个您还没有解决的方案创建一个工厂,因此,创建一个工厂最基本的前提是:您已经有了对一些解决方案进行自动化操作的资本。

[当Visual Studio团队发布了一些能够帮助您自定义软件工厂的工具,那么微软对于这些术语的定义会变得更为具体,而且我猜想,如果要完全符合这个具体的工厂模版,您只能使用被微软认可的软件工厂。但是就目前来说,您任何可以使用当前的工具和一些您自己的“创新”来创建符合上述定义的软件工厂。]

产品

让我们先从产品谈起,首先搞清楚一点:一个产品是一个特定的工厂创建的产物。

“一个产品是一个工厂生产线的最终产物”

千万不要将“生产线(production line)”和“产品线(product line)”混淆起来。

现在,一个产品并不需要真正的完成,结束,包装成一个像“Microsoft Word”这样的东西,虽然可能大多数人听到“产品”这个词的第一反应是这个。这个单词的含义只是描述一个工厂的产出。

例如,一个汽车引擎制造商生产出了汽车引擎,这就是它的“产品”,然后把引擎卖给其它的工厂,让它们将这些引擎组装进一辆汽车。一个汽车引擎依旧属于一个引擎工厂的“产品”。

所以,所有的工厂会建造一个有用的产品,这个产品可能会被组装进入一个更大的产品,当然也有可能不会。

工厂会为这个产品定义一个模型,这就是这个产品的“模式(schema)”,它包含了产品的各个部分和它们的变量。这个模型为用户提供了一个独立创建,配置或者维护产品各部分的方法。

工厂模式(Factory Schema)与工厂模版(Factory Template)

我们已经花了不少功夫定义了工厂模式(Factory Schema),所以我不打算在这里再完全重复一遍。

不过我们在这里这么说已经足够了:“工厂模式”是产品(和它的变量)以及它的各种配置的蓝图——也就是工厂产物的蓝图。它不只定义了工厂该建造那些东西,也包括建造这些东西方式,建造时所用的“零件”,以及在建造时所使用的工具。

顺便提一下,“工厂模版(Factory Template)”则是指工具、运行时、文档和框架等其它作为您的工厂的的组成部分一起发布的那些东西——例如一起打包在一个MSI安装文件中。

产品线

那么现在就谈一下产品线——这到底是什么?这可不是指“生产线”。

产品线,由工厂产物的变量组成。

好,为了真正对开发有用,工厂需要能够创建产品的多个实例(我们把其中的一个叫做一个“产品变量”)。更准确的说,一个产品“变量”就是每一个您生产出的实例,而不是产品的实际类型。一个工厂能够定义多种产品的“类型”(每一个对应了产品的一个可变的方面)。

因此,您的产品线定义了您工厂的解决方案领域

[您能够在这里得到有关一个产品可变性以及其变量(是什么?应该如何使用?)更深入的讨论。]

 

那么,您的一个命令行程序/一个指导性的包(Package)/一段脚本是一个软件工厂吗?

0
0
(请您对文章做出评价)
« 上一篇:F# Resources
» 下一篇:AJAX培训第二讲:使用AJAX框架(上)
Add your comment

19 条回复

  1. #1楼 TerryLee      2006-11-25 00:16
    WCSF是个好东西,一直在关注:)
      回复  引用  查看    
  2. #2楼[楼主] Jeffrey Zhao      2006-11-25 00:21
    @TerryLee
    我就是因为它所以想再去仔细了解一下相关内容。:)
      回复  引用  查看    
  3. #3楼 cenlei[未注册用户]2006-11-25 10:01
    感觉有点模糊
    不过大概意思是知道了
      回复  引用    
  4. #4楼 听雨[未注册用户]2006-11-25 10:12
    感觉不太懂,看来得加紧努力了..
      回复  引用    
  5. #5楼 小蜗牛      2006-11-25 10:21
    re,加紧努力。
      回复  引用  查看    
  6. #6楼[楼主] Jeffrey Zhao      2006-11-25 10:42
    @cenlei
    其实我和你差不多感觉。:)
      回复  引用  查看    
  7. #7楼[楼主] Jeffrey Zhao      2006-11-25 10:43
    @听雨
    我会把这一系列的都翻译一下,如果还是不清楚的话我会修改一下翻译。:)
      回复  引用  查看    
  8. #8楼 idior      2006-11-25 11:08
    software factory有本书 老赵知道吗?
    可以参考一下,我是没看完 -_-||
      回复  引用  查看    
  9. #9楼 wc[未注册用户]2006-11-25 16:48
    先翻译一下Web Service Software Factory,这个可以作为WCSF和SCSF的应用底层
      回复  引用    
  10. #10楼[楼主] Jeffrey Zhao      2006-11-25 17:06
    @wc
    多谢您的建议。:)
      回复  引用  查看    
  11. #11楼 Justin      2006-11-26 12:34
    有点晕
      回复  引用  查看    
  12. #12楼[楼主] Jeffrey Zhao      2006-11-26 12:40
    @Justin
    原文也很难理解:(
      回复  引用  查看    
  13. #13楼 upto      2006-11-28 09:44
    还是看看比较完整的文章吧:
    http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/aj3softfac.mspx?mfr=true
    http://msdn2.microsoft.com/en-us/library/ms954811.aspx
      回复  引用  查看    
  14. #14楼[楼主] Jeffrey Zhao      2006-11-28 10:02
    @upto
    谢谢推荐,可惜是官方英文版,可能接受的人不太多。:)
      回复  引用  查看    
  15. #15楼 kknd[未注册用户]2006-12-28 13:05
    个人觉得,软件工厂就是 原则+模式+指南+工具
      回复  引用    
  16. #16楼[楼主] Jeffrey Zhao      2006-12-28 13:12
    @kknd
    我同意您的看法。:)
      回复  引用  查看    
  17. #17楼 孤叶(学习.net框架)      2007-01-16 00:20
    有什么用呢,是干么的,我想要了解,怎么去了解,指导下,TKS
      回复  引用  查看    
  18. #18楼 zjg_robin[未注册用户]2007-06-18 10:38
    生产线和产品线到底有什么区别?能不能系统而深入的谈谈?谢谢!
      回复  引用    
  19. #19楼 翻译公司[未注册用户]2007-08-10 15:00



    地址:北京海淀区太阳园17号楼405室  邮编:100098
    E-mail:bjctn@vip.sina.com


    北京:北京市海淀区太阳园17号楼405室 (北三环西路大钟寺东侧)
    电话:010-82115891 82115892 传真010-82130386
    上海:上海漕溪北路38号20G (东方商厦后面实业公寓南楼)
    电话:021-34240860 34240925 传真:021-34240925
      回复  引用