visual Studio Magazine - 01- 2009



Comments



Description

0109vsm_C1.v2 12/15/08 11:56 AM Page 1 Is Agile Rock or Disco? VisualStudioMagazine.com E N T E R P R I S E S O L U T I O N S Partition Web Apps Intelligently JANUARY 2009 • Vol. 19, No. 1 Microsoft’s MVC framework makes it possible (finally!) to implement “a separation of concerns” in ASP.NET. PLUS Target Multiple .NET Frameworks Windows Workflow Changes Direction F O R .N E T D E V E L O P M E N T Project5 12/11/08 4:42 PM Page 1 BeTheDataGuru Visual Studio WPF/Silverlight SharePoint SQL Server Java COM PowerShell Project5 12/11/08 4:43 PM Page 2 Achieve AHigher State Of DataVisualization To master the art of data visualization, you must seek out the leader. For almost two decades, Software FX has risen above all others by bringing top-of-the-line data visualization tools to enterprise developers working with diverse markets, platforms and environments. This wisdom has evolved into a vast body of products, including a data presentation tool that provides a best-of-breed solution for Windows developers seeking enterprise quality and performance, as well as a professional IT monitoring solution offering incredible features for reporting and monitoring data. For a world of data visualization products that can raise your work to a higher level, depend on the source that’s clearly on top. Our most popular product, Chart FX provides charts, gauges and maps with additional vertical visualization functionality for business intelligence (OLAP), geographic data, financial technical analysis, and statistical studies and formulas. Recognized as the innovator and leader of the charting component category for the past 15 years, Chart FX delivers incomparable gallery options, aesthetics and data analysis features. Grid FX was specifically designed for visual studio developers to take advantage of a powerful design-time experience, integrated Chart FX functionality right in the box, and AJAX to provide robust, run-time functionality in ASP.net applications. The dynamic aesthetic features for data presentation and analysis allow simple adaptation to an existing application or to specific corporate branding guidelines. PowerGadgets puts powerful IT monitoring on your desktop and in your data sidebar. IT professionals can now create gadgets that consume data from WMI, Exchange, SQL Server and even the Windows Registry. PowerGadgets does not require any development environments, servers or browsers to run real-time gadget components such as charts, gauges and maps. Visit softwarefx.com for interactive demos and more information about our latest products. Data visualization for every need, every platform . . . . . . . 1 C O LU M N S C# CORNER 21 Target Multiple . . . . .0 changes everything. .NET—something that was difficult. BY JEFFREY SCHWARTZ AND MICHAEL DESMOND 31 Index of Advertisers 32 The Pragmatic Developer Is Agile Rock or Disco? BY BILLY HOLLIS . . as well as how to review what you create with unit testing. why using string primary keys is a bad idea. Views.com 24 Ask Kathleen Windows Workflow Changes Direction Learn how Windows Workflow 4.9 10 F E AT U R E S 10 Partition Web Apps Intelligently Microsoft’s Model-View-Controller framework makes it possible to implement “a separation of concerns” in ASP.” Steve Michelotti. . and code—properly. . BY BILL WAGNER D E PA RT M E N T S 6 Letters to the Editor 7 Editor’s Note BY PATRICK MEADER 8 First Looks Product Listings . . “Partition Web Apps Intelligently. business logic. . . . . . BY STEVE MICHELOTTI “The MVC framework solves the separation of concerns problems of traditional web forms by partitioning responsibilities between Models. . . . Learn how to take advantage of MVC to design better Web apps that separate their architectural elements— the UI. . . . . . . . .8 Reviews . .” p. .v6 12/15/08 9:39 AM Page 2 Contents January 2009 • VOLUME 19 • NO. and Controllers. previously. . . . and how to copy files into the executable directory. . . . . . . . . BY KATHLEEN DOLLARD 28 Special Interview Connect to the Cloud In this special interview. . . . It’s time to dispel that myth.0109vsm_TOC_02-04. Microsoft Corporate Vice President Robert Wahbe discusses the Azure Services Platform and Software plus Services applications with 1105 Media’s Jeffrey Schwartz and Michael Desmond. .NET Frameworks Many developers have the misconception that targeting older versions of the Framework means you can’t use any of the new C# language features. . . . 10 2 VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. . . get a data grid for Windows Presentation Foundation. . load files at runtime. . . . . if not impossible. . . binary and Mac files. HTML. C++. RadControls for ASP. VCL. ABC) and more. RadChart. Digital Certificates. programmers. UNIX.com/dtsearch VMware Infrastructure 3 offers SMB organizations a scalable and cost-effective way to optimize utilization of technology assets.99 $ 949. and more affordable with c-treeACE. TXT Professional Edition • PDF export without additional 3rd party Paradise # tools or printer drivers T79 02101A01 • Nested tables. S/MIME encryption. XQuery. document clean up. 2005. 1. Linux. C/C++. and much more. WPF . Enhanced search functions include Perl 5 Regular Expressions and definable filters. Delphi. new . Includes file compare. XML. desktop deployments.NET TB3 01101A01 includes: RadEditor. users can map seamlessly between any combination of XML. programmers. You’ll dramatically transform your development processes. Call for pricing on the Standard High Availability Acceleration Kit and Midsize Acceleration Kit. RadWindow. Java.com/faircom Altova MapForce 2008 ® programmers. File Sync Integration for: Delphi 6. save significant time and resources. COM. free quarterly update CDs and free upgrades during the subscription term. Version • Multi-threaded OCR/ICR/OMR/ 16! MICR/Barcodes (1D/2D) • Forms recognition/processing • PDF and PDF/A Paradise # L05 03201A01 • Annotation (Image Mark-up) • C/C++.NET • Point-and-click administration • Fully configurable user interface ™ Paradise # F01 0131 711. and support for over 50 languages.com/multiedit programmersparadise. high-speed scanning. Document and New Control Your Software Project Release! by Sparx Systems Enterprise Architect is a comprehensive. Credit Card Processing.99 Single Server Paradise # D29 02101A07 New Release! c-treeACE Professional Powerful Defect and Project Tracking by TechExcel $ Add dtSearch‘s “blazing speeds” (CRN Test Center) searching and New file format support 64-bit Version! • dozens of full-text and fielded data search options • file parsers/converters for hit-highlighted display of all popular file types • Spider supports dynamic and static web data. RadControls for ASP. and dbExpress • Graphical productivity tools • Simple deployment • No DBA or ongoing administration • Low deployment licensing costs • Cross-platform support for all major platforms including Windows. programmers. Foundation Acceleration Kit Paradise # V55 47101A01 2. flat file. VBScript/HTML. and to integrate with Eclipse and Visual Studio $ 99 2005/2008. bullets.NET enhances your Web applications by adding AJAX functionality to your ASP.NET Spider API /n software Red Carpet Subscriptions DevTrack Small Team Edition 5-User Pack Paradise # T34 0208 VMware Infrastructure Acceleration Kits dtSearch Engine for Win & . RadTabstrip.com/nsoftware • Sophisticated workflow engine Paradise # SC5 03101A01 “Bottom line: dtSearch manages a terabyte of text in a single index and returns results in $ 99 —InfoWorld less than a second.NET projects. Through its visual interface. text $ 99 frames.0/2. by FairCom TechExcel DevTrack is the most powerful. RTF. 648. and C#. DOC. JDBC. .1) and cross-browser compatible Single Developer Web applications.007.com/sparxsystems 196. 7. ShadowProtect IT Edition provides IT Professionals with a bootable Windows environment to create and restore compressed and encrypted backups. Add grid. StorageCraft™ ShadowProtect IT Edition provides complete bare metal recovery in minutes. The suite takes full advantage of the features included in Visual Studio 2005. and/or Web service.1 supports UML. 3. WCAG 1. headers & footers. DoDAF and TOGAF. Enterprise Architect 7. easier to deploy.504. LINQ. /n software Red Carpet™ Subscriptions give you everything in one package: communications components for every major Internet protocol. Paradise # D77 09101L01 1.99 $ programmers. multiple undo/redo. and Integration Tool by Altova MapForce: The premier data mapping. These new kits offer midsize and smaller organizations and branch offices a cost-effective way to deploy a comprehensive virtualization solution that includes centralized management functionality. BPMN and other open standards to analyze. C++. standards-compliant (WAI-A. programmers. then convert data instantly or auto-generate an application for recurrent transformations.252. database. edit or restore backup images on as many servers.Win32/64 $ 99 programmers.0. Languages for code generation include: XSLT 1. Additional plug-ins are Paradise # also available for Zachman Framework. XHTML 1.Project4 12/11/08 4:04 PM Page 1 Your best source for software development tools! ® LEADTOOLS Document Imaging v 16: by LEAD Technologies LEADTOOLS Document Imaging has every component you need to develop powerful image-enabled business applications including specialized bi-tonal image display and processing.1 ® Visual Data Conversion.NET. Create online or cold state backups in minutes. images. The ideal organization has a growing IT environment with between 15-60 servers. • Complete set of APIs including ADO. no software installation required.NET.com/lead 2. code beautifying. conversion. navigation and charting functionality to your AJAX and ASP. Delphi. VS 2003 & VS 2005. and deliver quality products on-time and on-budget.com/theimagingsource Enterprise Architect 7. C++. C#. SysML.NET WinForms control for VB.NET helps developers deliver feature-rich.NET. highlights hits with links.com/telerik Multi-Edit 2008 delivers. well under1-4 Users stood systems. advanced compression (CCITT New G3/G4. and Mac OS X New Word Processing Components Release! TX Text Control is royalty-free. Transformation.0. affordable and easy-to-use defect and project tracking tool for development organizations. RadCalendar. Supports large DOS/Windows. $ 99 RadGrid. merge fields Download a demo today. etc. StorageCraft ShadowProtect IT Edition v3. JBIG2.com/techexcel 919. Not responsible for typographical errors. SQL and more.” programmers. ZIP compression. while significantly cutting Paradise # their development time. Corporate Edition test and construct reliable. programmers.com/storagecraft 800-445-7899 Prices subject to change. desktops and laptops as needed.99 $ Make your applications faster.com .x Telerik RadControls Multi-Edit 2008 by Telerik by Multi Edit Software by StorageCraft Create. VC 6. UNIX. with its speed. Instant Messaging. C++Builder 6.056. command maps.444. intact • API supports . and integration tool from the creators of XMLSpy®. numbered lists. MRC. robust and powerful word processing software in reusable component form. a powerful IDE. one for each of the three editions of VI3. editing. SSL and SSH security. simplify IT management and protect the data and IT environments that run their businesses. SP6 0001 MODAF. design. Java. • .com/altova Visualize. together with per developer licensing. and even e-business (EDI) transactions. • Ready-to-use toolbars and dialog boxes New Release! Enterprise Edition 1 user Paradise # I0D 03101A02 1. RadCombobox.414.99 $ programmers. RadMenu. everything is included.99 $ programmers. ASP • File formats DOCX.1 modeling suite providing key benefits at each stage of system development. RadSpell. . ODBC.NET and C# • ActiveX for VB6. sections. combo.NET projects. EDI. RadControls for ASP. RadInput.NET.com/vmware TX Text Control 14 by /n software The c-treeACE database engine is a high performance database alternative proven by developers in mission critical enterprise systems. depth. New Release! 1-49 User Paradise # A30 01201A02 161. and embedded devices for over 25 years. RadUpload. no software installation required. RadAjax. BDS 2006 and RadStudio 2007. integrated UML 2. Three new Acceleration Kits are now available. VB 6. RadTreeview and more. Java.99 $ programmers. NET Application One of the features added in Service Pack 1 for . he moves on to the next obvious step: Creating a Master/Detail page with updating. ask questions of the experts. wireless. opinions. 4 VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. Redmond Media Group Events offers a variety of conferences and shows where you can learn about new technologies and what they might offer you. and pose questions designed to stimulate discussion. he takes a look into the future and explains how the new branch visualization feature in VS 2010 will bring order to the chaos of branching and merging.NET. ASP. Routing allows you to disconnect the physical structure of your site from the URLs that users invoke to access pages on your site.com. and XML.0109vsm_TOC_02-04.NET developers these days. we’ve got an event that matches your needs. and interact with your peers to discuss problems they face and what solutions they’ve come up with. . interviews. LOCATOR+ CODE: VS0901DW1 What Are Locator+ Codes? Locator+ codes give you instant access to a feature on Visual Studio Magazine Online. Dan Wahlin explains how to avoid duplicating properties between controls. or you could let the experts do it for you. interviews with industry insiders. Visit the Redmond Media Group events page at http://redmondevents. While control properties can be set directly on the control in a XAML file using attributes. LOCATOR+ CODE: VS0901PV2 ONLINE BLOGS VSM’s Big Issue Visual Studio Magazine’s Editor in Chief Patrick Meader and Managing Editor Guy Wright are kicking off a collaborative blog where they take a look at some of the bigger issues facing .NET.NET development. attend in-depth workshops that focus on topics specific to your needs. Sign up for free at visualstudiomagazine.com Content LEARN FROM THE PROS As a developer you are constantly facing the problem of how to keep up with all the new technologies being released while still getting your job done. causing maintenance headaches. LOCATOR+ CODE: VS0901JL1 Practical ASP.NET). some properties will be duplicated between controls.NET NEWSLETTER SIGN-UP Every week. You keep hearing about solutions to your programming problems but the question is: are they the right solutions for your particular needs? You could spend the hours or even days trying to find the answers yourself.v6 12/15/08 9:39 AM Page 4 Online Check out these and other exclusive online articles and tutorials on the Visual Studio Magazine Web site at VisualStudioMagazine.NET: Routing Your ASP. Whether it’s Web design. or SQL Server programming. SQL Server and data access. .NET 3. LOCATOR+ CODE: VS0901BI1 ONLINE TUTORIALS Wahlin on . Simply type the Locator+ code into the field in the upper-right corner and click on FIND IT.NET Insight e-mail newsletter brings you up-to-date news.5 is routing (which first appeared in the MVC version of ASP. In this installment of Jeff Levinson’s Inside VSTS online column. ONLINE ARTICLES Inside VSTS: Branching in Visual Studio 2010 One limitation in Team System today is that you can’t easily visualize your branching structure so it’s difficult to understand the movement of code from branch to branch.com to learn more about upcoming conferences and shows.com . LOCATOR+ CODE: VS0901PV1 Practical ASP. C#. The blog will feature opinions.NET: Adding Style to Silverlight 2 Controls Silverlight 2 provides a nice set of controls that can be used to capture and display data. Web services. the . and analysis on topics and technologies such as Visual Basic . technical information.NET: Creating Master/Detail and Update Pages with Entity Framework In previous columns Peter Vogel showed how to build a simple Entity Framework model and used it to drive a series of drop-down lists both with and without the AJAX-enabled UpdatePanel. Check out their new blog. With this column. In this tutorial. Peter Vogel explains how to take advantage of this feature to rearrange your site’s structure without invalidating your users’ bookmarks. AJAX. first served. ADO.0.NET Entity Framework. ADO. Silverlight 2. Windows Forms. • New products including WPF. 23. 2009 SAVE UP TO $300 Don’t Miss Out On This Special Offer For VS Magazine Readers! Register for VSLive! And Get a FREE pass to the MSDN Developer Conference! Register for VSLive! San Francisco by Jan.com/sf2009. Don’t get left behind. and Microsoft continues to introduce key new products. (Space is limited. Rosario. first come. • Over 80 sessions and workshops — • Production products including NET 2.San Francisco Hyatt Regency Embarcadero February 23-27. VSTO.) To view the complete agenda and take advantage of your VS Magazine reader discount. Feb. LINQ.5.0/3. BONUS! FREE pass to Microsoft’s one-day MSDN Developer Conference on Monday.0.NET 3. Cloud computing. 21 and save an additional $100 over our Early Bird savings.NET 4. Brought to you by: 0109vsm_VSLive Ad_p5. and DataSet. go to vslive. Be sure to use promo code NQ9F14 and save an additional $100 off of our regular conference packages.indd 1 12/15/08 2:15:41 PM .0. deep-dive content VSLive! is known for.NET Entity Framework • Future technology including . WF. . Software development is changing faster than ever. WCF. Be sure to enter priority code NQ9F14.NET. SAP. Windows 7. Multi-Touch • Tech tips from the best minds in the business with information you can use now. Join your fellow developers for: • Tons of independent. developers and authors turn the differences between languages into arguments about why one language is better or worse than the other. Brust. Keith Pleas.v5 12/15/08 2:30 PM Page 6 Letters Letters to Visual Studio Magazine are welcome. Fax 415-814-0961 Irvine Office 949-265-1520. Nevertheless.com. These real-world articles told you how the languages work and the issues you can expect to encounter if you switch between the two. VisualStudioMagazine. Peter Varhol. fax them to 415-814-0961. “What VB Devs Should Know About C#. Web Development Rita Zurcher President Henry Allain Vice President.. After reading Dollard’s article.com Executive Editor. I like VSM immensely and have enjoyed reading it these several years. As a VB user. Office 2007 is a daily source of frustration for me at my job. address.com.6.” I suspect the vast majority of users have the same frustrations. Morollo Michele Imgrund Tracy S. Langer Erik A. Letters must include your name. Lindgren Carmel McDonagh Jeffrey S. Don Kiely. E-mail: E-mail is routed to individuals’ desktops. John Charles Olamendy Turruellas. VisualStudio Becky Nagel Magazine. Do not include a middle name or middle initials. “What C# Devs Should Know About VB. Rodney Bryant. Calif. Fax 949-265-1528 Corporate Office 818-734-1520. Roger Jennings. Coates Vice President. New Media Online News Editor Associate Editor. San Diego. or 1105 Media.” December 2008] and Bill Wagner [C# Corner. Please send them to Letters to the Editor. Letters might be edited for form. I suspect that their executives would have found these products just as frustrating as we do had they been using them without handholding or flashy demos from their evangelists. Letters express the point of the individual authors. Please keep up the good work. RMG Wendy Gonchar Associate Managing Editor. Ken Cox. c/o Visual Studio Magazine. but I love what you did with these articles and hope to see more like them in the future. Jeff Levinson. Fax 818-734-1528 Visual Studio Magazine The opinions expressed within the articles and other contents herein do not necessarily express those of the publisher. or mail. Too often. fit. RMG Katrina Carrasco Contributing Editors Andrew J. I can understand better why my own team has faced some of the issues it has. Circulation Chairman of the Board Abraham M. telephone. A list of editors and contact information is available at VisualStudioMagazine. Dan Fergus.com Reader Likes the Switch I ’ve been a VSM reader for more than five years and a Visual Basic user for a few years longer than that.m. Martin Kulov. silly omissions like the Run command on the Start menu really bug me. It’s sad that Microsoft. and daytime phone number to be considered for publication. Cook Videssa Djucich Neal Vitale Richard Vitale Michael J. As a seasoned Windows user and software architect by trade. Publishing Director of Marketing Online Marketing Director Marketing Programs Manager President & Chief Executive Officer Senior Vice President & Chief Financial Officer Executive Vice President Matt N. and do not necessarily reflect the views of the editors. or e-mail them to vsmedit@1105media. John Cronan. Maybe this is because they’re all going to ask me for help or even blame me if they get stuck or “lost” in Vista or Word 2007. Please use the following form: FirstnameinitialLastname@1105media. 6 VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. I have been consistently advising my colleagues and relatives who are contemplating buying a new PC to get one with XP pre-installed and to buy Office 2003. Information Technology & Web Operations Vice President. exasperating ribbon with the pared down menu options” [Editor’s Note. Meader is not alone. Finance & Administration Christopher M. . Valenti President.com. Web Web Producer Michael Domingo Kurt Mackie Gladys Rama Shane Lee Director. I have had only a little experience with Vista. San Francisco Office 415-814-0950. San Francisco. Bill Wagner Art Staff Creative Director Scott Shultz Senior Art Director Bruce Gardner Graphic Designer Erin Horlacher Online/Digital Media Editor. fax. John Gavilan. I wanted to let you know that I especially enjoyed VSM ’s recent twin columns from Kathleen Dollard [Ask Kathleen. has somehow dropped the ball on its core products by trusting its younger generation of product managers without some serious hands-on usage of their own dog food. “Microsoft Opens Up (Even More). you will be directed to individual extensions. Doug Barney Editorial Director Editor in Chief Managing Editor Patrick Meader Guy Wright Managing Editor. it was informative for me to read about the potential issues C# devs might face when they work on projects with me. CA 94111. Norm Katz. VSM. 1 Editorial Staff Vice President. After 5:30 p. Mr. Pacific time.0109vsm_Letters.m. received by e-mail Office and Vista Both Exasperate I agree completely with VSM Editor in Chief Patrick Meader’s comments about Office 2007 and its “detestable.com January 2009 • Volume 19 • No. and certainly not a “raving nutter. and style.” October 2008]. Klein REACHING THE EDITORS Editors can be reached via e-mail.m. Bill McCarthy. Telephone: The switchboard is open weekdays 8:30 a.” December 2008] on the issues you face when switching between C# and VB. 1105 Events Dick Blouin Vice President. and I do find the new explorer easy to navigate. Audience Marketing & Web Operations Vice President. with its vast resources. 230 California St. to 5:30 p. both print. we want the VSM blog to be more of an open forum where we pose questions on topics we think are worth discussing and then encourage readers to share their opinions. and they were always telling me how much their computer kicked the ass of every other computer. Guy and I will both be posting to the page. while also nagging the editor in chief to turn his articles in. as well. But in the time-honored tradition of bosses everywhere.NET and be productive in the same way that pre-. He has worn other hats. Maybe. To put it another way. he reminds me. For the past couple of years. which served Commodore’s VIC-20 and Commodore 64 computers. He notes that he wasn’t a professional programmer—a not-uncommon trait for many people who initially picked up VB—but he appreciated the way it let smart people who knew the business rules implement solutions for their domains. Guy has been involved in several computing. We will be updating this blog frequently.com or ednote@1105media. and it gets easier over time. not days!” he tells me. We look forward to carrying on this conversation online. Guy has played policeman on the staff. after all. working with the development team on Commodore’s ill-fated CDTV device. Once upon a time. putting the first comic books on CD-ROM. Beginning this month. and I’ve been working at this magazine for going on 13 years. let him do it. VSM Talk Back: What would you like to see us cover in the new VSM’s Big Issue blog? Tell me at vsmedit@1105media. when he began his publishing career with a two-year stint as the technical editor and technical manager of RUN Magazine.) We will be inviting many of our friends of the magazine to stop by and chat about these same issues. I sense opportunity here. maybe not. One subject Guy and I have chatted about extensively is the fact that it’s much harder to pick up VB.and Web-based. where the writers climb up on their own particular soapboxes to share their takes on the world. when the Apple 2 loomed large and the IBM PC juggernaut had yet to be established. all of the cool kids I knew had Amigas. If it’s so easy. making sure the process runs smoothly and the articles are edited properly. One of our main goals with this blog is to make it easier to talk to the editors. We’ll include short interviews with magazine luminaries and columnists. (OK.NET versions of VB let you pick up the tool and be productive. and key technology implementers at the third-party companies who drive much of the innovation in Visual Studio. “You’ve been doing this long enough that your turnaround on these should be minutes. and even spending some time in purgatory—I believe he calls it heaven— using VB3 to create magazine archive CD-ROMs and demo discs. though Guy will be posting a bit more frequently than I will—he does have to show me how it’s done. VisualStudioMagazine. I still do.v6 12/15/08 Editor’s 9:13 AM Page 7 Note VSM’S NEW BIG IDEA BY PATRICK MEADER editor in chief PHOTO BY PAT JOHNSON STUDIOS If you’re a longtime programmer or merely someone who has followed computers for a while. I felt it was a coup for the magazine to score someone with Guy’s experience when we hired him. Guy was programming in VB before I’d even heard of VB. to express what you like or don’t like about the magazine. issues that wouldn’t normally fit neatly into the pages of VSM. we might occasionally do a little soapboxing when the mood strikes. He’s been writing editorials for years. Guy will begin overseeing VSM’s new online blog: “VSM’s Big Issue. and to give you a forum for telling us how we at VSM can serve you better. Guy Wright has been working at computer-related magazines since the personal computer’s relative infancy. Since his time at AmigaWorld Magazine.com · January 2009 · VISUAL STUDIO MAGAZINE 7 .com. In contrast to many other blogs you can read.” This blog will serve as a jumping-off point for discussing the issues and technologies of interest to Visual Studio developers. stretching back to 1983.0109vsm_EdNote_07.and B2B-related titles. Guy followed that gig up by serving as the founding editor in chief at AmigaWorld Magazine. so be sure to stop by often to see what’s new. it’s possible you’ve seen the work of VSM’s managing editor before. movers and shakers at Microsoft. And so he shall. The upgraded suite also includes a new ASP. stub.NET controls including a new Gauge Control. San Francisco. or mock any class in the system. and build tools. communication.. Price: DXperience Enterprise Subscription prices start at $1. Typemock products support Microsoft Visual Studio 2005. and improved Eclipse integration. IDE productivity tools. and a new WinForms Alert Window Control. TeamCity. Isolator and Racer. improves team VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. features. new integrations. and server-side code analysis with over 600 code inspections. and Loading Panel Control. The Typemock Isolator mocking framework for . any constructors.NET Grid View.devexpress. visit http://tinyurl. as well as improvements for old ones such as MSTest. a suite of presentation components.jetbrains. and work with any test framework. All Developer Express . and options that are available. the ability to mock any class.com. Typemock Racer helps find possible deadlocks in production code by allowing developers to write threaded tests to detect possible problems. the ability to mock any . . Features include the ability to mock the .NET unit testing and test-driven development. pre-tested commits. aids the software development process. e-mail vsmedit@1105media. Enterprise Edition prices start at $1.NET Framework. and TeamCity 4. and helps dev teams implement agile methodology and best practices.NET unit testing helps agile developers with . version control systems. When Racer detects a deadlock.v8 12/15/08 9:30 AM Page 8 First PRODUCT LISTINGS + Looks REVIEWS DXperience v2008 Volume 3. 8 Phone: 650-378-8571 TeamCity 4. the ability to dynamically choose at runtime whether to keep the classes’ original behavior. the ability to mock a class while keeping its original behavior. Isolator gives the agile developer tools to isolate.299. Phone: 415-814-0950. including FxCop and a dedicated Rake runner.com Editor’s Note: Please send product information to New Products Editor. in sequence or in parallel. and Visual Studio Team System 2008. which allows the code to be tested for deadlocks in multithreaded code.com/5wtqxr.0 D Developer Express has released DXperience v2008 volume 3. TeamCity automates routine procedures.com Isolator and Racer Typemock has announced the release of its next-generation unit-testing tools.0 provides scalability and extensibility via its Java API. CA 94111. DXperience v2008 vol 3 offers a set of new ASP.0109vsm_FirstLooks_08-09. c/o Visual Studio Magazine. Along with numerous major enhancements to its existing WinForms and WebForms products and the eXpressApp Framework. any interface. and all instances of a type.99 Isolator and Racer TeamCity 4.typemock.999 Phone: +972-3-681-5177 Web: www. and integrates with multiple IDEs. Isolator and Racer. and business application frameworks for Visual Studio. a new HTML Editor for SharePoint. For a complete list of the new controls. 230 California St.0 JetBrains has announced the availability of its continuous integration server and distributed build management tool. improved agentsauthentication mechanics.NET technologies can be purchased separately or as part of the DXperience Subscription program. fax: 415-814-0961. DXperience v2008 vol 3 Developer Express Inc. Racer provides a framework API that can be used in Parallel Computing tests. using the same set of sources. Data-Bound Image Control. Other features include the ability to redo any build from a particular version-control revision. With features such as fast feedback on build progress. and more. Visual Studio 2008.com free. TeamCity shortens the time needed for introducing new features and fixes. The latest version allows developers to break down a single build procedure into several parts that can be run on different build agents. JetBrains Phone: 702-262-0609 Price: Contact vendor for pricing Price: Professional Edition (up to 20 users) is Web: www. the events that lead to it—including thread names and locked resources—are displayed in Visual Studio’s output window. Filter Editor Control.NET language. and agents overview statistics for an entire project. per-agent CPUbenchmarks. TeamCity 4. reporting controls.0 Web: www.com Typemock Ltd. For example. DevPartner integrates well with DRILL DOWN ON APPS WITH PERFORMANCE ANALYSIS. Visual Studio 2008 (Visual Studio Compuware’s DevPartner is a comprehensive set of testing and performance analysis 2005 is also supported). Ontario. a Windows Service. Additionrequires a custom runtime manager that doesn’t support all ally. I found DevPartner to be a well-behaved addiCompuware Corp. and network access. DevPartner Studio from Compuware Corp. tion to Visual Studio. comparing it against a database of more than 600 rules.com · January 2009 · VISUAL STUDIO MAGAZINE 9 .NET I performance testing. ality through a single toolbar. later—Studio also includes a live runtime graph that tracks key If you don’t like the rules that come with Studio. Studio will do a static analysis of your source post-performance reports—which you can save to review code. though you’ll need some knowledge The only real limitation on Performance Analyzer is that it of regular expressions if you want to add new rules.NET isn’t supported. it tracks CPU usage.0109vsm_FirstLooks_08-09. VisualStudioMagazine.tool. determining memory usage (down to the memory used by individual objects). Provided solution containing several thousand lines of code spread you keep most of your code—and all of your performance-critical across an ASP. you need the ability some WinForms applications to exercise your objects. and several code—in middle-tier business objects. analyze your code as long as you’re willing to knock together When runtime performance is critical. well integrated into Visual head at once—or if you’re working in a team environment where Studio. adhering to standards is important—you need DevPartner. and reviewing source code. you can cusperformance metrics as your application executes. it left Visual Price: $2. gives you the ability to understand just how good—or bad—your application really is. Analyzing a application types. Peter Vogel is a . author and instructor living in Goderich. In addition to the purchase impact of any enhancements you make. source code analysis can be time consuming. DevPartner failed with a memory corAT A GLANCE ruption problem. Studio’s Performance price—obviously aimed at larger shops—you’ll need a computer Analyzer and Performance Expert lets you monitor your appliwith sufficient resources to run the tools.v8 12/15/08 PRODUCT LISTINGS + 9:30 AM Page 9 REVIEWS Understand What Your App Does If you’re building a complex application or working as part of a team. When I tried using Performance Analyzer in a virtual machine with only one gigabyte of memory.NET application. disk transfers. a source code anacations as they run in Visual Studio and report on which methods lyzer provides the most effective way to ensure that you—and are called. When working on projects where I didn’t Web: www. tomize the rules database. giving tools. If you’re building an application that’s too big to hold in your Pros: Highly functional. no direct support for ASP. VSM Cons: Expensive.NET consultant. ASP. DevPartner Studio integrates with Visual Studio to give you tools for analyzing application performance. Depicted here is the live graph generated by the Studio’s Performance Analyzer you access to all of its function. to identify the bottlenecks in an application and determine the None of this comes cheap. Additonally. In addition to a detailed set of best practices.com want to use DevPartner. DevPartner Studio Professional Edition 9.compuware. Even when Phone: 800-521-9353 DevPartner crashed due to memory restrictions. of applications for both Visual Studio 2005 and 2008. good product support. 2GB of memory required. If you’re working in a team environment. you can still use Studio to class libraries took more than an hour on my computer.400 Quick Facts: Suite of tools for static and runtime analysis Studio running and allowed me to continue working. it stayed out of my way. and where your applithe rest of the team—are following organization standards and cation is spending its time. scanning for security problems. how often they’re executed.0 That said. but two features stand out above the others.com “Extract class” refactoring (Fowler. each with its own distinct purpose.NET Model-View-Controller (MVC) framework from Microsoft offers many new features for Web developers. unlike traditional Web forms. The purpose of a class becomes unclear when it contains too many members or methods with different responsibilities. or ILLUSTRATION BY RYAN ETTER he new ASP.NET— something that was difficult.NET XML Other: MVC Framework 10 perform unit tests of the presentation layer much more easily. The VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. previously. separation of concerns is one of the most important aspects of a clean design. executing business rules for validation. BY STEVE MICHELOTTI T TECHNOLOGY TOOLBOX VB. if not impossible. I’ll show you how to take advantage of both these features. Traditional ASP.” The second is that the MVC framework. business logic. The business logic might consist of getting the appropriate business objects from the data layer. enables the developer to . first walking you through how to build an MVC application from scratch that features a true separation of concerns. as well as how to review what you create with unit testing. In any object-oriented application. The Extract class seeks to break apart the original bloated classes into multiple classes.NET C# SQL Server ASP. 1999) is one of the most fundamental refactorings that currently exist to address this situation. One of the fundamental object-oriented concepts is that a class should have a single job. Learn how to take advantage of MVC to design better Web apps that separate their architectural elements—the UI. and then show you how to perform unit tests against that same application.The first is that the MVC now facilitates “separation of concerns.0109vsm_F1WebApps_10-20. and code—properly.v8 F E AT U R E 12/15/08 9:26 AM Page 10 MVC FRAMEWORK Partition Web Apps Intelligently Microsoft’s Model-View-Controller framework makes it possible to implement “a separation of concerns” in ASP.NET Web forms applications have suffered from this age-old problem of a lack of clean separation of concerns because the code behind class often becomes a dumping ground for both business logic and presentation logic. Although the data layer is using LINQ to SQL. The Controller is the heart of the MVC framework orchestrating the flow. The MVC framework solves the separation of concerns problems of traditional Web forms by partitioning responsibilities between Models. public RedirectToRouteResult Delete(int id). an MVC page that invokes the ContactController’s Create() action method for a given ID might look like this: FIGURE 1 Model-View-Controller (MVC).The app is the Contact module of a personalinformation manager such as Outlook.A full discussion of the routing framework is beyond the scope of this article. The View knows about the Model. To implement a Controller class. Contact GetContact(int contactID). but is blissfully unaware of the Controller. you need Controller actions to display a list of contacts. It lets you delete any contact. The sole purpose of the View is to contain presentation logic. Based on the first screen defined. 14). Note that the Model is unaware of both the Controller and the View. The first action method to accomplish this looks like this: public ViewResult Index() VisualStudioMagazine.Web.and send users to the contact details screen to add or modify a contact. } A detailed discussion of the data layer is beyond the scope of this article. where the user can add or edit the contact details (see Figure 3 .com · January 2009 · VISUAL STUDIO MAGAZINE 11 . The first screen shows the list of all my contacts (see Figure 2. p. and so on. IEnumerable<State> GetStates(). redirecting users to other Web pages. The routing engine enables the ability to use URLs that don’t map to a physical file. In the context of MVC. the most common pattern for this is “{controller}/{action}/{id}”. Any public method in your Controller that returns a derivative of ActionResult is a valid Controller Action method. Creating the App Before drilling down into the specifics of the MVC implementation. the responsibility of the Controller is to interact with the data layer and provide the appropriate Models to the appropriate Views. but it’s important to note that this basic pattern is used throughout this article. public ActionResult Save(Contact contact). and Controllers (see Figure 1). } The ContactController interacts with the data layer to send and receive the appropriate objects to the data repository. The presentation logic might consist of populating form controls. let’s take a step back and consider the details of a sample application that shows off this feature. with no clear job. It needs two screens. as well as provide links to edit any contact and add new contacts. In fact. you must inherit from System. the application sends the user to the second screen. the presentation layer is blissfully unaware of this fact and requires no reference to the System. All of this code can cause the code behind classes to become bloated.Web. and the route mappings are set up in the Global. but it’s important to note that the presentation layer works on the IContactManager abstraction of the data layer. public ViewResult Create(int? id).asax file. The View is aware of how to present the Model.Data. This code provides the ContactController class definition: public class ContactController : Controller void DeleteContact(int contactID). The Controller is the key interaction point in the MVC framework. 14). the LINQ data context class is internal to the assembly. The routing framework is extremely flexible. and the presentation layer can’t access it. The Model is unaware of both the View and the Controller. For example.delete a contact. http://somedomain/Contact/Create/21 ILLUSTRATION BY RYAN ETTER void SaveContact(Contact contact).Linq assembly. The MVC framework utilizes a rich routing engine provided by the System. The data layer contains a class called ContactManager that implements an interface called IContactManager: public interface IContactManager { IEnumerable<GetContactListResult> GetContactList().0109vsm_F1WebApps_10-20. A Controller action to save the contact is also required for the contact details screen. { public ViewResult Index(). Finally. If the user selects a contact or clicks on the link to add a new contact.v8 12/15/08 9:26 AM Page 11 MVC FRAMEWORK business processing on those objects. The next step is to display the list of contacts when the user navigates to the main contacts screen. The primary job of the Model is to contain the state that’s passed to the presentation layer.Mvc.handling events for form controls.Controller.Routing assembly. Views. p. FIRE-BREATHING SCHEDULE? GET A FLYING START.Project5 12/11/08 4:26 PM Page 1 UGLY. . Project5 12/11/08 4:33 PM Page 2 Your challenge: over-deliver on features. Defy it: start with Visual Studio® Tools for Microsoft® Office for apps that win the day. while beating deadlines. More tips and tools at defyallchallenges.com . First.v8 12/15/08 9:26 AM Page 14 MVC FRAMEWORK ders itself as an HTML <span> tag when sent to the browser. you can use a Delete link in the same fashion: ViewData.NET applications. If you omit the Index name parameter to the View method.NET Label server control ren- 14 FIGURE 3 Contact Details Screen. A link must be available for the user to click on. 15). Using a C# 3. First.ContactID).ActionLink< ContactsController>(c=> c.0 lambda expression lets you specify the strongly typed method for invoking the Create. It’s a common misconception to think of the business objects as the Model in the ASP. the appropriate contact object needs to be available. they must be sent to the contact details screen so that modifications can be made. the screen must provide a dropdown list of U. There are two pieces of data that the screen requires.aspx or Index. The results are posted to the Controller’s Save action method. the returned View is called “Index. Alternately. Action Links are utilized on this screen for invoking Controller action methods. <%=Html. <%=Html.Delete(contact. This is an intentional part of the MVC framework. this code is getting the list of contacts from the data layer. Second.ActionLink<ContactsController>(c=> } c. This lets you access the Model in a strongly typed manner (see the complete implementation of the Index View page in Listing 1.”The MVC framework searches for a physical file called Index.NET developers is that there are no server controls in the markup. it sets that collection as the Model of the Controller’s ViewData. In the MVC framework. The first aspect that often throws traditional ASP. Specifically. it looks automatically for a View that has the same name as the current action method name (Index. Next. This code describes the complete implementation of the ContactViewData class: public partial class Index : ViewPage<IEnumerable<Contact>> Note that the Index View page specifies a generic type constraint. For example. Detail screen where contacts can be edited and then persisted. states that the user can pick from. VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. The screen provides a link to add a new contact. Shows a list of contacts that can be selected for editing or deleting. Begin by inheriting from ViewPage: Once the user selects a specific contact. the server controls provide abstractions over HTML elements. However.S.Model = contactList. Finally. Similarly. there are no ViewState or runat=“server” attributes. so the user can go to the details page to create or edit a contact. ContactID). The Model is actually whatever abstraction is needed for the presentation layer to accomplish its objective properly.ascx in the folder that corresponds to the Controller name or the Shared folder. "Delete") %> This method is quite simple.NET MVC framework. you must invoke the ContactController’s Create() method. Now you want to implement the view. return View(“Index”). This is sometimes true. but there are some important things happening. an ASP. This is quite often more than business objects. How do both pieces of information get sent to the View as a single Model? You accomplish this by creating a simple wrapper class called ContactViewData that acts as your Model. This ViewData is passed to the View. "Edit")%> { IEnumerable<GetContactResult> contactList = contactManager. but it’s not always accurate. in this case).0109vsm_F1WebApps_10-20. In traditional ASP. you should avoid doing this because you want your code to be as explicit and testable as possible. Validation messages are present for each control based on business object validation.Create(contact.GetContactList(). the MVC framework gives the developer complete control over the rendered HTML with no bloated ViewState. p. You can accomplish this with the ActionLink method of the HtmlHelper: FIGURE 2 Main Contact Screen.com . which implement the System.</td> <td> <%=Html. VisualStudioMagazine. 18.cs" Inherits="Pim. A great framework to validate business objects declaratively is the Microsoft Enterprise Library Validation Application Block (VAB). return View(“Create”). In this scenario. for the complete code for the Create. } public IEnumerable<State> StateList { get.aspx page.Controllers" %> <%@ Import Namespace="Pim. Too often.) One thing of note in Listing 2 is the ContactController’s Save action method. Using Model Binders. this. One of the most elegant methods is to utilize Model Binders.Web. set. you send it to the data layer for persistence and then redirect the user back to the main screen. duplicate the validation of their business objects in the presentation layer.Views.IModelBinder interface.ActionLink<ContactsController>(c => c. Additionally.LastName %></td> <td><%=contact. The VAB is simply one of the many frameworks public class ContactViewData { public Contact Contact { get. there’s no code required in the code behind. (See Listing 2. Another great aspect of MVC is that it provides a flexible framework to hook the UI validations into already existing object validations.Create(contact. set.Web" %> <%@ Import Namespace="Pim.</th> </tr> <%foreach(GetContactListResult contact in this. } else { return View(“Create”.Value). p. "Delete") %> </td> </tr> <% } %> </table> </asp:Content> LISTING 1 This is the complete mark up for the contact list screen. } } Using the Create action method isn’t complicated if you take advantage of the ContactViewData: [AcceptVerbs(HttpVerbs.Delete(contact. the first job of the Save method is to validate the object by invoking the validation rules defined in the business layer.ActionLink<ContactsController>(c => c. The VAB allows you to validate your business objects on the objects themselves.Get)] public ViewResult Create(int? id) { if (id. That is. this.Model) { %> <tr> <td><%=contact. 18. } public ContactViewData(Contact contact. for download details).Master" AutoEventWireup="true" CodeBehind="Index. you need to show the user the form again.FirstName %></td> <td><%=contact.Model = new ContactViewData(contact. } } Again.ViewData.BusinessLayer" %> <asp:Content ID="Content2" ContentPlaceHolderID="mainContent" runat="server"> <%=Html. contactManager.GetStates())). or worse. There are various ways to save form data in the MVC framework. IEnumerable<State> stateList) { this. so they can fix the invalid data.GetContact(id.ViewData.aspx.Mvc.Email%>&nbsp.Contact = contact. p. the resulting object from the binder will be passed in to the appropriate Controller method for saving. the markup in the View is simple and straightforward. new ContactViewData(new Contact(). IEnumerable<State> stateList = contactManager.ActionLink<ContactsController>(c => c. You can find the com- C# CREATE THE CONTACT LIST SCREEN <%@ Page Title="Contacts" Language="C#" MasterPageFile="~/Views/Shared/Site.Index" %> <%@ Import Namespace="Pim.Web.StateList = stateList. "Edit")%> <%=Html.ContactID).ContactID).com · January 2009 · VISUAL STUDIO MAGAZINE 15 .GetStates().Contacts.Web. means the act of creating an object from form parameters can be encapsulated in the binders and abstracted away from the Controller actions methods. stateList). "Add New Contact") %> <table cellspacing="0" cellpadding="4" border="1"> <tr> <th scope="col">First Name</th> <th scope="col">Last Name</th> <th scope="col">Email</th> <th scope="col">&nbsp.HasValue) { Contact contact = contactManager. Otherwise. If the object is valid. This allows the Controller action methods to save objects strongly typed for that method.Create(null). developers implement the validation only in the presentation layer. Best practices dictate that validation of business objects should occur in the business layer.0109vsm_F1WebApps_10-20.v8 12/15/08 9:27 AM Page 15 MVC FRAMEWORK plete code for the ContactBinder in the code download for this article (see Go Online. All other product and brand names are trademarks and/or registered trademarks of their respective holders.NET NOW INCLUDES 30+ SILVERLIGHT CONTROLS COMPLETELY RE-ENGINEERED • Display rich. and more Grids • Char ting • Repor ting • Scheduling • Menus and Toolbars • Ribbon • Data Input • Editors • PDF ComponentOne Sales 1.858.4343 © 1987-2009 ComponentOne. animated data visuals with C1Chart • 3x smaller footprint • Built-in visual styles and animation effects • Develop complex dashboards easily with C1LinearGauge and C1RadialGauge Coming Soon Studio for iPhone FIRST SUITE OF IPHONE-ENHANCED WEB CONTROLS • Cross-browser support • Incorporate powerful.800. UI buttons.681. All rights reserved.Project7 12/15/08 1:21 PM Page 1 NEW Studio for Silverlight NEW Studio for ASP. sliders.NET component suite that enables you to build iPhone Web apps that look and feel like the native UI • Includes design elements for menus. content controls. data-bound grids to your applications with C1DataGrid • The first and only ASP.2739 or 1.412. interactive geographical information using C1Maps • Fully exploits the AJAX Framework • 10x faster performance • Rich client-side object model • Cross-browser support • Create full-featured. iPhone is a trademark of Apple Inc. . ved. This new release delivers exactly what you need to produce nextgeneration UIs for the Web.NET • Silverlight • iPhone • Mobile • ActiveX DOWNLOAD YOUR FREE TRIAL @ componentone. WinForms • WPF • ASP. duct ered ders.com/amazingweb . Project7 12/15/08 1:21 PM Page 2 It's here and supercharged for the Web: Studio Enterprise 2008 v3. TextBox("Contact.Title")%> </td> </tr> </table> </td> <td valign="top"> <table> <tr> <td>Street Address:</td> <td> <%=Html.Web" %> <%@ Import Namespace="Pim.TextBox("Contact. FirstName") %> </td> </tr> <tr> <td>Last Name:</td> <td> <%=Html. "Contact.TextBox("Contact.0109vsm_F1WebApps_10-20.fff"))%> </form> </asp:Content> LISTING 2 The code for the edit contacts view is simple and straightforward.LastName") %> <%=Html. StateID")%> </td> </tr> <tr> <td>Zip:</td> <td> <%=Html.Contact.Address.Master" AutoEventWireup="true" CodeBehind="Create.Address. "StateID".aspx.Company")%> </td> </tr> <tr> <td>Title:</td> <td> <%=Html.Web.Model. submit().StreetAddress")%> </td> </tr> <tr> <td>City:</td> <td> <%=Html.Controllers" %> <%@ Import Namespace="Pim.Model.City")%> <%=Html.LastUpdated".Index().Address.Title")%> <%=Html.DropDownList("(Select)".ValidationMessage("Contact.ValidationMessage( "Contact.StreetAddress")%> <%=Html. ViewData.TextBox("Contact.Address.Model.ValidationMessage( "Contact.StateID)) %> <%=Html.LastName")%> </td> </tr> <tr> <td>Email:</td> <td> <%=Html.ActionLink<ContactsController>(c => c.Views.Email")%> <%=Html.TextBox( "Contact.Email")%> </td> </tr> <tr> <td>Company:</td> <td> <%=Html.TextBox("Contact.StateID".Address.ValidationMessage( "Contact.Models.Edit" %> <%@ Import Namespace="Pim.Zip")%> </td> </tr> </table> </td> </tr></table> <a href="javascript:document.ViewData.ValidationMessage("Contact.Address. ViewData.Home" %> <asp:Content ID="Content2" ContentPlaceHolderID="mainContent" runat="server"> <form id="mainForm" name="mainForm" action="<%=Url.Hidden("Contact.">Save</a> <%=Html.ToString( "MM/dd/yyyy HH:mm:ss.ValidationMessage("Contact.FirstName")%> <%=Html.v8 12/15/08 9:27 AM Page 18 MVC FRAMEWORK C# CREATE THE EDIT CONTACTS VIEW <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.ValidationMessage( "Contact.TextBox("Contact. "Cancel") %> <%=Html.Web.TextBox("Contact.com .LastUpdated.mainForm. "StateDesc".Address.cs" Inherits="Pim.ContactID") %> <%=Html. 18 VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine.Hidden("Contact.ValidationMessage( "Contact.Company")%> <%=Html.Action("Create") %>" method="post"> <table><tr><td> <table> <tr> <td>First Name:</td> <td> <%=Html. new SelectList(this.Contact.Web.Contacts.Address.City")%> </td> </tr> <tr> <td>State:</td> <td> <%=Html.Zip")%> <%=Html.Mvc.StateList.Address.ValidationMessage( "Contact. Index().VerifyAll().Message).IsValid) { in the ContractController’s Index method. the unit test must verify the logic if (validationResults. contactManager. "View data must have items.NET Web forms makes this quite difficult. so you can use unit tests.AreEqual(4.Post)] including Rhyno Mocks or TypeMock.Create)] public ActionResult Save(Contact contact) constraints on the personal preference of a developer { with respect to using their preferred tools. The beauty of MVC is that it allows unit tests to invoked and the user was redirected back to the main screen.” Among these issues is a lack of Assert.v8 12/15/08 9:27 AM Page 19 MVC FRAMEWORK that can be used to integrate with MVC validation. foreach (ValidationResult validationResult Therefore. I’ve vioto test the Save functionality.IsNotNull(viewDataModel. stateList).NET Web as IEnumerable<GetContactListResult>. This code shows you how to test for saving a valid contact: I highly recommend you select the unit-testing framework that you and your development team are most comfortable with. it’s important that only the code in the { Controller is tested and not the code in the data layer.Index). Proper Test-Driven Development (TDD) principles state that Taking a slightly more complex example. including NUnit. larly.Create). The job of contactManager. the "ViewData should not be null. dependency injection to pass in a mock contact manager. the Index method is to retrieve the collection from the return RedirectToAction(Actions. any unit-testing framework.0109vsm_F1WebApps_10-20. return View(Actions. } IEnumerable<GetContactListResult> contactList = TestUtil.Object). forms is their lack of “testability. The MVC architecture is based on a pluggable model. public void ContactController_Index_Test() { // set up var contactManager = new Mock<IContactManager>(). so it’s The Controller contains a reference to the IContactManager intereasy to utilize Dependency Injection to facilitate more granular face rather than the concrete ContactManager itself. or MBUnit. screen. GetStates(). you could use any mocking framework. data layer and then pass that collection to the Index } else view. complete unit test for the Index method: this. if an invalid object is passed This article uses MSTest for unit testing. the lack of separation of } concerns in traditional ASP. logic are tested in each test. HttpContext when a Web server isn’t present. validating with the VAB and redisplaying the view with all appropriate messages is straightforward (see Listing 3).Model One of the most problematic areas of traditional ASP. quality unit tests ensure that only small units of contactManager.ViewData. MVC puts no [ActionName(Actions."). // execute VisualStudioMagazine.ModelState. Additionally. // verify IEnumerable< GetContactListResult > Implement Unit Testing viewDataModel = result. but again. [AcceptVerbs(HttpVerb. but you could use in."). the data layer will be “mocked” so that only in validationResults) the code in the Controller is being tested.GetContactList()).the unit test must verify that the data persistence was the MVC framework.Count().AddModelError( mvcKey. Here’s the { string mvcKey = GetMvcKey(validationResult). Simibe written first in accordance with true TDD best practices. Specifically. ContactsController controller = new ContactsController(contactManager.Returns(contactList).ViewData.com · January 2009 · VISUAL STUDIO MAGAZINE 19 . This code shows you how to use the VBA to redisplay the page with error messages. ValidationResults validationResults = Validation. xUnit. the validation messages are added and the screen is redisplayed. [TestMethod] } IEnumerable<State> stateList = contactManager.Model = new ContactViewData(contact.if a valid object is passed into lated that principle in this article solely for the purpose of introducing the Save method. ViewResult result = controller. The first unit test you create is for the main Validate(contact). a separate unit test must verify that. validationResult. LISTING 3 Microsoft’s Microsoft Enterprise Library Validation Application Block (VAB) gives you a great way to validate business objects. itself well to mocking in the context of unit-testing frameworks. CreateContactList(). Fortunately.SaveContact(contact). viewDataModel.Specifically.Expect(c => c. VALIDATE OBJECTS WITH VAB C# This article also uses Moq for a mocking framework. a unit test is required unit tests should be written before actual application code. However. MVC framework provides an HttpContextBase class that lends Assert.ViewData. this. However. contactManager.” dtSearch “leads the market” – Network Computing "ViewName is not correct. Java.Values["action"]. result.com/39qpnp GO ONLINE Use this Locator+ code at VisualStudioMagazine.NET Spider API The Smart Choice for Text Retrieval® since 1991 N “Bottom line: dtSearch manages a terabyte of text in a single index and returns results in less than a second” – InfoWorld N “For combing through large amounts of data. ContactsController controller = new ContactsController(contactManager.dtsearch. powerful Web-based engines” – eWEEK N dtSearch “searches at blazing speeds” – Computer Reseller News Test Center See www.com for hundreds more reviews.net/mvc N dtSearch “covers all data sources . It was designed with testability in mind throughout. C++.com/57d9ba Scott Guthrie’s Blog: http://tinyurl. fielded data and full-text search options (including Unicode support for hundreds of international languages) [TestMethod] public void ContractController_Save_Valid_Test() { // set up Contact contact = TestUtil. New .Expect(c => [email protected]. MCSD.com/6gk2qh ASP. formatting and images intact controller.com to go directly to these related resources. } You can find the complete unit-testing implementation for the entire application in the accompanying code download for this article (see Go Online for details). unindexed. h Spider Desktop wit h Spider Network wit CD/DVDs Publish for pider Web with S Win & . var contactManager = new Mock<IContactManager>().dtsearch.SaveContact(contact)).NET. etc.NET MVC: www. and hundreds of developer case studies Contact dtSearch for fully-functional evaluations 1-800-IT-FINDS • www. READ & DOWNLOAD VS0901SM Read this article online and download a sample MVC application that shows separation of concerns implemented properly. VSM Steve Michelotti.FakeHttpContext(). New 64-bit N API supports . new RouteData().v8 12/15/08 9:27 AM Page 20 Instantly Search Terabytes of Text MVC FRAMEWORK N dozens of indexed. Blog post by Scott Hanselman: http://tinyurl. ADDITIONAL RESOURCES: Stephen Walther on ASP. TDD and MvcMockHelpers.NET MVC Session at Mix08. You can reach him at steve. var mockedHttpContext = MoqMvcMockHelpers.Save(contact) as RedirectToRouteResult // verify Assert. MCPD. controller).NET MVC: http://tinyurl.AreEqual("Index".VerifyAll().com/5d6a6f ASP. N file parsers / converters for hit-highlighted display of all popular file types N Spider supports static and dynamic web data. .Object). databases.com MVC on CodePlex: http://tinyurl.0109vsm_F1WebApps_10-20. with separation of concerns implemented elegantly.NET Engine for Linux Engine for // execute var result = controller."). This in turn lets you to write higherquality code.com/6ky4vp Scott Hanselman’s Blog: http://tinyurl.. contactManager.ControllerContext = new ControllerContext(mockedHttpContext. One nice aspect of the MVC framework’s architecture is that it’s completely pluggable. MCT..CreateValidContact(). is a principal software engineer at Applied Information Sciences.asp. highlights hits while displaying links. 0109vsm_C#Corner_21-23. On the downside. it doesn’t stop you from using the features in the C# 3. or Windows Workflow Foundation (WF)—are available to use.) T TECHNOLOGY TOOLBOX ILLUSTRATION BY BRUCE GARDNER VB.NET platforms is a subject that confuses many developers.0 and 3.0 Framework.Windows Communication Foundation (WCF). I’ll walk you through some of these nuances. and which ones you can’t use when you have to target an older version of the Framework. More than that.5 versions of the Framework. You can pick any of the 2.For example. Yes. you must forego all the new language features. To select your target version of the Framework. 3. BY BILL WAGNER argeting multiple .NET Frameworks Many developers have the misconception that targeting older versions of the Framework means you can’t use any of the new C# language features.0. right click on the project node and select properties. In this article.NET 2.NET XML VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. I’m concentrating on the differences between various language features and how you can make use of the newer language features even though you’re targeting an older version of the Framework. but you don’t have to give up all the new language features you like. other libraries that rely on . or 3. which require care.0 libraries—Windows Presentation Foundation (WPF). explaining what capabilities are in bounds. there are some nuances that can crop up when using the newer language features if you’re targeting an older version of the Framework. Obviously. Multitargeting is a project-level feature.0 language.NET C# SQL Server ASP. none of the 3.0 Frameworks.v8 12/15/08 C# CORNER 9:09 AM Page 21 TA R G E T M U LT I P L E F R A M E W O R K S Target Multiple . you must accept some limitations. It’s time to dispel that myth.0 and 3.com 21 .0.0 share the same limitations. many developers mistakenly believe that if you target older versions of the platform. if you’re targeting the 2. In general. (Space considerations prevent me from exhaustively discussing the differences between the 2. Targeting multiple versions of the Framework is a great way to ensure that you and your peer developers can use Visual Studio 2008 even when one of your target environments must support an older version of the Framework. NET 3. so those are off limits if you’ve targeted an older version of the Framework.FirstName. LastName = "Jones"}. 7. You can even use lambda expressions: sample. I had to define a new version of Func. 1. even if you’re targeting the 2.CompilerServices. 4. This combination can lull you into a false sense of security. You can create and use Anonymous types. which makes the method call a little easier to understand: var foo = folks. 5. Obviously.0 Framework: public IEnumerable<TResult> Select<TResult>(Func<TResult> selector) { foreach (var peep in storage) yield return selector(peep). // elsewhere: public delegate TResult Func<TResult>(Person id).5 libraries. This amount of work would dwarf the amount of work necessary to rollout the 3. However. This is also true when using C# 3. to write code like this in a general way is to create far more work for yourself than would normally be justified. so let’s start with a concrete example. var foo = from f in folks select f. 2. LINQ to XML. You can create any of your own methods that take delegates.5 if you’re running Visual Studio 2008. I intentionally chose a simple example because implementing the entire query-expression pattern is a large exercise. The compiler then translates those keywords into method calls.Extension attribute. it’s important to understand that the query expression syntax is shorthand for method calls. }.RemoveAll(n => n % 3 == 0). Lambda expressions mean you can apply those techniques to your own methods. 9.5 Framework in almost any customer base. there’s less you can do with them than you might think. new Person {FirstName = "Bob". Object and Collection initializers work even when you target the 2.com What you want to remember from this discussion is that the query expressions are nothing more than shorthand for method calls. knowing that clients can take advantage of the easier lambda expression syntax to use your types.dll. The select keyword—in fact.0. but it might lead you to try more. Extension methods are decorated with the System.NET Framework. The Select method in People does match that pattern. the Select method should have a signature of the form: public C<T> Select<U>(Func<T. The select statement above looks for a method that has the form: public IEnumerable<string> Select( Func<string.U> selector) That’s a mouthful of type parameters. and I’m not advocating it if you still have to support the 2. Person> selector).NET 2. 3.0 Framework.0 when you’re targeting the 2.NET 2. 8. provided they don’t access the 3. 10 }. That’s really no big deal. You can use any of the language features in C# 3. which is declared in System. the query will compile. Therefore. because Func<TResult> is not available in the . However. The select clause in the snippet just described looks for a Select method in scope.0109vsm_C#Corner_21-23.Core. } var foo = 27.0 compiler.FirstName). the entire query-pattern syntax—maps to specific methods.though without LINQ support. I mentioned there are some nuances that you need to keep in mind when you target earlier versions of the Framework.0 Framework.0 and 3. the query syntax will work fine when targeting the . new Person {FirstName = "Joe". as well as the C# 3.Select(person => person. The Visual Studio IDE will help you with almost all of those issues.0 Framework: List<int> sample = new List<int> { 0. If a candidate method is in scope. Take a moment and consider what would happen if you tried to execute this code snippet: People folks = new People() { The select member method in People satisfies the query-expression pattern for the case where the sequence is of type People so the range variable must be of type Person. The People class contains a possible Select method: 22 VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. Changes in Behavior Your development box must have . What would happen depends on what methods are defined in the People class. That’s not available in earlier versions of the .5 Frameworks. According to the C# spec. there are some subtleties. you can’t use LINQ libraries.NET 3. Where those method calls are present. 6. The compiler translates it into this method call. the select compiles. LastName = "Smith"}. Of course. and Entity Framework are all part of the .v8 12/15/08 9:09 AM Page 22 C # C O R N E R » TA R G E T M U LT I P L E F R A M E W O R K S The most important consideration when multitargeting is to use straight language features versus the library features.5 library. Your testing on your development machine will not uncover any incompatibilities between the 2. because the IDE will tell . LINQ to SQL. This is where it gets a bit complicated so let’s take a close look at another example.0 Framework.0 Framework. so you can’t create extension methods when you’re targeting an earlier version of the Framework. and more. the System. Visit Atalasoft. If you view it in this light.0 Framework is available. “Effective C#” (Addison-Wesley Professional. and enterprise design. while still supporting customers that aren’t ready to move to the latest distributions.2008). In . the newer versions of the . 2004) and “More Effective C#” (AddisonWesley Professional. You can find one example of this particular issue in the INotifyPropertyChanging interface. VSM Bill Wagner brings more than 20 years experience to his roles as co-founder of SRT Solutions and Microsoft Michigan regional director.” GO ONLINE New features to our already powerful imaging toolkit include PDF/A support. Bill has written two books.NET Imaging Partner Call us toll free at 866-568-0129 www. Your . WPF annotations. Atalasoft.NExT step.NExT Step In Document can safely move development staff to the latest version of Visual Studio and take advantage of and Photo Imaging some of the newer language features while still supporting those customers that must run on older legacy systems. you The . The goal of such a move should be to get customers and developers looking at the higher productivity available in DotImage 7.He also annotated the 3rd edition of the “C# Language Specification.com Use this Locator+ code at VisualStudioMagazine.NET 3. it will run on your development machine. I’ve always viewed multitargeting as a short-term solution to enable developers to move forward. but it’s the kind of problem you will only find by testing on a machine where the target framework—and only the target framework—is installed.NET Framework with Zero-Footprint Imaging. and and to ultimately drive toward targeting the 3 Months of Free Gold Support. snuck in.0 a Rele Framework. newest Framework.com to go directly to these related resources. It’s in an existing namespace and an existing assembly. and a free trial. AJAX Vector Annotations including FreeHand.0109vsm_C#Corner_21-23. Bill is an internationally recognized author on the C# language evolution. Fortunately. In fact.ComponentModel namespace added the INotifyPropertyChanging interface.0—More Powerful. Microsoft tried hard to VS0901CS Read this article online and download the sample code.NET Framework. video tutorials.atalasoft. Use templates in our AJAX Wizard to create zerofootprint web applications in C# and VB. This interface is new and corresponds to the INotifyPropNew 7.v8 12/15/08 9:09 AM Page 23 C # C O R N E R » TA R G E T M U LT I P L E F R A M E W O R K S you if you’re trying to include any assemblies that were added in a READ & DOWNLOAD newer version of the .5. that’s the only example of this kind of problem that I’ve encountered so far.com 23 . but a few things still illustrates many of the concepts discussed in this article. VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. The problem—for a ge multitargeting application—is that this event tIma se o D will compile fine when targeting the 2.NET—Take document and photographic imaging to the .com for web demos. but it will fail when you move to a machine where only the 2. which ensure that there were no breaking changes.0 ertyChanged event. Smart Clients. 0 represents a bottom-up rewrite with entirely new thinking. Yes.NET 4. If you’ve worked with WF 3. what does this mean to those of us that have existing workflows? Windows Workflow Foundation (WF) 4.0 unless Microsoft creates a transition tool. so you’ll probably be able to run entire 3. you’re likely to skip the inter-op activity in favor of creating consistent WF 4. WF 4.0.to 100-fold runtime performance improvements. and C#. If you’re contemplating using WF and can wait until .0109vsm_AskKat. and dependency properties.Also. Windows Workflow Foundation (WF). One of the prime benefits of WF 4. and if so. so remember that my answer is based on these preliminary announcements. A transition tool that can fully transform your workflows and activities seems unlikely.5 will remain part of the framework and will run side by side with WF 4.0/3. learn why using string primary keys is a bad idea. One of the most important improvements is in the re-hosting experience.0 is released. but the necessary code is challenging. Transitioning workflows directly won’t improve their design.0/3. and that it “changes everything. and copy files into the executable directory. It’s possible that you could see a 10-fold improvement in the time required to create and debug workflows. find out where to get a data grid for Windows Presentation Foundation (WPF). A 24 VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. DES method calls. This lets you manage the transition at a time that fits your organization’s broader goals. your workflows.” Is this true. Additionally.0 doesn’t have includes Code Activity. reflection. Workflows are a specialization of activities. a completely rewritten designer. As such. rules as you know them now.0 Community Technology Preview (CTP). this is possible in WF 3. activities. The other inter-op strategy is an inter-op activity that allows you to use WF 3.5 workflows inside WF 4.24-27. The gains are enormous: custom activities take center stage. This allows you to create activities and to allow power users—and others—to build or modify workflows with the constrained set of activities you’ve created.0 workflow. and there are three workflow flow styles that you can combine seamlessly. Another important aspect of your transition strategy concerns long-running workflows. A quick list of significant features Windows Workflow 4.0 was announced at the Professional Developers Conference (PDC). a code model (it’s declarative only). this is a jaw-dropping list. not to mention exceedingly difficult to debug.0/3. You’d also have better control over persistence.If you do write new workflows in the interim.”p.0 workflows. an Initialize event. Windows Presentation Foundation (WPF). and a better debugging experience.0.0 come at a cost. workflows are entirely declarative.0 or 3.v6 Ask 12/15/08 9:06 AM Page 24 Kathleen WINDOWS WORKFLOW CHANGES DIRECTION BY KATHLEEN DOLLARD Learn how Windows Workflow Foundation (WF) 4. in addition to 10.com WF 3.0/3. Data Exchange Service (DES) events.0 changes everything you thought you knew about workflow.0 workflows. I’ve collected a set of preliminary guidelines for preparing workflows to transition (see “Write New Workflows with . Microsoft developed two inter-op strategies to help you over this hurdle. and authoring them is much simpler. but rewriting them will. Q I’ve been hearing that Windows Workflow 4.5.NET 4. 26).NET 4.5 activities in a WF 4. Outside of the inter-op activity. details aren’t complete. and rules aren’t going to transition to WF 4.0 is a better strategy for breaking workflows into discrete functional units. there’s support for partial trust. Technologies mentioned in this article include Visual Basic. This is particularly true if you have an existing state-based solution you can nurse along for another year or two. The simplest transition .0 in Mind. many of the primary elements you might think of as WF disappear in the transition to WF 4. overcome the annoying issue of files not loading at runtime.5. While side-by-side running is essential for timing your conversion. I suggest waiting.0 was unveiled at PDC and is available now as part of the current . The improvements to WF 4. GE.NET. ness process in order to know what workflows /($'722/6SURYLGHVGHYHORSHUVHDV\DFFHVVWRGHFDGHVRIH[SHUWLVHLQFRORUJUD\VFDOHGRFXPHQW PHGLFDOYHFWRUDQGPXOWLPHGLDLPDJLQJGHYHORSPHQW. If you have aggregate information or if you cannot legally require submission of a valid Social Security number. Siemens.) 3') -3(*-3(* '.0/3. in understanding and engineering the busiCanon.0/3. If you have deployed workflows. Sony.)) (.0.0109vsm_AskKat.* put effort into transitioning your current ZLQGRZ OHYHO PHDVXUHPHQW]RRPSDQFLQH -%. Kodak.5 workflows. WPF. there are a large number of comparisons. and many applications new workflows in 4. But your busi LQFOXGLQJ(QFDSVXODWHG3')&'$ DQG 5DZ ‡Image Processing:  ¿OWHUV WUDQVIRUPV DQG ness engineering work will survive and the 'DWD. WKH US Air Force DQGVeterans Affairs Hospitals. have long-running workflows.5 but to begin restricts usage of Social Security numbers.* $%. Comparing two and bring them back up in WF 4. Strings present performance issues because of the inefficiency In this case. and priinitiate the process.0. HP.77 ** WR /($'¶V DQG/87PDQLSXODWLRQ VSHFLDOL]HG$%&&03DQG&0:FRPSUHVVLRQ workflows and redesigning aspects of them to ‡DICOM: )XOO VXSSRUW IRU DOO .QVWDOO/($'722/6WRHOLPLQDWHPRQWKVRI to write. C++ Class Lib. but it’s not yet clear whether Microsoft will provide a tool to help automate the 3.and in working through the dozens of UHVHDUFKDQGSURJUDPPLQJWLPHZKLOHPDLQWDLQLQJKLJKOHYHOVRITXDOLW\SHUIRUPDQFHDQGIXQFWLRQDOLW\ quirks and challenges of 3. it’s LEADTOOLS v. Certainly.this might not be an acceptable strategy.& -3(* DQG &&.2' FODVVHV DQG ‡Display Controls: 6FUROO ]RRP SDQ PDJQLI\ PRGDOLWLHVGH¿QHGLQWKH'. you need a strategy to bring down existing workflows of string comparisons and clustering issues. If you have existing workflows. Within and believe you’ll need this strategy.0/3.5 workflowmodification strategy. IXOOIHDWXUHGZHEEDVHGPHGLFDOLPDJHGHOLYHU\ ‡Image Formats: $OO LQGXVWU\ VWDQGDUGV Creating the workflows themselves probably DQGYLHZHUDSSOLFDWLRQV LQFOXGLQJ 7. C API.&20VWDQGDUG JODVVEULJKWQHVVFRQWUDVWJDPPDZLQGRZOHYHO take advantage of new features. 0 strategy is to allow all workflows to complete in 3.&20 ‡ Medical Image Viewer: +LJK OHYHO GLVSOD\ 3&/':*DQGKXQGUHGVPRUH took a smaller chunk of time. If you’re writing workflows today strings is significantly slower than comparing two integers. you might need to alter them later.v6 12/15/08 9:06 AM Page 25 A S K K AT H L E E N » W I N D O W S W O R K F LO W 4 . consider building in events to a database index.24-27.16 – .. you’ll FRQWURO ZLWK EXLOWLQ WRROV IRU LPDJH PDUNXS ‡Image Compression: )URP VWDQGDUG -%. COM & more! almost certain you invested most of your time 'HYHORS\RXUDSSOLFDWLRQZLWKWKHVDPHUREXVWLPDJLQJWHFKQRORJLHVXVHGE\Microsoft.  FRORU FRQYHUVLRQ IXQFWLRQV ZLWK H[WHQGHG JUD\VFDOH ‡DICOM Communications: )XOO VXSSRUW IRU WRELW. PDJHFRQWUROVIRUGHYHORSLQJ 45&RGHDQGPRUH.7IRU:LQDQG[ that plagued WF 3.&&RGHFV 'EDUFRGHV 'DWD0DWUL[3')0LFUR3') ‡AJAX:HE)RUP.&20 PHVVDJLQJ DQG VHFXUH FRPPXQLFDWLRQ ‡OCR/ICR/OMR:)XOOSDJHRU]RQDOPXOWLWKUHDG input Microsoft received in fixing the issues HQDEOLQJ TXLFN LPSOHPHQWDWLRQ RI DQ\ '.5—should result in a ‡Barcode:5HDGZULWHDOOLQGXVWU\VWDQGDUG'DQG ‡WPF (XAML): 9LHZHU .0/3.VXSSRUW simpler model of WF 4.PDJH /LVW product with fewer quirks to trip you up.&20 HGUHFRJQLWLRQZLWKIRUPDWWHGRXWSXWLQFOXGLQJ3') 6&8DQG6&3VHUYLFHV '2&DQG7.0—and the significant '. $QQRWDWLRQV7UDQVLWLRQVDQG:.  If you’ve deployed workflows and believe ULFKZHEDSSOLFDWLRQV ‡Forms Recognition and Processing: $XWRPDWL you’ll have a challenging transition.1 DQG :.$  DQG ELW. I’d like to ‡JPIP&OLHQWDQG6HUYHUFRPSRQHQWVIRU FDOO\LGHQWLI\IRUPVDQGH[WUDFWXVHU¿OOHGGDWD LQWHUDFWLYHVWUHDPLQJRIODUJHLPDJHVDQG ‡ Document Cleanup/Preprocessing: 'HVNHZ know more about your scenario so we can DVVRFLDWHG LPDJH GDWD XVLQJ WKH PLQLPXP GHVSHFNOH OLQH DQG ERUGHU UHPRYDO UHJLVWUDWLRQ help Microsoft improve the transition experiSRVVLEOHEDQGZLGWK PDUNVDQGPRUH ‡Scanning: 7:$. This prohibits entry of the second record. they change when a dataentry mistake must be corrected. When you make these kinds of changes. string primary keys almost always have meaning.but data-entry errors and fraudulent usage results in redundant values. Social Security numbers are theoretically unique. you must also update all foreign keys. regardless of whether the second occurrence is the legal use of the number. Q A Here’s something I’ve had a hard time understanding: why shouldn’t I use string primary keys? String primary keys present problems in database integrity. ‡PDF and PDF/A: 5HDGZULWH UDVWHU DQG WH[W ence for you and others. IRU GRFXPHQW PDUNXS UHGDFWLRQ DQG LPDJH PHDVXUHPHQW LQFOXGLQJVXSSRUWIRU'. federal law VHDUFKDEOH3')¿OHV ‡Annotations: . Few string columns that have a meaning are truly unique. From a maintainability point of view. Also.&20DQQRWDWLRQV. and performance. maintainability. Database values with meaning will eventually change and wreak havoc on foreign-key usage.QWHUDFWLYH 8. At the least.  ‡Grayscale Imaging: 'LVSOD\ DQG SURFHVV VLJQHGXQVLJQHGELWELWGDWD ‡ Medical Web Viewer Framework: 3OXJLQ HQDEOHG IUDPHZRUN WR TXLFNO\ EXLOG KLJKTXDOLW\ 'RFXPHQW 0DUNXS DXWRGHWHFW RSWLPXP GULYHU VHWWLQJV IRU KLJK VSHHGVFDQQLQJ ‡DVD:3OD\FUHDWHFRQYHUWDQGEXUQ'9' LPDJHV ‡Multimedia:&DSWXUHSOD\VWUHDPDQGFRQYHUW 03(* $9.com/msdn 800 637-1840 VisualStudioMagazine. :09 03 03 2** . Free 60 Day Evaluation! www.com · January 2009 · VISUAL STUDIO MAGAZINE 25 .62 '9' DQG PRUH )RUPV5HFRJQLWLRQ %DUFRGH 0HGLFDO 0XOWLPHGLD LEADTOOLS SDKs feature LEAD’s iCompress™ Technologies.leadtools. Perform initialization logic in the Activity.0.EnqueueOnIdle for queuing. The signaling model changes in WF 4. and WCF interactions will be considerably easier in WF 4. 4.0. and there’s no Activity. calendar control. If you’re doing manual queuing. so what do you suggest I use? End Try WPF in .com/blogs/kathleen) for pointers towards Microsoft’s formal guidance. Choose a variable in a parent activity set retrieved by child activities rather than directly retrieving data from a sibling activity. and date picker. The included data grid is fairly full featured. In the case of strings.0 or 3. and assume you’ll rewrite around the new communications approach. 1. replace them with a meaningless integer or GUID primary key and add a secondary index on the meaningful key. which includes a data grid.0 a little easier.Assembly.Assembly. The system cannot find the file specified. just turn off clustering. Remove this extension from the string you pass to the Load method.0: there’s no external event model.5 Service Pack 1 (SP1). you should ensure that the file is in the correct location. Note that these are preliminary suggestions. Be careful with data.5 may be onerous. If you’re working in .5 SP1. If this doesn’t solve your problem. Any setup should be done in the Activity.AddIn.0 in Mind You can tweak your 3. use events.The System. The secondary index can be a unique index and allows rapid retrieval on your meaningful string values while still retaining database maintainability. Check out my blog (http://msmvps. which is adjacent to the executable.NET 3. consider holding this data in a configuration file or database. Write New Workflows with . . Use WorkflowInstance. and performance.5 and 4.Load requires the assembly name without the DLL extension. However. external communications is through WCF.v6 12/15/08 9:07 AM Page 26 A S K K AT H L E E N » W I N D O W S W O R K F LO W 4 .0 and . I understand WPF doesn’t include a data grid.0. I’ve simplified my test code to: Dim dllName = "RuntimeLoad. integrity.NET 3.0. Scope tightly. 0 mary key indices are used extensively during normal database operations. Remember that the custom activity model also changes. write them in WF 3. This toolkit requires WPF 3. There’s no CodeActivity in WF 4.File.Execute method. and test again. Microsoft has released the WPF Toolkit. 3. such as when a workflow completes.IO.FileNotFoundException: Could not load file or assembly 'RuntimeLoad.but it might be overkill for what you’re trying to accomplish. which is relatively uncommon. By default. as this will be the only queuing model supported going forward. Clustered indexes allow physical organization of an index to improve performance. Holding data only in tracking is hazardous. but I need a data grid. However. Even though IO.com tion. if you don’t yet have WCF in your application or organiza- 26 VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine.Exists returns true.0109vsm_AskKat. Reflection.5. Slowing down these comparisons hurts overall database performance. and use the Send and Receive activities.0 variables are more constrained than 3. The Data Exchange Service (DES) model goes away in WF 4. For workflows that might transition to 4. but they aren’t in the project directory so it doesn’t make sense to treat them as resources. The tracking and persistence databases are likely to change significantly between 3.5 doesn’t contain a data grid. Integers provide this ordering and distribution.WriteLine( _ "Assembly failed to load: " & dllName) Throw Q A I want to switch to Windows Presentation Foundation (WPF). so it’s best to move complex code out of the activity into utility libraries or services.Load(dllName) Catch ex As Exception Console. In the case of GUIDs. Use Windows Communication Foundation (WCF) messaging when there’s a choice. you’ll need to either perform inter-op on the Winforms data grid or use a third-party control.0 dependency properties. Successful clustering relies on intrinsic ordering of data and a relatively even spread. implementing it in WCF 3. System. as well as tools (as they become available) that will help you transition workflows. unless you prepare a strategy for extracting data.0/3. We’ve been trying to do this manually. this is at <project directory>/bin/Debug. You can also handle loading assemblies at runtime using System. Q Q I’m frustrated trying to load an assembly at runtime. These guidelines limit the scenarios in which there’s no corresponding feature in 4.NET 3. Create custom activities instead of code-beside logic in a CodeActivity.Assembly = Nothing Try assem = Reflection. 4. where <project directory> is the directory containing your project file (.AddIn approach is important in some scenarios. Create custom activities.5 workflows to make the transition to Windows Workflow Foundation (WF) 4.NET 4.24-27. 5.0.Initialize event. If you’re using rules for simple data retrieval for values that should be set outside the workflow.but doesn’t support grouping.0. I get the error: A I need to copy some files into the executable directory. you should use the EnqueueOnIdle method. 6.5.dll" Dim assem As Reflection. They no longer use the property bag/dependency property approach but instead are scoped vertically.NET 3. 2. strings and globally unique identifiers (GUIDs) do not.vbproj). In this case.dll' or one of its dependencies.Execute method. This is another good reason to upgrade to . but I think it’s easier to modify the project file. trainer. and select “Unload Project. and speaker.and post-build events. VSM Kathleen Dollard is a consultant.” Once it is unloaded.24-27. <Target Name="BeforeBuild"> </Target> <Target Name="AfterBuild"> </Target> --> You don’t need to understand targets or why this works to put your pre. but editing them within Visual Studio supplies XML syntax checking and IntelliSense.com/blogs/kathleen. It also makes it easy to handle straightforward scenarios.org. To open your project file in Visual Studio.“Copy” is an MSBuild task with the source file location relative to the project directory: <Target Name="BeforeBuild"> <Copy SourceFiles= ".0109vsm_AskKat. You can edit project files (. READ MORE VS0901AK Read this article online. The project file is an MSBuild script.” The only downside of opening projects this way is that Visual Studio loses its marker to the startup project if you unload that project.or postbuild code into the correct location.\RuntimeLoad\bin\Debug\ RuntimeLoad. Her blog is http://msmvps. capable of managing complicated builds.com · January 2009 · VISUAL STUDIO MAGAZINE 27 . and select “Edit <project file name>. 0 but we’ve made many mistakes related to not copying the updated files properly. You can reach her at [email protected] and . Scroll to the bottom to find the location for one of several well-known targets: A GO ONLINE Use this Locator+ code at VisualStudioMagazine. Is there a way to automate this? Visual Studio supports pre. right click on it again. VisualStudioMagazine. You can see some of the most common properties as macros for the preand post-build events by typing $( in Help. right click on the project.vbproj) in Notepad or another editor. author.dll" DestinationFolder="$(TargetDir)" /> </Target> TargetDir is one of many predefined MSBuild properties. such as copying your files. She’s been a Microsoft MVP for 10 years and is an active member of the INETA Speakers Bureau.v6 12/15/08 9:07 AM Page 27 A S K K AT H L E E N » W I N D O W S W O R K F LO W 4 ..com to go directly to these related resources. It’s built foundationally on top of Windows Server 2008 and . They can deploy those on the premises. Wahbe runs the company’s engineering teams that are charged with delivering its Web services and modeling platforms.v4 12/15/08 9:35 AM Page 28 INTERVIEW Connect to the Cloud In this special interview. partners. Microsoft Corporate Vice President Robert Wahbe discusses the Azure Services Platform and Software plus Services applications with 1105 Media’s Jeffrey Schwartz and Michael Desmond. BY JEFFREY SCHWARTZ AND MICHAEL DESMOND N ow that Microsoft has rolled out its cloud-computing strategy.NET Framework. It takes what we have today—from the phone to the desktop to the server—and brings that to the cloud. The editors of VSM’s sister publication Redmond Developer News sat down with Wahbe at the recent Microsoft Professional Developers Conference 2008 (PDC) to discuss Azure and what impact it will have on the Microsoft developer ecosystem. and developers. We have millions of developers on top of Visual Studio and on top of . the company is hoping developers will start to explore the Azure Services Platform and think about how to build applications that live in the Software plus Services (S+S) world. corporate vice president of Microsoft’s Connected Systems Division.0109vsm_QandA_28-30. We think it’s going to have a long-term radical impact with customers. and they can take the vast majority of their skill set and build apps the way they have been today.com Microsoft Corporate Vice President Robert Wahbe Q To what extent is Windows Azure based on Hyper-V. . A key evangelist on that front is Robert Wahbe. 28 VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. and to what extent are we looking at a whole new set of technologies? AWindows Azure is a natural evolution of our platform.NET Framework. but it’s a natural evolution. and then you can decide to deploy that locally. You can write those models in “Oslo” using the DSL written in “M. VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. But now you need to ask yourself: “Does it make sense for me to use the Azure platform and the service bus. A couple of things are new.NET app. Then Windows Azure can take that and implement that correctly. both across the data center and across data centers requires that you make sure you have the right architectural model. Q What can we expect in terms of Oslo uptake and some of the stuff that developers are going to have to grasp as they start developing into the Azure space? A We want to get bits into the hands of developers as early as we possibly can. and they need to choose differently between how much they’re doing in the cloud and how much they’re doing on the premises. including cloud apps. and Windows Azure understands that model to its toes. and I think for me. otherwise known as Azure apps. many applications aren’t built with the scale-out in mind from the beginning. Q Are we looking at plug-ins to Visual Studio or new development interfaces to service-enable some of these things? Are we bringing more development resources to the table? A You’re going to see some very natural extensions to what’s in Visual Studio today. and then you can decide to deploy that locally.get the feedback. and you’re deploying that code. Every developer has a unique set of needs.” targeting Windows Azure in those models. these kinds of things. As you write your applications in a scale-out model from the premises. and so on. So you can say things like: “How much scale-out do I want? Do I want this to run in multiple data centers?” If you look at the portals for Windows Azure and the Azure Services Platform. So depending on regulatory.com 29 . and then spring it on people. I wouldn’t call that a new tool. For example. The only thing you have to do when you go to Windows Azure is to specify some additional metadata. There are a lot of new services that developers are going to need to learn in order to see if they make sense for their solutions. cloud-aware application? A A lot of your existing skill set and a lot of your practices— whether it be the development methodology you use around ALM or using TFS [Team Foundation Server]—will just carry forward. Q What challenges might be awaiting dev shops? What sort of skills do they need to either discover or refine as they move to a services-aware. and what kind of SLA you’re looking for—that kind of metadata. telling you what you’re doing right and what you’re doing wrong.NET Framework and build an ASP. Microsoft’s chief software architect] did mention this [during his PDC keynote]—right now.We don’t take the attitude that we’re going to wait until we’re basically close to shipping. So it’s a model. I’d call it a fairly natural extension to the existing tools. or whatever assets they have and their scale requirements. or you can decide to deploy that to Windows Azure.there are new kinds of tools that are great for IT pros to look at utilization.v4 12/15/08 9:35 AM Page 29 CO N N E C T TO T H E C LO U D You can take Visual Studio and . If you’re going to build a platform in a vacuum. compliance. it might be an opportunity to learn something new. So you’re saying developers can write to the Windows cloud. You can write any kind of application. and they’ll run on Windows Server onpremises? That logic can be redeployed to Azure? AThe key thing—and Ray [Ozzie. that’s the most powerful way to develop a platform. Q How do they specify that metadata? ARight now—to the core—it’s in an .0109vsm_QandA_28-30.NET Framework and build an ASP. Windows Azure provides a new deployment target at a fundamental level. At the end of the day. you’ll see new project types. You have to specify how many instances you’re going to run on. But we’re definitely working hard on the models for the cloud as well. because Oslo is about helping you write apps more productively. rather. you’re just writing code. You’ll see new properties in the property descriptions of solutions. The notion of stateless front-ends being able to scale out. so there’s a lot that’s similar.at what the load is on their applications. we have a lot of technology that makes that easy—Windows Communication Foundation. and it delivers that. That’s a great example of an executable model.NET services?” And you’re going have to learn what the pros and cons are if you’re adding it to your solutions. Q So there’s a natural fit here for apps developed in Oslo? AYes. The example we showed was a situation where you can take Visual Studio and . Q. We want to get a CTP [community technology preview] out early and engage in that conversation.NET app. it’s very hard to get it right. Microsoft will be trying hard to make sure we have the patterns and practices available to developers to get those models [so that they] can be brought onto the premises. they can be brought into Windows Azure. which is a part of . One example: If you were going to hook up two businesses together with some sort of business-to-business messaging application. or you can decide to deploy that to Windows Azure.XML file. You can also write server applications and client applications.Now we can get this thing out broadly. You need to have developers pounding on it. because they’re all exposed on Internet standards. it will make it much simpler for you to build your applications as a developer. you need to start thinking about what’s appropriate for a hosted solution.We’ll make sure that the data is replicated both for efficiency and also for reliability. We built Azure on top of Windows Server and on top of . They don’t have to have reporting services that they have to build up themselves. What Amazon is doing. The Azure Services Platform. to the extent that the cloud is appropriate.NET services. get free accounts. contacts. not with Azure. VSM Jeffrey Schwartz (jschwartz@1105media. I can have my own private cloud? A With Windows Server. So they’ve licensed Windows. So we think that by doing that you can now focus much more on what your app is and less on all that app infrastructure.com Q Other platforms meaning? A Other operating systems. It’s a hobby. and we’ll continue to move that innovation unilaterally. Q Obviously you have the Microsoft-hosted monoliths in play here. but then we have these higher-level services like the database in the cloud. we’ll bring that back to Azure. We have these higher-level things so that now developers can stand on the backs of thousands of engineering years as they’re building the solution. Q What’s your advice for preparation now going though 2010? A I think the call to action is to start engaging in a conversation about the cloud and about Azure. You get at them on Microsoft’s platform and other platforms. depending on whether it’s your data center. Q But in terms of the actual physical hosting of machines.we’ll automatically do all of the configuration so you can get load balancing across all of your instances. Download the SDKs. Start getting those kinds of development practices in place so as these roll out there’s an easier way to take advantage of the new services. We’re going to innovate in Windows Server—that will move up to Azure—and we’ll innovate in Azure.com to go directly to these related resources. and start giving us feedback. The heavy lifting that a developer has to do to take that and then build a scale-out service in the cloud and across data centers—that’s left to the developer. and XML.com) is editor in chief of RDN. or the Microsoft Azure cloud. the innovations are going to flow in both directions.com) is executive editor.SQL Services. your personal enterprise cloud. features.v4 12/15/08 9:35 AM Page 30 CO N N E C T TO T H E C LO U D Q Given the uncertain time frame of Azure. And we absolutely support the choice. READ MORE VS0901RW Read this article online. which is Windows Server and SQL Server. and we’ll be rolling out CRM Services and SharePoint Services. SOAP. GO ONLINE Use this Locator+ code at VisualStudioMagazine. and Michael Desmond (mdesmond@1105media. We have Internet-scale buildingblock services with . other hosters that are exposed to Internet standards—REST. Will an enterprise be able to host its own cloud? Will there be thirdparty partners doing that as well? A I want to be very clear on this. It’s a single programming language. are some of your rivals like Amazon and Google gaining a lot of early share? How will you deal with the competitive landscape? A The place to start with Amazon is [that] they’re a partner. These represent new patterns and practices— new best practices. Google is a very limited offering. but anybody can host our core app platform. It’s a particular part of the Web application. They don’t have to build an Internet-scale pub-sub system. and blogs. That way we can make sure that what we deliver is what [development managers] need. And again. You don’t have a full database back there. both across an individual data center and across multiple data centers. You can’t do the back-end processing.0109vsm_QandA_28-30. you’ll buy SQL Server. and these kinds of things with the live services. and we have shared partners. you’ll buy the existing premises platform. And then as we innovate in Windows Server.Live Services—those are hosted exclusively in the Microsoft data center. is they’re taking a lot of the complexity out for our mutual customers around hardware. Q We talk about the cost of computing. which is the foundation of everything we’re doing with Windows Azure. they’ve licensed SQL. like traditional hosters. 30 VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. We have these user services for photos. You don’t have a lot of the things you might need to build an end-to-end application. Also. start playing with it. You can’t even take too long to respond to the Web request or they’ll shut you down. other computing platforms. Q So only Microsoft will be hosting Azure? A Only Microsoft is hosting Azure. if I’m an enterprise and I want to provide these cloud-based Azure services to my users or business partners.NET Framework. They don’t have to have a new way to do social networking and contacts. We have base compute and base storage. your cloud. we’re going to take that innovation and bring it back to Windows Server. . but what impact will all this have on the cost of development and the management of dev processes? A We think we’re removing complexities out of all layers of the stack by doing this in the cloud for you. But the way you’ll get your cloud is that you’ll buy Windows Server. As we learn. and what’s appropriate for premises.For example. My guess is that. and then you can also use premises as well. Box 1164. www.visualstudiomagazine.com Media Kits JetBrains 8 www.S. London.com www. Printed in the U. Copyright Statement © Copyright 2009 by 1105 Media.97 (U.typmock. Box 1164. 12.com pg.com East Andrew Mintz National Sales Manager Phone: 508-532-1433 amintz@1105media. fax number 847-763-9564.com Reprints Reprints: For single article reprints (in minimum quantities of 250-500). [email protected]. Phone: 914-368-1000.S. Ste 101. Ste 300. Return Undeliverable Canadian Addresses to Circulation Dept.com pg.pegasusimaging.com pg. 25 Microsoft Corporation www.compuware. Corporate Address pg. IL 60076-8164. 1 Visual Studio Magazine www.com to access the stories in this issue.com pg.atalasoft. Implementation or use of any information contained herein is the reader's sole responsibility. Reproductions in whole or part prohibited except by written permission. While the information has been reviewed for dtSearch www. Box 25542.com National Accounts Director William Smith Phone: 603-886-3466 wsmith@1105media. Technical inaccuracies may result from printing errors and/or new developments in the industry.com Media Kits: Direct your Media Kit requests to Matt Morollo. there is no guarantee that the same or similar results may be achieved in all environments. P.com pg. www. 3 Edit Ad Index Compuware 9 www.devexpress. 13 Pegasus Imaging Corporation www.com pg. Canada Publications Mail Agreement No: 40612608. back issue requests. Annual subscription rates for non-qualified subscribers are: U. Periodicals postage paid at Chatsworth. and address changes: Mail to: Visual Studio Magazine. Inc. please contact our list manager.S.com Microsoft Account Manager Danna Vedder Phone: 253-514-8015 [email protected]. 2600 El Camino Real.com or call toll free (888) 7688759.97 (U. 508-532-1418 (phone). as well as other lists from 1105 Media." c/o Visual Studio Magazine.waysidetechnology. 508-875-6622 (fax). E-mail: 1105media@meritdirect. www. Go to VisualStudioMagazine. San Mateo. P.com ID Statement Visual Studio Magazine (ISSN 1537-002X) is published monthly by 1105 Media.asp List Rental This publication’s subscriber list. VisualStudioMagazine.magreprints.com. Skokie.com · January 2009 · VISUAL STUDIO MAGAZINE 31 . and at additional mailing offices. Legal Disclaimer The information in this magazine has not undergone any formal testing by 1105 Media. Inc. CA 91311-9998. For more information.97. funds). plaques and posters contact: PARS International Phone: 212-221-9595 E-mail: 1105reprints@parsintl. www. Ste. 17 8 Typemock 8 www. Complimentary subscriptions are sent to qualifying subscribers. email VSM@1105service. Inc. plus read exclusive online-only content.com pg. P.. 101. e-prints. 9121 Oakdale Avenue. IL 60076-8164.com Jenny Hernandez-Asandas Phone: 818-734-1520 ext 101 Fax: 818-734-1528 [email protected]. Inc. All rights reserved.microsoft. Subscription inquiries.S.com cwood@1105media. 27 pg. C3 VSLive! Events Vslive.dtsearch. C4 LEAD Technologies.com West Chris Kourtoglou Regional Sales Manager Phone: 650-579-0121 ckourtoglou@1105media. Print Production accuracy. 23 ComponentOne www. 20 Intel Corporation www. Mail requests to "Permissions Editor. Skokie. Chatsworth. $34. Inc.com Production Coordinator Catharine Wood Phone: 818-734-1520 ext 233 vsmadproduction@1105media. and is distributed without any warranty expressed or implied. CA 94403.com Director.1105media. POSTMASTER: Send address changes to Visual Studio Magazine. or Bleuchip International.softwarefx. CA 91311.0109vsm_AdIndex_31 12/15/08 2:27 PM Page 31 Advertising Sales Ad Index Atalasoft. International $78. Canada $52.O. Web: www. Inc. VP Publishing.com pg.com Developer Express www.leadtools. is available for rental.com/QuickQuote.com Software FX. CA 91311 www. funds).A. C2. Chatsworth. 16.meritdirect.com/sf2009 pg. Inc. Inc. ON N6C 6B2.com Corporate Headquarters: 1105 Media 9121 Oakdale Ave. Merit Direct.jetbrains.componentone. International calls 847763-9135. 5 Wayside Technology Group. then agile isn’t for everyone. and. out of necessity. . Don Smith is in that group. at a 32 VISUAL STUDIO MAGAZINE · January 2009 · VisualStudioMagazine. and developers vary in talent and temperament.NET Rocks.And I hope it sheds the elitism and fanaticism that I see in some proponents. which I consider a highly inefficient way of mentoring. Most developers love to write code. I wonder how much of agile development exists simply to make developers more comfortable. Therefore. My first criticism of agile is the fanatic mentality of some proponents. and veteran software developer on Microsoft technologies.“Agile Software Development with Scrum” (Prentice Hall. Here’s what I mean: The Patterns and Practices group at Microsoft is heavily into agile development. In one of the first books about Scrum. VSM Billy Hollis is an author. I’m sorry.” wonders if agile is compromising our supply of development talent by ignoring such developers. The Rolling Stones and David Bowie did songs with heavy disco influences. so I must. I don’t think anyone knows. For example. the authors claim: “Industrial process control theory is a proven body of knowledge that describes why Scrum works and other approaches are difficult and finally untenable. He speaks regularly at VSLive! events. fading in favor of something else in the next few years? I don’t know.agile development must evolve. developers? Richard Campbell. Will agile methodologies fare as well as rock? Will we still be doing agile software development 20 or 30 years from now? Or will agile be the disco of this software era. I’m writing a short column and not a book.” In short they’re saying Scrum works and nothing else does. Agile means different things to different people. paint with a broad brush. nor do I think it’s best for everyone. I think agile proponents are right on the money about a rapid feedback loop and having clear accountability for developers. he said. But I don’t think agile is perfect.” I’ve heard variations of the same thing said from others. but that’s a cop-out. But not all developers are that good. but inexperienced. I hope agile proponents will keep that in mind. Design? Code it with test-driven development. I believe there are places where agile methodologies have dramatically improved the outcomes of software development efforts. Agile has some interesting strengths. Finally. Like everything else in technology. But that doesn’t mean agile is perfect.32. He’s currently developing Software as a Service applications with Windows Presentation Foundation and Silverlight and training others on those technologies. But you don’t find that many disco songs on “Guitar Hero” or “Rock Band.com. so you might as well get straight to coding.“It’s hard to do agile without really good developers. A bit after rock came the disco wave. if Don is right. I wonder if agile is sowing the seeds of its own destruction by alienating a broad swath of new talent. Requirements gathering? I’ve heard proponents of agile development say that the user doesn’t know what they want until they see something. I also think agile development still has areas where it can improve. No matter how good Scrum is. I hope it succeeds as rock music has. For a while. listening to 30-year-old music was distinctly uncool. That’s a sweeping and ridiculous claim. Reach him at billyhollis@gmail. or that it’s the right choice for all projects. Projects range in size and complexity. of the Internet audio talk show “.”while you do find many vintage rock songs from a score of sixties rock icons. with many different styles that suit different tastes and circumstances.com conference last May. circumstances vary far too much to make such an argument. Let me say again that I think agile has many fine qualities and can lead to successful development projects.v4 12/15/08 9:32 AM The Pragmatic Page 32 Developer IS AGILE ROCK OR DISCO? BY BILLY HOLLIS When I was a teen.0109vsm_GuestOp.Yet today’s teens listen happily to music more than 30 years old. agile teams have a tendency to require a high level of experience and professionalism just to join the team. I think agile practices could improve by formalizing mentoring beyond pair programming. Users can tell you what they need if you know how to ask them. it’s more likely to share the destiny of disco. consultant.and agile does a pretty good job of rationalizing why developers don’t need to do anything else. What about talented. it was wildly popular. Otherwise. 2001) by Ken Schwaber and Mike Beedle. RedDevNews.VSLive. C O M POWERING THE WINDOWS SOFTWARE REVOLUTION OPTIMIZED FOR PRINT ✱ ONLINE ✱ EVENTS For more information visit: www.NET E N T E R P R I S E S O L U T I O N S F O R .com .N E T D E V E L O P M E N T M A G A Z I N E .0208vsm_VSMPureAd.VisualStudioMagazine.com www.final 1/18/08 11:46 AM Page 32 PURE VISUAL STUDIO AND .com www. QWHO&RUSRUDWLRQLQWKH86DQGRWKHUFRXQWULHV 2WKHUQDPHVDQGEUDQGVPD\EHFODLPHGDVWKHSURSHUW\RIRWKHUV .com/go/parallel ‹.QWHODQGWKH.intel.QWHOORJRDUHWUDGHPDUNVRI. Parallelism breakthrough. 7KLVDOOLQRQHSDUDOOHOLVPWRROVHWVLPSOLÀHVSDUDOOHOLVPIRUPXOWLFRUH IURPDQDO\VLVDQGFRPSLOLQJWKURXJKGHEXJJLQJDQGWXQLQJ'HVLJQHG IRUWRGD\·VVHULDODSSVDQGWRPRUURZ·VSDUDOOHOLQQRYDWRUV /HDUQPRUHDQGVLJQXSIRU%HWDwww.QWHO&RUSRUDWLRQ$OOULJKWVUHVHUYHG.Project1 12/15/08 11:45 AM Page 1 EVOLVE YOUR CODE.
Copyright © 2024 DOKUMEN.SITE Inc.