RSS 2.0 Feed
2007-11 Entries
摘要: 看到博客园在轰轰烈烈地讨论程序员的基础/基本功问题,正好在devlicio.us上看到Billy McCafferty撰写的《站在巨人的肩膀上》一文,推荐一下:Standing on the Shoulders of Giantshttp://devlicio.us/blogs/billy_mccafferty/archive/2007/11/12/standing-on-the-shoulders-of-giants.aspx 文中说到,随着这个世界越来越依赖我们的实践,作为计算机行业的从业人员,对计算机行业的 science 实在有必要给与应有的尊重。行动的第一步,就是阅读一些经典的著作,掌握前人/前辈/行业大家们总结出来的知识和行之有效的实践,在日常实践中使用这些知识和实践,成为一个更好的开发人员。他将这些著作分成五大类: 基本读物(Foundational Texts) (每个开发人员都应该读的,没有例外,不管什么经验或平台。这些读物注重讨论如何编写更好,可维护的代码,向坚实的面向对象设计过渡) Code Complete, 2nd Ed. by Steve McConnell (【中文版】代码大全(第二版),金戈译,电子工业出版社出版) Refactoring by Martin Fowler (【中文版】重构:改善既有代码的设计,侯捷译,中国电力出版社出版) Refactoring Workbook by William Wake Applying UML and Patterns, 3rd Ed. by Craig Larman (【中文版】UML和模式应用:面向对象分析与设计导论,姚淑珍译,机械工业出版社出版) 以及 UML Distilled, 3rd Ed. by Martin Fowler Object-Oriented Design Heuristics by Arthur Riel (【中文版】OOD启思录,鲍志云译,人民邮电出版社出版) 学徒读物(Apprenticeship Texts)(这些读物帮你从代码的层次转移到从高的层次来看待实现,以完善项目整体为目的) The Pragmatic Programmer by Andrew Hunt (【中文版】程序员修炼之道——从小工到专家,马维达译,电子工业出版社出版) Patterns of Enterprise Application Architecture by Martin Fowler (【中文版】企业应用架构模式,王怀民译,机械工业出版社出版) Test-Driven Development by Kent Beck (【中文版】测试驱动开发,崔凯译,中国电力出版社出版) Refactoring to Patterns by Joshua Kerievsky (【中文版】重构与模式,杨光译,人民邮电出版社出版) Head First Design Patterns by the Freemans (【中文版】Head First设计模式,UMLChina译,中国电力出版社出版) 以及 Design Patterns (【中文版】设计模式:可复用面向对象软件的基础,李英军译,机械工业出版社出版) 熟练技术人员读物(Journeyman Texts)(这些读物转向“把东西整合起来”,涉及软件开发过程,并深入计算机科学后面的“science”) The Mythical Man-Month by Frederick Brooks (【中文版】人月神话,UMLChina译,清华大学出版社出版) User......[阅读全文]

posted @ | Feedback (17) | Filed Under [ 业界 书籍 .NET ]

