??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲不卡av不卡一区二区,亚洲av无码乱码在线观看野外,亚洲中文字幕无码专区http://www.tkk7.com/gf7/category/3536.html<script language="JavaScript" type="text/JavaScript" src="http://union.3721.com/v2/news.js?a=2073&b=1005&p=1007&nt=10400&m=404045" charset="gb2312"> </script> zh-cnTue, 27 Feb 2007 14:30:03 GMTTue, 27 Feb 2007 14:30:03 GMT60轻量U容器的比较http://www.tkk7.com/gf7/archive/2005/10/21/16348.html?/dc:creator>?/author>Fri, 21 Oct 2005 14:08:00 GMThttp://www.tkk7.com/gf7/archive/2005/10/21/16348.htmlhttp://www.tkk7.com/gf7/comments/16348.htmlhttp://www.tkk7.com/gf7/archive/2005/10/21/16348.html#Feedback1http://www.tkk7.com/gf7/comments/commentRss/16348.htmlhttp://www.tkk7.com/gf7/services/trackbacks/16348.htmlBruce Tate , 总裁, J2Life, LLC

轻量U容器可以动态地使系l主要组件之间的耦合变松散。不同的容器包含相同的设计模式,但却hҎ(gu)不同的哲学。本文帮助?zhn)在下列三U轻量容器之间作出最佳选择QSpring Framework、HiveMind ?PicoContainer?BR>

2002 q在U罗拉多的一ơ旅行中Q我完美地感受了阿肯色河。在三段不同的漂中Q这条河展示了o(h)人惊异的多样性。柔的布朗峡谷有着开阔的急流Q翻滚着巨大的L。Royal Gorge 别具特色的?zhn)崖峭壁引导着巨大而笔直的峡谷之下的水力,在这条直U上发生一点小闪失都会(x)受到镉K游泳的惩罚。Numbers h_֯的落差,需要h们在范围狭窄(jing)的圆矌园里_操纵。在一条河里,我有了三ơ极不相同的体验?/P>

在我的上一文章?A >轻量U开发的成功U诀Q第 3 部分QSpring 露出水面”中Q我们学?fn)了轻量U容器的基本原理。本文将向?zhn)展示三种最行的容器:(x)

  • Spring Framework h功能齐全的容器、面向方面编E?(AOP) 模型和企业开发所需的所有集成代码?
  • HiveMind Jakarta Tapestry 的创之手,它允许?zhn)?bean 或比较大的组ӞUC?模块Q执行依赖注入?
  • PicoContainer 是最的轻量U容器,只支?Java?技术风格配|,而不支持 XML 配置?/LI>

q三U容器都源于依赖注入Q但每种容器都具有极不相同的特征。当我介l每U容器的高描述Ӟ(zhn)将看到正在q行的每U框Ӟ以及(qing)可以应用每种框架的环境?/P>

核心哲学

q三U容器都接受 POJO (plain old Java object)Q都h对象生命周期的钩子(所以它们可以在创徏或销?bean 时调用?zhn)的代码?j)Q都执行依赖注入。?zhn)可能认?f)q些L律将D怼的容器,但事实ƈ非如此。尽植入每U容器的代码可能怼Q但容器本n反映了不同的能力、风格和整体哲学。总而言之,每种容器的作者都忠于他们的哲学?/P>

Spring Framework

作ؓ(f)开放源码框架的 GenevaQSpring Framework 为数百个 Java 2 Platform, Enterprise Edition (J2EE) API 和开放源码框架提供了轻量U容器和胶水代码 (glue code)。Spring 有一个最重要的前景:(x)?J2EE 更易使用。读完一些示例和书籍之后Q?zhn)看C些常见的主题Q?

  • Spring 支持三种依赖注入—?I>setter?I>构造函?/I> ?Ҏ(gu) 注入——但ȝ来说Q最行的模型是 setter 注入?
  • 在灵zL和单性之_(d)Spring ?XML 风格配置更重视灵zL。?zhn)可以做Q何事情,但对于初学者来_(d)配置文g是晦涩难懂的?
  • Spring 的创始h认ؓ(f)Q容器只是整体框架的一部分。Spring 的大部分价值来源于支持该框架的数千行胶水代码。它易于插入Mpȝ中?
  • Spring 框架是三U容器实C最完美的。一般来_(d)优秀的文档都是完编写的?
  • Spring h自动q线 (autowire) 方式Q但大多数示例都没有使用它。我q不十分了解q个决策Q但有时候,能够看到明确列出的依赖关pL不错的?
  • Spring 提供了完整的 AOP 框架Q得更Ҏ(gu)附加服务。?zhn)可以使?Spring 自己的框架或依赖丰富?AspectJ 集成Q参?参考资?/FONT>Q?/LI>

如果要用一个短语来形容 SpringQ我?x)?I>让企业更?/I>?/P>

HiveMind

