Hello World
Spiga

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

2006-11-25 00:03 by 老赵, 4628 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)/一段脚本是一个软件工厂吗?

Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名赵劼(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言

Add your comment

19 条回复

  1. TerryLee
    *.*.*.*
    链接

    TerryLee 2006-11-25 00:16:00

    WCSF是个好东西,一直在关注:)

  2. 老赵
    admin
    链接

    老赵 2006-11-25 00:21:00

    @TerryLee
    我就是因为它所以想再去仔细了解一下相关内容。:)

  3. cenlei[未注册用户]
    *.*.*.*
    链接

    cenlei[未注册用户] 2006-11-25 10:01:00

    感觉有点模糊
    不过大概意思是知道了

  4. 听雨[未注册用户]
    *.*.*.*
    链接

    听雨[未注册用户] 2006-11-25 10:12:00

    感觉不太懂,看来得加紧努力了..

  5. 小蜗牛
    *.*.*.*
    链接

    小蜗牛 2006-11-25 10:21:00

    re,加紧努力。

  6. 老赵
    admin
    链接

    老赵 2006-11-25 10:42:00

    @cenlei
    其实我和你差不多感觉。:)

  7. 老赵
    admin
    链接

    老赵 2006-11-25 10:43:00

    @听雨
    我会把这一系列的都翻译一下,如果还是不清楚的话我会修改一下翻译。:)

  8. idior
    *.*.*.*
    链接

    idior 2006-11-25 11:08:00

    software factory有本书 老赵知道吗?
    可以参考一下,我是没看完 -_-||

  9. wc[未注册用户]
    *.*.*.*
    链接

    wc[未注册用户] 2006-11-25 16:48:00

    先翻译一下Web Service Software Factory,这个可以作为WCSF和SCSF的应用底层

  10. 老赵
    admin
    链接

    老赵 2006-11-25 17:06:00

    @wc
    多谢您的建议。:)

  11. Justin
    *.*.*.*
    链接

    Justin 2006-11-26 12:34:00

    有点晕

  12. 老赵
    admin
    链接

    老赵 2006-11-26 12:40:00

    @Justin
    原文也很难理解:(

  13. upto
    *.*.*.*
    链接

    upto 2006-11-28 09:44:00

  14. 老赵
    admin
    链接

    老赵 2006-11-28 10:02:00

    @upto
    谢谢推荐,可惜是官方英文版,可能接受的人不太多。:)

  15. kknd[未注册用户]
    *.*.*.*
    链接

    kknd[未注册用户] 2006-12-28 13:05:00

    个人觉得,软件工厂就是 原则+模式+指南+工具

  16. 老赵
    admin
    链接

    老赵 2006-12-28 13:12:00

    @kknd
    我同意您的看法。:)

  17. 孤叶(学习.net框架)
    *.*.*.*
    链接

    孤叶(学习.net框架) 2007-01-16 00:20:00

    有什么用呢,是干么的,我想要了解,怎么去了解,指导下,TKS

  18. zjg_robin[未注册用户]
    *.*.*.*
    链接

    zjg_robin[未注册用户] 2007-06-18 10:38:00

    生产线和产品线到底有什么区别?能不能系统而深入的谈谈?谢谢!

  19. 翻译公司[未注册用户]
    *.*.*.*
    链接

    翻译公司[未注册用户] 2007-08-10 15:00:00




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


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

发表回复

登录 / 登录并记住我 ,登陆后便可删除或修改已发表的评论 (请注意保留评论内容)

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

评论内容(大于5个字符):

  1. Your Name yyyy-MM-dd HH:mm:ss

使用Live Messenger联系我