摘要:在www.infoq.com上看到了这篇文章,推荐一下The Future of MonoRail in the Wake of MS MVChttp://www.infoq.com/news/2007/11/mr-ms-mvc 该文的中文版将于明天推出,留意一下这个链接:http://www.infoq.com/cn/news/2007/11/mr-ms-mvc 下面是这篇文章的概要: 上个星期,Castle项目的创始人Hamilton Verissimo与MS MVC开发团队讨论了如何把Castle/MonoRail集成进MS MVC的方法,以及向他们通报了Castle团队从现实应用中得到的所有的复杂和违反直观的需求,向他们提出了该如何处理这些需求的建议。 他编写了一些集成例程,作为MS MVC的可扩展性和插拔性的概念验证(proof-of-concept)。他说,他实现了IParameterBinder的初始支持,实现了NVelocity View Factory支持,实现了REST支持和集成了Castle的DataBinder和ActiveRecordDataBinder。他发现了一些他想要实现却实现不了的东西,譬如重用MonoRail的helpers(因为这些东西和MonoRail的内核耦合太强了),建立Brail View Factory(同样的理由),建立视图工厂的选图器(会影响可测试性)。 总的来说,他对MS MVC框架的做法非常满意,但他也指出,.NET社区对即将发布的MS MVC框架CTP版本别抱太高的期望。他说,因为你将看到的是个非常小的框架,要在实战中有用还需要做很多东西,第一个CTP版的发布主要是为了获得用户的反馈,之后的版本将会非常棒。 关于Castle MonoRail的将来,Hamilton说要看到MS MVC框架的最终版和它包括的功能集之后才能决定,他说,他要求MS MVC框架应该试着支持MonoRail支持的所有的东西,但不确定MS MVC团队是否会那么做。MonoRail 2.0将取决于MS MVC框架的实现。如果MS MVC框架的最终版非常棒,提供了众多的功能,他会放弃MonoRail 2.0。但如果MS MVC框架的最终版很明显地缺少什么东西,那么MonoRail 2.0可以重用MS MVC框架提供的基础设施,提供一些非常棒的扩展。 Eleutian Technology的Aaron Jensen同意Hamilton的观点,他说,他希望MonoRail变得更像Rails一样,建立于MS MVC之上,进一步推广“约定胜于配置(Convention over Configuration)”的概念,包括提供生成器等,将MonoRail推向更高的水平,成为.NET web 平台上社区真正需要的框架。 其他人指出了MonoRail的routing功能的缺陷,他们说,在RoR和MS MVC中,Routing是一等公民,而在MonoRail中的Routing好像是个事后加上去的东西。为什么Routing是否是一等竟是那么重要?因为, 1) 有助于遵守DRY(别重复自己)原则,routing引擎和URL生成之间的紧密集成允许对URL进行轻松和安全的重构;2)提高可测试性,在MonoRail中对route的测试,需要做end-to-end的集成测试。如果routing是一等的类对象,那么就可以对它们做隔离测试。 Hamilton对routing问题已经有了解决方案,他开发了一个新的MonoRail routing引擎,可以在MonoRail SVN上下载。 Ben Scheirman在他的一篇博客中则讨论了相关的微软技术和开源技术的问题,结论是,System.Web.MVC能够达到的使用者是MonoRail达不到的,因为很多企业都使用微软技术,而且在这空间工作的开发人员也不在少数。...[阅读全文]

posted @ | Feedback (9) | Filed Under [ ASP.NET/IIS .NET ]

摘要:如果你在机器上安装了VS 2008 Beta2/.NET 3.5 Beta2或更早的版本,现在想安装VS 2008 RTM/.NET 3.5 RTM的话,一定要读一下Scott Guthrie的这篇博客中的“安装建议”部分: http://blog.joycode.com/scottgu/archive/2007/11/20/111568.aspx 主要的意思是,你一定要先卸载跟Beta 2有关的所有东西,否则会有问题,这些东西可能会包括(也许要按下列次序卸载,如果你安装了相应产品的话): Microsoft Visual Studio Team System 2008 Team SuiteMSDN Library for Visual Studio 2008 - ENUMicrosoft Document Explorer 2008Microsoft Visual Studio Web Authoring ComponentMicrosoft Windows SDK for Visual Studio 2008 .NET Framework ToolsMicrosoft Windows SDK for Visual Studio 2008 SDK Reference Assemblies and IntelliSenseMicrosoft Windows SDK for Visual Studio 2008 ToolsMicrosoft SQL Server Compact 3.5 Design Tools ENUMicrosoft SQL Server Compact 3.5 ENUMicrosoft Device Emulator version 3.0 - ENUMicrosoft .NET Compact Framework 3.5Microsoft .NET Framework 3.5 Guy Barrette先生就遇到了这样的问题,参阅他的博客: Visual Studio 2008 Failed Installation (Solved) http://weblogs.asp.net/guybarrette/archive/2007/11/20/visual-studio-2008-failed-installation-solved.aspx...[阅读全文]

posted @ | Feedback (7) | Filed Under [ .NET VSTS/TFS ]

摘要: 参阅Somasegar的博客http://blogs.msdn.com/somasegar/archive/2007/11/19/visual-studio-2008-and-net-framework-3-5-shipped.aspx MSDN订阅者可以去MSDN下载,下面是产品下载主页的地址:http://msdn2.microsoft.com/en-us/vstudio/products/aa700831.aspx 下面是 .NET Framework 3.5 (英文版) 的下载地址:在线安装版:http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=en 完整安装版:http://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe 下面是免费的Visual Studio 2008 Express版本的下载地址:http://www.microsoft.com/express/download/default.aspx...[阅读全文]