Howard Lewis Ship ?Jakarta Tapestry Web 框架的创,他还创徏?HiveMind。作Z个容器,HiveMind 是灵巧、干净且易于用的。与其他许多较好的开放源码框架一PShip 创徏 HiveMind 是ؓ(f)了让它帮助解决现实问题。但是,HiveMind 向传l的轻量U容器添加了两个创新Q?/P>

  • 最重要?HiveMind 创新是模块。据 Ship 所_(d)Eclipse 插gȀ发了他的 HiveMind 模块的灵感?
  • HiveMind 强制(zhn)编写接口。(与所有轻量容器一P它不提供接口Q而由(zhn)自己提供接口。)(j)
  • HiveMind 是用户友好的Q它提供UCؓ(f) HiveDoc 的文档工P友好明的 XML 配置Q以?qing)行准确的错误报告?
  • HiveMind 用户通常优先选择 setter 注入Q但该容器还支持构造函数注入?/LI>

如果用一个短语来形容 HiveMind 的话Q我?x)说它?I>概念正确 的?/P>

PicoContainer

到目前ؓ(f)止,PicoContainer 最重要的特征是它的寸。它没有提供许多附加物,但它h完整的依赖注入容器。PicoContainer q具有一些惟一Ҏ(gu):(x)

  • PicoContainer 很小Q所以它没有拦截器、AOP 或相似类型的服务Q而选择了让其他框架创徏q些服务?
  • PicoContainer 支持 Java 配置技术,而不支持 XML 配置技术,q与其他容器一栗?
  • PicoContainer 行的用模型是构造函数注入,但它也支?setter 注入?
  • PicoContainer 没有提供许多文档Q而且一些现有文档是不完整的Q但(zhn)不?x)太需要?
  • PicoContainer h一个自动连U方式,它很不错?
  • PicoContainer 的发展似乎有点停滞?/LI>

如果用一个短语来形容 PicoContainer 的话Q我?x)选择理论完美Q但不如 Spring ?HiveMind 实用?/P>

回页?/FONT>


~程模型

现在我将向?zhn)展示C֌中流行的~程CZQ以帮助(zhn)更好地理解容器的作者希望?zhn)如何使用它们。我使用 PicoContainer 中的 Kiss CZ来展C?autowiring ?Java 技术风格的配置Q?HiveMind 加法器示例来展示模块能力Q?Spring PetClinic 应用E序来展C?Hibernate 集成?/P>

Kiss CZ (PicoContainer)

在这三个容器中,PicoContainer h最单的~程模型。要查看 Kiss CZQ可?PicoContainer.org 下蝲它。安装该CZQ浏览到 docs\Two+minute+tutorial.htmQ然后?zhn)会(x)看C个组Ӟ(x)


清单 1. 两个 Kiss lg

public class Boy {
    public void kiss(Object kisser) {
        System.out.println("I was kissed by " + kisser);
    }
}
public class Girl {
    Boy boy;

    public Girl(Boy boy) {
        this.boy = boy;
    }

    public void kissSomeone() {
        boy.kiss(this);
    }
}

q两个类是自解释的。Girl ?Boy 有依赖关pR该依赖关系通过构造函数被注入。先实例化一个容器:(x)


MutablePicoContainer pico = new DefaultPicoContainer();

然后注册两个lgQ?/P>

pico.registerComponentImplementation(Boy.class);
pico.registerComponentImplementation(Girl.class);

E后(zhn)可以向 PicoContainer h一个对象,然后操作它:(x)


Girl girl = (Girl) pico.getComponentInstance(Girl.class);
girl.kissSomeone();

q样差不多了。编E模型是优雅的,Z构造函数的风格意味着(zhn)无需包括无参构造函数。对本例中的 Girl 调用q种函数会(x)使该对象处于不一致的状态,因ؓ(f) kiss Ҏ(gu)抛出异常?/P>

加法器示?(HiveMind)

现在Q让我们看一?HiveMind 的编E示例。从 Apache Jakarta Project 下蝲 HiveMindQ然后查看加法器CZ。?zhn)会(x)看到接口和实现。(CQHiveMind 强制~写接口。)(j)


清单 2. 加法器示例接口和实现

public interface Adder
{
    public double add(double arg0, double arg1);
}

public class AdderImpl implements Adder
{
    public double add(double arg0, double arg1)
    {
        return arg0 + arg1;
    }
}

该服务暴露?XML 文g中,如下所C:(x)


清单 3. 该服务暴露?XML 文g?/B>



  

    

  


然后Q其他应用程序就可以使用该服务了Q如下所C:(x)


清单 4. 其他应用E序可以使用该服?/B>

Registry registry = RegistryBuilder.constructDefaultRegistry();
 
Adder adder = (Adder) registry.getService("examples.Adder",
  Adder.class);

... adder.add(arg0, arg1)

注意QHiveMind 的模块让(zhn)可以将多个服务l合C赗如果?zhn)需要向容器中的服务d功能Q可以用拦截器Q?/P>
清单 5. 使用拦截器添加功?/B>


  

    

    
  


PetClinic 应用E序 (Spring)

Spring 处理事情的方法有些不同。因?Spring 框架不带有简单的应用E序Q我从我的书c?Spring: A Developer's Notebook 中选择了一个。?zhn)可以?O'Reilly Media 获取该示例代码。解压示?4Q它展示了一个用?RentaBike 商店的带有属性的 CommandLineView 对象Q该对象最l成应用E序的数据访问对象?/P>
清单 6. CommandLineView 对象

