Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Expert C# 2005 Business Objectsn
Nội dung xem thử
Mô tả chi tiết
Expert C# 2005
Business Objects
Second Edition
Rockford Lhotka
6323_FM_final.qxd 2/27/06 7:07 PM Page i
Expert C# 2005 Business Objects, Second Edition
Copyright © 2006 by Rockford Lhotka
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording, or by any information storage or retrieval
system, without the prior written permission of the copyright owner and the publisher.
ISBN-13 (pbk): 978-1-59059-632-6
ISBN-10 (pbk): 1-59059-632-3
Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1
Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence
of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark
owner, with no intention of infringement of the trademark.
Lead Editor: Jonathan Hassell
Technical Reviewers: Dan Billingsley, Brant Estes, Petar Kozul
Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Jason Gilmore,
Jonathan Hassell, James Huddleston, Chris Mills, Matthew Moodie, Dominic Shakeshaft, Jim Sumser,
Matt Wade
Project Manager: Kylie Johnston
Copy Edit Manager: Nicole LeClerc
Copy Editor: Damon Larson
Assistant Production Director: Kari Brooks-Copony
Production Editor: Laura Cheu
Compositor: Linda Weidemann, Wolf Creek Press
Proofreader: Elizabeth Berry
Indexer: John Collin
Artist: Kinetic Publishing Services, LLC
Cover Designer: Kurt Krames
Manufacturing Director: Tom Debolski
Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor,
New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or
visit http://www.springeronline.com.
For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley,
CA 94710. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit http://www.apress.com.
The information in this book is distributed on an “as is” basis, without warranty. Although every precaution
has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to
any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly
by the information contained in this work.
The source code for this book is available to readers at http://www.apress.com in the Source Code section.
6323_FM_final.qxd 2/27/06 7:07 PM Page ii
In memory of my Grandmother, Evylyn,
a true angel on earth, who now rests in heaven.
6323_FM_final.qxd 2/27/06 7:07 PM Page iii
6323_FM_final.qxd 2/27/06 7:07 PM Page iv
Contents at a Glance
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
About the Technical Reviewers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
■CHAPTER 1 Distributed Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
■CHAPTER 2 Framework Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
■CHAPTER 3 Business Framework Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
■CHAPTER 4 Data Access and Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
■CHAPTER 5 Completing the Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
■CHAPTER 6 Object-Oriented Application Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
■CHAPTER 7 Using the CSLA .NET Base Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
■CHAPTER 8 Business Object Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
■CHAPTER 9 Windows Forms UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
■CHAPTER 10 Web Forms UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
■CHAPTER 11 Web Services Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
■CHAPTER 12 Implementing Remote Data Portal Hosts. . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
v
6323_FM_final.qxd 2/27/06 7:07 PM Page v
6323_FM_final.qxd 2/27/06 7:07 PM Page vi
Contents
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
About the Technical Reviewers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
■CHAPTER 1 Distributed Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Logical and Physical Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Complexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Relationship Between Logical and Physical Models . . . . . . . . . . . . . . . . . . . 4
A 5-Layer Logical Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Applying the Logical Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
The Way Ahead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Managing Business Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Potential Business Logic Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Business Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Mobile Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Architectures and Frameworks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
■CHAPTER 2 Framework Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Basic Design Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
N-Level Undo Capability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Tracking Broken Business Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Tracking Whether the Object Has Changed . . . . . . . . . . . . . . . . . . . . . . . . . 41
Strongly Typed Collections of Child Objects . . . . . . . . . . . . . . . . . . . . . . . . . 41
Simple and Abstract Model for the UI Developer . . . . . . . . . . . . . . . . . . . . . 42
Supporting Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Object Persistence and Object-Relational Mapping . . . . . . . . . . . . . . . . . . . 49
Custom Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Integrated Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
vii
6323_FM_final.qxd 2/27/06 7:07 PM Page vii
Framework Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Business Object Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
N-Level Undo Functionality. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Data Binding Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Validation Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Data Portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Custom Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Integrated Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Helper Types and Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Namespace Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
■CHAPTER 3 Business Framework Implementation. . . . . . . . . . . . . . . . . . . . . . . . 91
Setting Up the CSLA .NET Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Creating the Directory Structure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Supporting Localization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Csla.Core Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
IBusinessObject Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
IUndoableObject Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
IEditableCollection Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
IReadOnlyObject Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
IReadOnlyCollection Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
ICommandObject Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
ObjectCloner Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
BindableBase Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
NotUndoableAttribute Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
UndoableBase Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
BusinessBase Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
ReadOnlyBindingList Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Csla.Validation Namespace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
RuleHandler Delegate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
RuleArgs Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
RuleMethod Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
ValidationRules Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
BrokenRule Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
BrokenRulesCollection Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
ValidationException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Csla.Security Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
RolesForProperty Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
AccessType Enum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
AuthorizationRules Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
viii ■CONTENTS
6323_FM_final.qxd 2/27/06 7:07 PM Page viii
Csla Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
BusinessBase Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
BusinessListBase Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
ReadOnlyBase Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
ReadOnlyListBase Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
■CHAPTER 4 Data Access and Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Data Portal Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Channel Adapter and Message Router Patterns . . . . . . . . . . . . . . . . . . . . . 161
Distributed Transaction Support. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Context and Location Transparency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Enhancing the Base Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Factory Methods and Criteria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Save Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Data Portal Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Channel Adapter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Csla.MethodCaller Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Csla.Server.CallMethodException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Csla.RunLocalAttribute Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Csla.DataPortalEventArgs Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Csla.DataPortal Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Csla.Server.IDataPortalServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Csla.DataPortalClient.IDataPortalProxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Csla.DataPortalClient.LocalProxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Csla.DataPortalClient.RemotingProxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Csla.Server.Hosts.RemotingPortal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Csla.DataPortalClient.EnterpriseServicesProxy. . . . . . . . . . . . . . . . . . . . . . 200
Csla.Server.Hosts.EnterpriseServicesPortal . . . . . . . . . . . . . . . . . . . . . . . . 201
Csla.DataPortalClient.WebServicesProxy . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Csla.Server.Hosts.WebServicePortal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Distributed Transaction Support. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Csla.TransactionalTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Csla.TransactionalAttribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Csla.Server.DataPortal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Csla.Server.ServicedDataPortal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Csla.Server.TransactionalDataPortal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Message Router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Csla.CriteriaBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Csla.Server.SimpleDataPortal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
■CONTENTS ix
6323_FM_final.qxd 2/27/06 7:07 PM Page ix
Context and Location Transparency. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Csla.Server.DataPortalContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Csla.Server.DataPortalResult . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Csla.Server.DataPortalException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Csla.ApplicationContext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
■CHAPTER 5 Completing the Framework. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Additional Base Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
CommandBase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
NameValueListBase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Custom Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
BusinessPrincipalBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Sorting Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
SortedBindingList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Date Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
SmartDate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Common Business Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
CommonRules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Data Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
SafeDataReader. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
DataMapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
ObjectAdapter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Windows Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
ReadWriteAuthorization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
BindingSourceRefresh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Web Forms Data Binding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
CslaDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
CslaDataSourceView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
CslaDataSourceDesigner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
CslaDesignerDataSourceView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
ObjectSchema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
ObjectViewSchema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
ObjectFieldInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
■CHAPTER 6 Object-Oriented Application Design . . . . . . . . . . . . . . . . . . . . . . . . . 321
Application Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
x ■CONTENTS
6323_FM_final.qxd 2/27/06 7:07 PM Page x
Object Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Initial Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Revising the Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Custom Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Using CSLA .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Database Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Creating the Databases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
PTracker Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Security Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
■CHAPTER 7 Using the CSLA .NET Base Classes . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Business Object Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Object Creation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Object Retrieval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Updating Editable Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
Disposing and Finalizing Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Business Class Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Common Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Class Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
■CHAPTER 8 Business Object Implementation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
ProjectTracker Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Setting Up the Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Business Class Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
ProjectResources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
ProjectResource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Assignment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
RoleList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Resource and Related Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
ProjectList and ResourceList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Role . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Implementing Exists Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Custom Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
PTPrincipal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
PTIdentity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
■CONTENTS xi
6323_FM_final.qxd 2/27/06 7:07 PM Page xi
■CHAPTER 9 Windows Forms UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Interface Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
User Control Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
User Control Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Application Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
PTWin Project Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
User Control Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
WinPart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
MainForm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Login Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Business Functionality. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
MainForm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
RolesEdit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Project List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
Project Edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
■CHAPTER 10 Web Forms UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
Web Development and Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
State Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
State on the Web Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Transferring State to or from the Client. . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
State in a File or Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
Interface Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
Application Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
PTWeb Site Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Master Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
Login Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Business Functionality. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
RolesEdit Form. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
ProjectList Form. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
ProjectEdit Form. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
■CHAPTER 11 Web Services Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Overview of Web Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
The SOAP Standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
Message-Based Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
SOAP and Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
SOAP, Web Services, and the .NET Framework. . . . . . . . . . . . . . . . . . . . . . 566
xii ■CONTENTS
6323_FM_final.qxd 2/27/06 7:07 PM Page xii
Web Services and SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Services vs. Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Designing a Web Services Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
Component-Based vs. Service-Oriented Design . . . . . . . . . . . . . . . . . . . . 571
Grouping Web Methods into Web Services . . . . . . . . . . . . . . . . . . . . . . . . . 572
Returning and Accepting Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
Web Service Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
Application Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
PTWebService Site Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
PTService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
Component-Based Web Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Service-Oriented Web Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
Web Service Consumer Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591
A Simple Smart Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
■CHAPTER 12 Implementing Remote Data Portal Hosts. . . . . . . . . . . . . . . . . . . . 601
Data Portal Channel Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
Factors for Comparison. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
.NET Remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
Enterprise Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Creating the Proxy/Host Assembly. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Client Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
■CONTENTS xiii
6323_FM_final.qxd 2/27/06 7:07 PM Page xiii
6323_FM_final.qxd 2/27/06 7:07 PM Page xiv