posted @ | Feedback (6) | Filed Under [ .NET ]

摘要:在MVC中,服务器端的行为是由进来的URL控制的,譬如,在Scott Guthrie的博客中示范的/Products/Categories URL,会调用ProductsController的Categories方法,该方法从数据库里获取数据,然后它通过RenderView调用某个视图(示范中是“Categories”视图),把数据传给视图,该视图会根据传入的数据生成HTML,返回给用户。 如果是个添加、更改数据的操作,譬如添加一个分类,那么你大概会有类似这样的表单(譬如来自“CategoryInfo”视图): <form method="post" action="/Products/AddCategory"><input type="text" name="Category.Name">...<input type="submit" name="btnAdd" value="submit"></form> 在用户提交表单时,系统会调用ProductsController的AddCategory方法,根据AddCategory的签名,系统会自动填充生成Category对象所需的数据或者你需要从Request对象中手工获取数据,更新数据库完毕之后,你可以通过转向等方式返回到/Products/Categories。 在这2个例子(/Products/Categories和/Products/AddCategory)中,我们有一个控制器ProductsController,和2个视图(“Categories”和“CategoryInfo”)。视图只用作显示HTML之用,所有的应用逻辑都在ProductsController中。 在目前的WebForm做法中,你大概会有2个网页Categories.aspx和AddCategory.aspx。常见的做法是,在Categories.aspx的Page_Load或其他事件中,你大概会调用某个服务对象或Presenter对象获取数据,然后根据数据生成HTML。对于AddCategory.aspx,在用户提交表单后,postback返回当前页面,系统会调用按钮点击的处理函数,然后你大概会在该函数里收集数据,调用某个服务对象或Presenter对象更新数据库,然后转向到Categories.aspx。在这个做法中,系统是根据从表单返回的Request.Form数据(ViewState,以及在Request.Form存在类似btnAdd=submit这样的数据)来决定调用那个方法的(因为一个页面上可以有保存按钮,删除按钮等等),控制是在页面层次,跟Products有关的应用逻辑散居于多个页面的后台代码中(你也许可以使用MVP这样的模式,把控制的逻辑集中到Presenter里去,但这改变不了最初的控制来自页面这个事实,而且一般情形下,一个Presenter大多只跟一个页面有关联)。 有个同事问我,那么WebForm中的AutoPostback=true的DropDownList该如何在MVC中实现呢?在WebForm中,如果一个DropDownList设置了AutoPostback=true,用户改变选择时,表单会自动postback,ASP.NET会对该DropDownList的ViewState里保存的数据和该DropDownList返回的值做比较,然后触发DropDownList的SelectedIndexChanged事件。。。在MVC中,你大概可以这么做 <select name="category"  onchange="this.form.action='/Products/ChangeCategory';this.form.submit();">...</select> 在表单自动提交后,MVC会调用ProductsController的ChangeCategory方法,该方法会根据情况做些操作,调用视图等等。如果这个选项改动需要更新当前页面的某个局部,那么onchange也许可以调用某个AJAX方法,只传回必要的数据到服务器,而ProductsController的ChangeCategory方法可以返回要做的HTML变化等。 ...[阅读全文]

posted @ | Feedback (10) | Filed Under [ ASP.NET/IIS AJAX/ATLAS ]

摘要: 【来源:Tim Sneath】 如果你在学习Silverlight或者想建造一个录像网站,那么Tim Sneath推荐的这个刚刚在CodePlex上发布的项目,Video.Show,是个非常有参考价值的项目。这个项目使用了微软最新的技术和产品,.NET Framework 3.5, ASP.NET AJAX, LINQ, Silverlight, Expression Encoder 和 Silverlight Streaming等。它提供了录像上传,编码,添加tag,观看和评论录像的功能,下面是一些该项目的特性: 1.用以浏览录像的录像墙,把鼠标移到录像图标上面可以预览录像2.基于时间标记的评论系统,可以把录像暂停在某个有趣的时刻,添加评论,这些评论在回放时就会出现3.使用ASP.NET的网站成员功能,用来登录,生成自定义的用户信息,添加书签和tag,上传录像等4.针对没安装Silverlight的用户的初次体验,示范了检测和安装Silverlight的最佳实践5.使用Web服务实现索取录像目录,以及tag和书签等功能6.使用Expression Encoder对录像进行编码以及上传到Silverlight Streaming等后台批处理任务 该项目是以源码的形式,在Microsoft Public License许可下发布的,你完全可以使用这些源码推出你自己的录像网站。...[阅读全文]