public class CommandLineView {
   private RentABike rentaBike;
   public CommandLineView() {}
   public void setRentABike(RentABike rentaBike) {this.rentaBike = rentaBike;}
   public RentABike getRentaBike() { return this.rentaBike; }
...
}


RentaBike 是具有?zhn)希望在自行R商店对象中看到的各种Ҏ(gu)的接口:(x)


清单 7. 接口Ҏ(gu)

public interface RentABike {   
   List getBikes();   
   Bike getBike(String serialNo);   
   void setStoreName(String name);   
   String getStoreName();
}

没有昄 ArrayListBikeStoreQ它?BikeStore 接口的存根实现。注意,Spring 允许~写接口Q但不强制编写接口。下面是描述该应用程序中 bean ?XML 配置文gQ?/P>
清单 8. 描述应用E序 bean ?XML 配置文g


  
    Bruce's Bikes
  
  
    
       
    
  


该上下文中有两个 bean?CODE>commandLineView bean 依赖?rentaBike bean。该应用E序通过?rentaBike 属性指?rentaBike 名称Q显式解析该依赖关系。注意,PicoContainer 自动q接q种昑ּ关系QSpring 也可以,但大多数用户不用它的自动连UK项。Spring q允许?zhn)通过拦截器或 AOP 向外观的MҎ(gu)d服务?/P>

回页?/FONT>


比较

既然已经看到每种容器的哲学,下面是对每种环境的无形特性的详细比较Q比如市(jng)Z额、整体质量(fit and finishQ和整体Ҏ(gu)列表。毕竟,即ɾ~程模型是完的Q但如果没有文档Q或者由于缺乏社?zhn)必须自己支持它,那么它也不?x)成ؓ(f)一个好容器?/P>

zdC֌

Spring 有一个充满活力的C֌Q和一个支持该框架的称?Interface21 的职业服务公司。这很重要,因ؓ(f)(zhn)知道?zhn)可以获得良好的支持,公司才有动力来支?Spring 框架。我在社区的l历直太好了。Spring 贡献者、创始h和用户都以杰出的内容填满了留aѝ?/P>

HiveMind 框架是一?Apache Jakarta 目Q所以有着扎实的基。它有一个正在成长的萌芽C֌。该框架的创始h Howard Lewis Ship 是独立顾问、优U导师和不屈不挠的提倡者。但是,要利?HiveMind 的质量帮助或者查扑օ Web 站点之外的内容仍然十分困难。尽如此,它的在线帮助g不错Q而且C֌g正在成长。Hibernate 获得了有的胜利Q它被选中——或者更应该_(d)Ship 被选中——组?TheServerSide.com 的新基础设施QTheServerSide.com 是最重要?Java 技术社Z一?/P>

PicoContainer 也是一?Apache Jakarta 目Q它g发展~慢。截止本文撰E,PicoContainer 的最后一ơ主要代码发行是?2004 q?11 月。?zhn)看不到太多有?PicoContainer 的新文章Q这有点惭愧Q因为我喜欢 PicoContainer 的一些哲学。事实上Q我不太定有没有三U开放源码轻量容器的空_(d)其是最q第四种轻量U容器项?Avalon 关闭之后?/P>

每个社区生成的zd而言QSpring 无疑是优胜者。Interface21 的支持、奇思妙想的论坛、活跃的邮g列表以及(qing)C֌的跟t记录都是无与u比的?/P>

整体质量

C֌的大和实力通常驱动开放源码项目的整体质量。充满活力的C֌需要更好的文档和示例,而且它们?x)参与完成结详细信息?/P>

Spring 团队~写了可与我见过的一些比较好的商业品相媲美的文档。如果这q不够的话,(zhn)还可以扑ֈ臛_五本主要 Spring 书籍和其他许多包?Spring 内容的出版物。(我自己曾撰写q两本有?Spring 的书c,其中一本书中包?Jolt-winning Better, Faster, Lighter Java 一章,另一本是快速入门书c?Spring: A Developer's NotebookQ。错误消息是专业性和描述性的。与W三Ҏ(gu)架和 API 的集成是所?Java 技术框架中最好的。包装是l过深思熟虑的Q不q略有多余。(它帮助我开始把一些比较小的项目划分成模块。)(j)CZ是优U且有指导意义的?/P>

?Tapestry 一PHiveMind 也具有好的整体质量。Ship 自己以那些让 HiveMind 变得单易用的Ҏ(gu)而自豪,比如行准的错误报告Q友好简明的 XML 语法Q良好的文档工具 HiveDoc。与用于低详细信息?JavaDoc 文档l合使用Q?zhn)可以更好地描q?zhn)的应用程序(HiveMind 模块Q的高Ҏ(gu),从而完善它们之间的依赖关系?/P>

PicoContainer ~程模型感觉自然Q但文档不完_(d)许多Ҏ(gu)标记看v来过时好几个月了Q,而且没有许多使用该容器的真实世界CZ。有时候,我会(x)觉得自己在独自穿q鬼出没的破屋?/P>

但?PicoContainer 实有一个主要优炏V因为?zhn)配置现实世界的对象时Q会(x)得到一些编译时错误(g)查。实际上Q该容器太小太轻了,以至于除了基本配|之外,没有什么能出错。PicoContainer 做了一合理的工作?/P>

Ҏ(gu)?/FONT>

我不惌多地讨论Ҏ(gu)。如果?zhn)正在L许多胶水代码来减?zhn)的开放源码收藏夹的集成或某特?J2EE APIQSpring 无疑是最佳选择。HiveMind 不尝试参与竞争。相反,它与 Spring 的服务兼宏VPicoContainer 不构且也不试构徏附加物,而是选择让开放源码项目ؓ(f)其提供服务。到目前为止Q它的效果不太好?/P>

回页?/FONT>


哪一个最好?

目前Q只有一个真正的{案。HiveMind h有趣的创斎ͼPicoContainer h易于使用的模型(理论上)(j)Q但C֌g已经投票选择?Spring Framework。随着旉的推U,新的容器可能?x)成长,HiveMind 可能不断获得?jng)场份额Q但目前QSpring 是?zhn)的最佳选择?/P>

如果(zhn)愿意冒一些险Q而用不太成熟或不太行的容器,(zhn)可能决定实?HiveMindQ如果需要模块别的配置Q或 PicoContainerQ如果想要微的容器Q。如果需要许多胶水代码来集成持久引擎、事务处理策略和安全性等斚wQSpring h最完整的组件堆。但误住:(x)(zhn)可以在 HiveMind 容器中?Spring lg?BR>

参考资?

学习(fn)

  • (zhn)可以参阅本文在 developerWorks 全球站点上的 英文原文 ?

  • “轻量开发”是一个很大的主题Q而开发h员经常提到这个说法,以至难以界定它到底是什么含义。?A >轻量U开发的成功U诀Q第 1 部分Q核心原则及(qing)原理”开始了q个pdQ向(zhn)介l了该运动背后的核心原则?qing)原理?BR>
  • 重量U架构(?Enterprise JavaBeansQ用于日帔R题可能有点大材小用。?A >轻量U开发的成功U诀Q第 2 部分Q减d?/FONT>”介l了轻量U容器,q解释它们如何提供满x业务需要的服务Q而无需?zhn)束?x)在一个指定的~程模型之上?BR>
  • 在本pd的第三篇文章?A >轻量U开发的成功U诀Q第 3 部分QSpring 露出水面”,学习(fn)轻量U容器的基本概念?BR>
  • ?Inversion of Control Containers 一文中Q阅?Mike Spille 对这三个容器所做的比较?BR>
  • 讉K HiveMind 获得CZ、blogs 和代码?BR>
  • PicoContainer.org 不太z跃Q但是其中有很多关于Z构造函数的注入的思想?BR>
  • 阅读 Bruce A. Tate ?Justin Gehtland ~写?Spring: A Developer's Notebook 一书(O'Reilly, 2005 q_(d)(j)Q快速入?Spring?BR>
  • 感谢 Interface21 Ҏ(gu)写本文所提供的帮助?BR>
  • Martin Fowler 撰写的关于依赖注入的文章 Inversion of Control Containers and the Dependency Injection patternQ很好地描述了依赖注入和服务定位器?BR>
  • Bruce A. Tate ?Justin Gehtland ~写?Better, Faster, Lighter Java 一书(O'Reilly, 2004 q_(d)(j)Q很好地概述了轻量开发?BR>
  • Rob Harrop ?Jan Machacek ~写?Pro SpringQApress, 2005 q_(d)(j)?Craig Walls ?Ryan Breidenbach ~写?Spring in ActionQManning, 2005 q_(d)(j)q两本书全面介绍?Spring?BR>
  • developerWorks 文章?A >无需容器的对象关pL?/FONT>”介l了如何?Hibernate 一起?Spring 持久性?BR>
  • 阅读 developerWorks 文章?A >AOP@Work: AOP 工具比较Q第 1 部分”,了解 AOPQ这是一U有较好透明性的轻量U技术?BR>
  • 文章?A >Eclipse q_入门”(developerWorks, 2002 q?11 月)(j)提供?Eclipse 的历史和概述Q以?qing)关于如何安?Eclipse 和插件的详细信息?BR>
  • 讉K developerWorks 开放源码专?/FONT>Q获得广泛的 how-to 信息、工具和目更新Q以帮助(zhn)利用开放源码技术进行开发,q与 IBM 产品l合使用?BR>

    关于作?/FONT>

    Bruce Tate 居住在d克萨斯州的首府奥斯汀Q他是一位父Ԍ同时也是山地车手和皮艇手。他?3 本最畅销 Java 书籍的作者,其中包括荣获 Jolt 大奖?Better, Faster, Lighter Java 一书,最q又出版?Spring: A Developer's Notebook 一书。他?IBM 工作?13 q_(d)现在?J2Life、LLC 的创始h兼顾问。他潜心研究Z Java ?Ruby 的轻量开发策略和架构?/P>