posted @ | Feedback (7) | Filed Under [ ASP.NET/IIS .NET AJAX/ATLAS WPF/SilverLight ]

摘要: Scott Hanselman在博客上强调1. ASP.NET MVC框架不是 Web Forms 4.0,而是提供一个选项,好比汽车和摩托车,到达目的地可以用多种工具,每种工具都有其长项和短处,但别削足适履2. ASP.NET MVC框架将成为System.Web.Mvc, 将与ASP.NET的子系统相兼容,这意味着你也可以在其中使用或滥用Session, Cache, Personalization, Roles, Membership等3. ASP.NET MVC框架的扩展性会很好,可以使用Castle Windsor作为它的IoC容器,可以用NHibernate做持久,Brail做视图等 他同时提供了他在DevConnections做的MVC示范的源码(可惜没有跟MVC相关的DLL),可以在他的博客上下载。 有人抱怨,自ASP.NET AJAX 1.0发布以来,ASP.NET AJAX的进展好像不是很大,Joe Stagner指出在ASP.NET 3.5和Visual Studio 2008中, 1. ASP.NET AJAX不再是单独的附加产品,而是集成进了ASP.NET2. Visual Studio 2008对JavaScript提供完全的和动态的Intellisense支持3. Visual Studio 2008提供对JavaScript的调试支持,你可以加断点,使用Watch, Immediates, Call Stack等窗口4. WCF 支持JSON, RSS, 和 POX,意味着你可以使用AJAX 调用WCF服务5. AJAX 控件工具包已多达34个控件6. ASP.NET提供64个ASP.NET AJAX “How Do I”录像 另外ASP.NET Futures方面,1. ASP.NET Futures提供对Safari浏览器的历史的支持,包括在客户端对历史的支持2. ASP.NET Futures的CSS Selectors APIs 与W3C推荐相兼容3. ASP.NET Futures的脚本资源分离器允许你将程序集中内嵌的资源脚本转换成单独的脚本文件 另外,如果你想参与,ASP.NET控件工具包项目是开源的,具体细节参考Joe Stagner的博客: You can contribute to the ASP.NET AJAX Control Toolkithttp://weblogs.asp.net/joestagner/archive/2007/11/09/you-can-contribute-to-the-asp-net-ajax-control-toolkit.aspx...[阅读全文]

posted @ | Feedback (5) | Filed Under [ ASP.NET/IIS .NET AJAX/ATLAS ]

摘要: 微软动态语言组的John Lam在博客《IronRuby on Silverlight at RubyConf》里说, “。。。。once we (DLR) sync up with the next CTP of Silverlight, you'll be able to run IronRuby in your browser. Fun times.”(一旦DLR与下一个Silverlight CTP版本代码同步后,你将能在浏览器里运行IronRuby,好玩的时候就开始了。。。) 在评语部分,Jeremy问, 当你说:“在浏览器里运行IronRuby”,这意味着我们可以通过Ruby来对DOM进行操作么?因为依我来看,那才是真正开始好玩的时候。 John Lam的答复是,对,那肯定是Silverlight通过HTML桥(HTML bridge)支持的一个情形。在RubyConf大会上,有些家伙有些非常有趣的想法,想在Ruby里建造一个独立于浏览器(browser-agnostic)的DOM+WPF编程层 (DOM + WPF programming layer in Ruby)。...[阅读全文]

posted @ | Feedback (0) | Filed Under [ .NET WPF/SilverLight ]

摘要: Silverlight.Net有一些,其他的网上资源: 1. Silverlight Games 101 (Silverlight 1.1),从头开始教你如何开发一个太空游戏,涉及如何组织代码,游戏循环,怎么测试碰撞等。他们还在CodePlex上发布了一个物理引擎。 2. David Anson的数独游戏 3. Bill Reiss的 Dr. Popper游戏 (Silverlight 1.1) 4. SilverlightFan网站汇集了N个游戏,包括Tetris,Virtual Earth,Zero Gravity,Bouncing Balls等等 5. SilverlightAddict的SilverLander (Silverlight 1.1) 6. Dr. Dobb的Sparkle Ball游戏(Silverlight 1.1) 7. Game of Life in Silverlight and F# (Silverlight 1.1) 8. Vincent Vergonjeanne的Bubble Factory (Silverlight 1.1) 9. Tim Stall的Truck Wars Strategy Game v1.1 (Silverlight 1.1) 10. Zero Gravity (Silverlight 1.1) 11. Chris Cavanagh的物理模拟器 (Silverlight 1.1) 12. Scott Allen的Swinging Rope 13. A Silverlight graph visualizer (Silverlight 1.1) 14. Tim Sneath的50大Silverlight应用列表 (有些链接与上面有重复)...[阅读全文]

posted @ | Feedback (3) | Filed Under [ .NET WPF/SilverLight ]

摘要: Ted Neward在最近的博客里引用了这个博客里的有点“禅”味的句子, To be a Great Programmer, you must admit that you are a Terrible Programmer(想成为出色的程序员,你必须承认你是个糟糕的程序员) 然后他说, "I am human, therefore I make mistakes. If I make mistakes, then I cannot assume that I will write code that has no mistakes. If I cannot write code that has no mistakes, then I must assume that mistakes are rampant within the code. If mistakes are rampant within the code, then I must find them. But because I make mistakes, then I must also assume that I make mistakes trying to identify the mistakes in the code. Therefore,......[阅读全文]

posted @ | Feedback (12) | Filed Under [ .NET TDD/DDD/BDD ]

摘要:根据微软的官方报道,微软开发部门的主管S. “Soma” Somasegar 今天在西班牙举行的TechEd上宣布,微软将于2007年11月底前发布Visual Studio 2008 和 .NET Framework 3.5。...[阅读全文]

posted @ | Feedback (6) | Filed Under [ .NET ]

摘要:近年在法国,芬兰等地流行一种程序员活动的形式,叫“Coding Dojo(编程道场)”,围绕着小规模的编程主题挑战进行研究(有点模仿Dave Thomas的Coding Kata的意思),各种不同水平的程序员在一起探讨某个问题的解决方案。芬兰的活动有这样一些规矩: 1.参与人数不超过15人2.编程挑战的主题会预先告知3.活动之前会预先公布即将进行的活动将采用的编程语言4.实际的编程以迭代的形式进行,在每个编程迭代前,可以有一段简短的计划时间5.主持人起项目所有者的作用6.活动房间内有一台计算机连到大屏幕上7.开始时,主持人解释编程挑战内容,然后从与会人中挑选二人开始“乱战(Randori,散打?)"8.上场的二人必须使用测试驱动开发(TDD)9.每5分钟换掉其中一人10.上场的二人要不停地解释他们在做什么11.观众中有人提问或不理解的话,他们必须中止,直到理解为止12.编程测试出现绿灯时,观众才能对设计进行评论(在红灯期间观众只可以问问题)13.观众对当前的设计不满意的话,上场的二人不可以编写新代码(在编写新代码之前,必须对当前代码进行重构)14.所有的生成的代码在Apache License(2.0版)许可下公开 芬兰以往的活动有这样一些主题:1.计算网球得分2.对一手扑克牌进行分类3.用ruby on rails建造一个基于web的blackjack游戏4.建造Connect Four(四子棋?)的领域模型5.建造数独(Sudoku)游戏的领域模型6.建造一个可交互的Commodore 64 Basic解释器,采用了一个Java的行为驱动开发框架(BDD) 在编程道场的网站上,列出了一些可以做练习的主题(Kata-日文“型”-大概是招式,套路的意思):1.计算随购买数量而变的折扣书的金额(我对该题目做了大概翻译,点击这里阅读)2.从ASCII图形中读出数字并做验证,然后输出,对出错的图形进行校正3.对扑克牌的手数进行分类,并辨别赢家4.保龄球记分(好像跟Robert Martin的模式书里的类似)5.输出1到100的数字,但如果是3的倍数,就不输出这个数字,而是输出“Fizz”,5的倍数就用“Buzz”代替,如果同时是3和5的倍数就输出“FizzBuzz”6.扫雷游戏7.Reversi(翻转棋)游戏,根据当前布置,返回合法的着法...[阅读全文]

posted @ | Feedback (4) | Filed Under [ 杂类 TDD/DDD/BDD ]