原文Q?BR>http://www-128.ibm.com/developerworks/cn/opensource/os-lightweight4/

]]>
架构设计速成http://www.tkk7.com/gf7/archive/2005/10/11/15280.html?/dc:creator>?/author>Tue, 11 Oct 2005 12:24:00 GMThttp://www.tkk7.com/gf7/archive/2005/10/11/15280.htmlhttp://www.tkk7.com/gf7/comments/15280.htmlhttp://www.tkk7.com/gf7/archive/2005/10/11/15280.html#Feedback3http://www.tkk7.com/gf7/comments/commentRss/15280.htmlhttp://www.tkk7.com/gf7/services/trackbacks/15280.html//lg,容器,引擎,框架,q_
设计Q无外乎抽象
先看一D|口的使用代码
public class container{
public void excute(Comp c){
c.metod1();
c. metod2 ();
}
}

interface Comp{
public void method1 ();
public void method2 ();
}
class CompImpt{
public void method1 (){
System.out.println(“method1?;
}
public void method2 (){
System.out.println(“method2?;
}
}

q个是接口的用,当你把调用接口的cd作是容器Q当作是引擎Ӟ当作是框架时QCompImpt是lgQ你成Z设计师,把调用接口的cd作是q_?CompImpt是插gQ你成了架构师

开个玩W,呵呵Q!



]]>
怎样成ؓ(f)优秀的Y件模型设计?/title><link>http://www.tkk7.com/gf7/archive/2005/10/04/14795.html</link><dc:creator>?/dc:creator><author>?/author><pubDate>Tue, 04 Oct 2005 15:36:00 GMT</pubDate><guid>http://www.tkk7.com/gf7/archive/2005/10/04/14795.html</guid><wfw:comment>http://www.tkk7.com/gf7/comments/14795.html</wfw:comment><comments>http://www.tkk7.com/gf7/archive/2005/10/04/14795.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/gf7/comments/commentRss/14795.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gf7/services/trackbacks/14795.html</trackback:ping><description><![CDATA[    做一个好的架构师一直是我的一个目标。但是,做过q么多项目后发现自己在设计上仍存在很多不뀂下文是一不错的文章。希望大家能够得C些启C或共鸣。欢q大家发表自己在架构设计斚w的观炏V?BR><BR>    我们期待自己成ؓ(f)一个优U的Y件模型设计者,但是Q要怎样做,又从哪里开始呢Q将下列原则应用C的Y件工E中Q你?x)获得立杆见q成果?<BR><BR><STRONG>    1. 比技术重?</STRONG><BR><BR>    你开发Y件是Z供别Z用,没有Z用的软g只是没有意义的数据的集合而已。许多在软g斚w很有成就的行家在他们事业的初期却表现q_^Q因Z们那时侯主要精力都集中在技术上。显?dng)构gQcomponentsQ,EJBQEnterprise Java BeansQ和代理QagentQ是很有的东西。但是对于用h_(d)如果你设计的软g很难使用或者不能满他们的需求,后台用再好的技术也于事无补。多q旉到Y仉求和设计一个用户能很Ҏ(gu)理解的界面上?<BR><BR><STRONG>    2. 理解你要实现的东?</STRONG><BR><BR>    好的软g设计人员把大多数旉p在徏立系l模型上Q偶?dng)写一些源代码Q但那只不过是ؓ(f)了验证设计过E中所遇到的问题。这他们的设计方案更加可行?<BR><BR><STRONG>    3. 谦虚是必ȝ品格 </STRONG><BR><BR>    你不可能知道一切,你甚臌很努力才能获得够用的知识。Y件开发是一复杂而艰巨的工作Q因Y件开发所用到的工具和技术是在不断更新的。而且Q一个h也不可能了解软g开发的所有过E。在日常生活中你每天接触到的新鲜事物可能不会(x)太多。但是对于从事Y件开发的人来_(d)每天可以学习(fn)很多C西(如果愿意的话Q?<BR><BR><STRONG>    4. 需求就是需?</STRONG><BR><BR>    如果你没有Q何需求,你就不要动手开发Q何Y件。成功的软g取决于时_(d)在用戯求的旉内完成)(j)、预和是否满用户的需求。如果你不能切知道用户需要的是什么,或者Y件的需求定义,那么你的工程注定?x)失败?<BR><BR><STRONG>    5. 需求其实很改变,改变的是你对需求的理解 </STRONG><BR><BR>    Object ToolSmiths公司Qwww.objecttoolsmiths.comQ的Doug Smith常喜Ƣ说Q“分析是一门科学,设计是一门艺术”。他的意思是说在众多的“正”分析模型中只存在一个最“正”分析模型可以完全满x个具体问题的需要(我理解的意思是需求分析需要一丝不苟、精的完成,而设计的时候反而可以发挥创造力和想象力 - 译者注Q?<BR><BR>    如果需求经常改动,很可能是你没有作好需求分析,q不是需求真的改变了?<BR><BR>    你可以抱怨用户不能告诉你他们惛_C么,但是不要忘记Q收集需求信息是你工作?<BR><BR>    你可以说是新来的开发h员把事情搞得一团糟Q但是,你应该确定在工程的第一天就告诉他们应该做什么和怎样d?如果你觉得公怸让你与用户充分接触,那只能说明公司的理层ƈ不是真正支持你的目?<BR><BR>    你可以抱怨公司有兌Y件工E的理制度不合理,但你必须了解大多同行公司是怎么做的?<BR><BR>    你可以借口说你们的竞争Ҏ(gu)的成功是因ؓ(f)他们有了一个新的理念,但是Z么你没先惛_呢? <BR><BR>    需求真正改变的情况很少Q但是没有做好需求分析工作的理由却很多?<BR><BR><STRONG>    6. l常阅读 </STRONG><BR><BR>    在这个每日都在发生变化的产业中,你不可能在已取得的成׃陉太久?<BR><BR>    每个月至读2?本专业杂志或?本专业书c。保持不落伍需要付出很多的旉和金钱,但会(x)使你成ؓ(f)一个很有实力的竞争者?<BR><BR><STRONG>    7. 降低软g模块间的耦合?</STRONG><BR><BR>    高耦合度的pȝ是很隄护的。一处的修改引v另一处甚x多处的变动?<BR><BR>    你可以通过以下Ҏ(gu)降低E序的耦合度:(x)隐藏实现l节Q强制构件接口定义,不用公用数据结构,不让应用E序直接操作数据库(我的l验法则是:(x)当应用程序员在写SQL代码的时候,你的E序的耦合度就已经很高了)(j)?<BR><BR>    耦合度低的Y件可以很Ҏ(gu)被重用、维护和扩充?<BR><BR><STRONG>    8. 提高软g的内聚?</STRONG><BR><BR>    如果一个Y件的模块只实C个功能,那么该模块具有高内聚性。高内聚性的软g更容易维护和改进?<BR><BR>    判断一个模块是否有高的内聚性,看一看你是否能够用一个简单的句子描述它的功能p了。如果你用了一D话或者你需要用类似“和”、“或”等q词Q则说明你需要将该模块细化?<BR><BR>    只有高内聚性的模块才可能被重用?<BR><BR><STRONG>    9. 考虑软g的移植?</STRONG><BR><BR>    UL是Y件开发中一具体而又实际的工作,不要怿某些软g工具的广告宣传(比如java 的宣传口号write once run many 译者注Q?<BR><BR>    即仅仅对Y件进行常规升U,也要把这看得和向另一个操作系l或数据库移植一样重要?<BR><BR>    记得?6位WindowsUL?2位windows的“乐”吗 Q当你用了某个操作pȝ的特性,如它的进E间通信(IPC){略Q或用某数据库专有语a写了存储q程。你的Y件和那个特定的品结合度已l很高了?<BR><BR>    好的软g设计者把那些Ҏ(gu)的实现细节打包隐藏v来,所以,当那些特性该变的时候,你的仅仅需要更新那个包可以了?<BR><BR><STRONG>    10. 接受变化 </STRONG><BR><BR>    q是一句老话了:(x)惟一不变的只有变化?<BR><BR>    你应该将所有系l将可能发生的变化以?qing)潜在需求记录下?以便来能够实现?通过在徏模期间考虑q些假设的情况,你就有可能开发出_强壮且容易维护的软g。设计强壮的软g是你最基本的目标?<BR><BR><STRONG>    11. 不要低估对Y件规模的需?</STRONG><BR><BR>    Internet 带给我们的最大的教训是你必须在Y件开发的最初阶D就考虑软g规模的可扩充性?<BR><BR>    今天只有100人的部门使用的应用程序,明天可能?x)被有好几万人的l织使用Q下月,通过因特|可能会(x)有几百万Z用它?<BR><BR>    在Y件设计的初期Q根据在用例模型中定义的必须支持的基本事务处理,定软g的基本功能。然后,在徏造系l的时候再逐步加入比较常用的功能?<BR><BR>    在设计的开始考虑软g的规模需求,避免在用L(fng)H然增大的情况下Q重写Y件?<BR><BR><STRONG>    12. 性能仅仅是很多设计因素之一 </STRONG><BR><BR>    x软g设计中的一个重要因?-性能Q这好象也是用户最兛_的事情。一个性能不佳的Y件将不可避免被重写?<BR><BR>    但是你的设计q必d有可靠性,可用性,便携性和可扩展性。你应该在工E开始就应该定义q区分好q些因素Q以便在工作中恰当用。性能可以是,也可以不是优先最高的因素Q我的观Ҏ(gu)Q给每个设计因素应有的考虑?<BR><BR><STRONG>    13. 理接口 </STRONG><BR><BR>    “UML User Guide”(Grady BoochQIvar Jacobson和Jim Rumbaugh ,Addison Wesley, 1999Q中指出Q你应该在开发阶D늚早期定义Y件模块之间的接口?<BR><BR>    q有助于你的开发h员全面理解Y件的设计l构q取得一致意见,让各模块开发小l相对独立的工作。一旦模块的接口定之后Q模块怎样实现׃是很重要了?<BR><BR>    从根本上_(d)如果你不能够定义你的模块“从外部看上M(x)是什么样子”,你肯定也不清楚模块内要实C么?<BR><BR><STRONG>    14. 走近路需要更长的旉 </STRONG><BR><BR>    在Y件开发中没有捷径可以走?~短你的在需求分析上q旉Q结果只能是开发出来的软g不能满用户的需求,必须被重写?<BR><BR>    在Y件徏模上每节省一周,在将来的~码阶段可能?x)多花几周时_(d)因ؓ(f)你在全面思考之前就动手写程序?<BR><BR>    你ؓ(f)了节省一天的试旉而漏掉了一个bugQ在来的维护阶D,可能需要花几周甚至几个月的旉M复。与其如此,q不如重新安排一下项目计划?<BR><BR>    避免走捷径,只做一ơ但要做对(do it once by doing it rightQ?<BR><BR><STRONG>    15. 别信赖Q何h </STRONG><BR><BR>    产品和服务销售公怸是你的朋友,你的大部分员工和高层理人员也不是?<BR><BR>    大部分品供应商希望把你牢牢l在他们的品上Q可能是操作pȝQ数据库或者某个开发工兗?<BR><BR>    大部分的N和承包商只关心你的钱q不是你的工E(停止向他们付?gu)ƾ,看一看他们会(x)在周围呆多长旉Q?<BR><BR>    大部分程序员认ؓ(f)他们自己比其他h更优UQ他们可能抛弃你设计的模型而用自己认ؓ(f)更好的?<BR><BR>    只有良好的沟通才能解册些问题?<BR><BR>    要明的是,不要只依靠一家品或服务提供商,即你的公司Q或l织Q已l在建模、文档和q程{方面向那个公司投入了很多钱?<BR><BR>    <STRONG>16. 证明你的设计在实践中可行</STRONG> <BR><BR>    在设计的时候应当先建立一个技术原型, 或者称为“端到端”原型。以证明你的设计是能够工作的?<BR><BR>    你应该在开发工作的早期做这些事情,因ؓ(f)Q如果Y件的设计Ҏ(gu)是不可行的,在编码实现阶D|论采取什么措施都于事无补。技术原型将证明你的设计的可行性,从而,你的设计更Ҏ(gu)获得支持?<BR><BR><STRONG>    17. 应用已知的模?</STRONG><BR><BR>    目前Q我们有大量现成的分析和设计模式以及(qing)问题的解x案可以用?<BR><BR>    一般来_(d)好的模型设计和开发h员,都会(x)避免重新设计已经成熟的ƈ被广泛应用的东西?http://www.ambysoft.com/processPatternsPage.html 收藏了许多开发模式的信息?<BR><BR><STRONG>    18. 研究每个模型的长处和q </STRONG><BR><BR>    目前有很多种cȝ模型可以使用,用例捕获的是pȝ行ؓ(f)需求,数据模型则描q支持一个系l运行所需要的数据构成。你可能?x)试囑֜用例中加入实际数据描qͼ但是Q这对开发者不是非常有用。同P数据模型Ҏ(gu)qY仉求来说是无用的。每个模型在你徏模过E中有其相应的位|,但是Q你需要明白在什么地方,什么时候用它们?<BR><BR><STRONG>    19. 在现有Q务中应用多个模型 </STRONG><BR><BR>    当你攉需求的时候,考虑使用用例模型Q用L(fng)面模型和领域U的cL型?<BR><BR>    当你设计软g的时候,应该考虑制作cL型,序图、状态图、协作图和最l的软g实际物理模型?<BR><BR>    E序设计人员应该慢慢意识刎ͼ仅仅使用一个模型而实现的软g要么不能够很好地满用户的需求,要么很难扩展?<BR><BR><STRONG>    20. 教育你的听众 </STRONG><BR><BR>    你花了很大力气徏立一个很成熟的系l模型,而你的听众却不能理解它们Q甚xp-qؓ(f)什么要先徏立模型都不知道。那么你的工作是毫无意义的?教给你开发h员基本的建模知识Q否则,他们?x)只看看你画的漂亮图表,然后l箋~写不规范的E序?<BR><BR>    另外Q?你还需要告诉你的用户一些需求徏模的基础知识。给他们解释你的用例(uses case)和用L(fng)面模型,以他们能够明白你要表达Cѝ当每个人都能用一个通用的设计语a的时候(比如UML-译者注Q,你的团队才能实现真正的合作?<BR><BR><STRONG>    21. 带工L(fng)?c)q是?c)?</STRONG><BR><BR>    你给我CAD/CAM工具Q请我设计一座桥。但是,如果那桥徏成的话,我肯定不惛_W一个从桥上q的人,因ؓ(f)我对建筑一H不通?<BR><BR>    使用一个很优秀的CASE工具q不能你成Z个徏模专Ӟ只能使你成ؓ(f)一个优UCASE工具的用者。成Z个优U的徏模专安要多q的U篏Q不?x)是一周针Ҏ(gu)个h(hun)值几千美元工L(fng)培训。一个优U的CASE工具是很重要Q但你必d?fn)用它Qƈ能够使用它设计它支持的模型?<BR><BR><STRONG>    22. 理解完整的过E?</STRONG><BR><BR>    好的设计人员应该理解整个软gq程Q尽他们可能不是精通全部实现细节。Y件开发是一个很复杂的过E,除了~程、徏模、测试等你擅长工作外Q还有很多工作要做。好的设计者需要考虑全局。必M长远考虑如何使Y件满用户需要,如何提供l护和技术支持等?<BR><BR><STRONG>    23. 常做试Q早做测?</STRONG><BR><BR>    如果试对你的Y件来说是无所谓的Q那么你的Y件多半也没什么必要被开发出来。徏立一个技术原型供技术评审用,以检验你的Y件模型。在软g生命周期中,晚发现的错误越难修改,修改成本昂c(din)尽可能早的做测试是很值得的?<BR><BR><STRONG>    24. 把你的工作归?</STRONG><BR><BR>    不值得归档的工作往往也不值得做。归档你的设惻I以及(qing)Ҏ(gu)设想做出的决定;归档软g模型中很重要但不很明昄部分。给每个模型一些概要描qC使别人很快明白模型所表达的内宏V?<BR><BR><STRONG>    25. 技术会(x)变,基本原理不会(x) </STRONG><BR><BR>    如果有h说“用某U开发语a、某个工h某某技术,我们׃需要再做需求分析,建模Q编码或试”。不要相信,q只说明他还~Zl验。抛开技术和人的因素Q实际上软g开发的基本原理?0世纪70q代以来没有改变过。你必须q定义需求,建模Q编码,试Q配|,面对风险Q发布品,理工作人员{等?<BR><BR>    软g建模技术是需要多q的实际工作才能完全掌握的。好在你可以从我的徏议开始,完善你们自己的Y件开发经验。以鸡汤开始,加入自己的蔬菜。然后,开始n受你自己的丰盛晚吧?BR>    作者:(x) Scott Ambler?乐林?? 来源Q?umlchina    风之?转蝲<img src ="http://www.tkk7.com/gf7/aggbug/14795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gf7/" target="_blank">?/a> 2005-10-04 23:36 <a href="http://www.tkk7.com/gf7/archive/2005/10/04/14795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://6711wan.com" target="_blank">޾Ʒ</a>| <a href="http://89895cc.com" target="_blank">޳AVƬ߳ˮ</a>| <a href="http://cnlawedu.com" target="_blank">ʹA18Ƭ</a>| <a href="http://9haolc.com" target="_blank">ɫaѿ</a>| <a href="http://286513.com" target="_blank">޿һ24޿ </a>| <a href="http://65123456.com" target="_blank">ºձѹۿ</a>| <a href="http://lhtjdj.com" target="_blank">޾Ʒר߲</a>| <a href="http://ccc998.com" target="_blank">޾ƷƷ</a>| <a href="http://qixiresort.com" target="_blank">߹ۿӾѰ </a>| <a href="http://lh726.com" target="_blank">aëƬaѿԿ</a>| <a href="http://rr433.com" target="_blank">jizzѹۿ</a>| <a href="http://dcqzr.com" target="_blank">һۿ</a>| <a href="http://74rr.com" target="_blank">޲Ļ</a>| <a href="http://77tok.com" target="_blank">Ƶ</a>| <a href="http://nfrxfarm.com" target="_blank">þҹ</a>| <a href="http://hkcdk.com" target="_blank">һaƵ</a>| <a href="http://hmjx-tape.com" target="_blank">һվ</a>| <a href="http://zzzttt669.com" target="_blank">ɫר߹ۿ</a>| <a href="http://ttooyuyu.com" target="_blank">ƵĻ</a>| <a href="http://cmanpower.com" target="_blank">91ѸƷ</a>| <a href="http://cangtuyuan.com" target="_blank">aëƬѹۿվ</a>| <a href="http://cdkunyu.com" target="_blank">˳ɵӰվɫ</a>| <a href="http://wangdei.com" target="_blank">þ޾Ʒa</a>| <a href="http://tccqdy.com" target="_blank">Ʒ޲Ʒһ</a>| <a href="http://zgnyxx.com" target="_blank">aƬѹۿ</a>| <a href="http://zhaosifuwang.com" target="_blank">鶹ƷѹƬ</a>| <a href="http://zjfxjy.com" target="_blank">ŮоƷվѹۿ</a>| <a href="http://ebhqd.com" target="_blank">Ļ</a>| <a href="http://badabg.com" target="_blank">av</a>| <a href="http://0453wcbyy.com" target="_blank">ӰԺһ </a>| <a href="http://maiertejx.com" target="_blank">޾ƷƵþ</a>| <a href="http://worldbiao.com" target="_blank">޾ƷŮþþþ99</a>| <a href="http://6ork.com" target="_blank">Ѵ߹</a>| <a href="http://xxxxnii.com" target="_blank">һɫþһ</a>| <a href="http://2222jjjj.com" target="_blank">69ƷƵ</a>| <a href="http://wwwby1378.com" target="_blank">aëƬѲ</a>| <a href="http://xy167.com" target="_blank">aëƬѹۿ</a>| <a href="http://trgod.com" target="_blank">ŮƵһ</a>| <a href="http://scjcled.com" target="_blank">˳δʮ˽վ</a>| <a href="http://hairdehf.com" target="_blank">˳ѵӰ</a>| <a href="http://yy7699.com" target="_blank">޹Ʒۺһ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>