Introduction xviiPART I: UNDERSTANDING THE DOMAIN Chapter 1: Conducting a thorough domain analysis 3 Domain-driven design to the rescue 4Introducing design driven by the domain 4Clearing up common misconceptions about DDD 4Introducing the ubiquitous language 6Creating a vocabulary of domain-specific terms 6Keeping business and code in sync 8Introducing the bounded context 10Discovering bounded contexts 10Implementing bounded contexts 12Introducing context mapping 15Examining relationships between bounded contexts 15Introducing event storming 17Having unlimited modeling space 17Finding events in the domain 17Leading the discussion 18Summary 18 Chapter 2: Selecting the supporting architecture 19 It''s all about business logic 19Examining the application logic 20Examining the domain logic 21Exploring patterns for the business logic 22Using a single model 24Exploring the elements of an object-oriented domain model 24Putting business rules inside 26Discovering aggregates 28Exploring the role of domain services 30Implementing command and query separation 32Working with the Command and Query Separation principle 33Implementing CQRS 36Introducing message-based formulation 39Ad-hoc infrastructure 39Introducing event sourcing 43Summary 46 Chapter 3: UX-driven design 47 Why a top-down approach is better than a bottom-up one 48Foundation of the bottom-up approach 48Planning with a top-down approach 50Looking at user experience from an architectural perspective 52UX is not UI 52Explaining UXDD in three steps 55Why UXDD is beneficial to nearly everybody 59Summary 62 Chapter 4: Architectural options for a web solution 63 Assessing the available web solutions 64Deciding on the best framework 64Laying out a solution 65Examining the role of ASP.NET Core 1.0 66Considering ASP.NET as the starting point 66Examining the architectural dependencies in ASP.NET Core 1.0 68Exploring the reasons to choose ASP.NET Core 1.0 69Determining if you should use ASP.
NET Web Forms 72Examining a common scenario 72ASP.NET Web Forms at a glance 73What''s still good with Web Forms 73Why you should move away from Web Forms 74Determining if you should use ASP.NET MVC 76ASP.NET MVC at a glance 76What''s good with ASP.NET MVC 77Weak points of ASP.NET MVC 78Examining the role of ASP.NET Web API 79Moving from WCF to Web API 79Comparing ASP.NET Web API and ASP.
NET MVC 80Talking about REST 82Using Web API in ASP.NET Core 1.0 82Single-page applications 83Setting up a SPA 84Hybrid SPA 84Weak points of a SPA 85Summary 85 Chapter 5: The layered architecture 87 Beyond classic three-tier systems 87Working with a three-tier architecture today 88Fifty shades of gray areas 89The presentation layer 90The user experience 90The input model 91The view model 92The application layer 92Entry point in the system''s back end 93Orchestration of business processes 94The domain layer 95The mythical domain model 95The equally mythical concept of domain services 96A more pragmatic view of domain modeling 96The infrastructure layer 97Current state storage 97Event stores 98Caching layers 99External services 99Summary 100 PART II: DEVELOPMENT Chapter 6: ASP.NET state of the art 103 Web flavors 103The web could have been different 104Classic web is the winner 104ASP.NET is feature-complete 105No more to add is no more to add 105Is it full potential or software obsolescence? 106ASP.NET Core 1.0 has no new functions 106It''s about the new runtime 106It''s about the business model 107It''s about the development model 107What is the state of ASP.NET? 108 Chapter 7: Whys, wherefores, and technical aspects of ASP.
NET Core 1.0 109 The background of ASP.NET Core 110The cost of a large memory footprint 110Reconsidering the cloud as the silver bullet 111Making the case for the necessity of a different programming model 111The impact on everyday work 112The ASP.NET Core runtime at a glance 113The DNX host 113Hosting web applications in DNX 115ASP.NET Core HTTP pipeline 116ASP.NET Core for ASP.NET developers 118Creating a new project 118Application startup 122Application settings 126Authentication 128Other aspects of web programming 129Summary 132 Chapter 8: Core of ASP.NET MVC 133 Routing incoming requests 134Simulating the ASP.
NET MVC runtime 134Exploring the URL routing HTTP module 137Using application routes 138Exploring the controller class 145Looking at aspects of a controller 145Writing controller classes 147Processing input data 152Manual parameter binding 152Model binding 153Producing action results 158Wrapping results 158Returning HTML markup 160Returning JSON content 167Summary 169 Chapter 9: Core of Bootstrap 171 Bootstrap at a glance 171LESS and the foundation of Bootstrap 172Setting up Bootstrap 174Putting Bootstrap into perspective 175Responsive layouts 176The grid system 176Screen-based rendering 178Taxonomy of today''s web elements 183Restyling basic HTML elements 183Restyling list HTML elements 193A look at more advanced components 196Bootstrap extensions 202Autocompletion 202Date picking 209Custom components 211Summary 215 Chapter 10: Organizing the ASP.NET MVC project 217 Planning the project solution 217Mapping projects to the Layered Architecture pattern 218Application startup 220Examining application services 225Adding in other assets 227Creating presentation layouts 228Serving resources more effectively 231Working with Bundling 231Using minification 236Examining other aspects 238Exploring error handling 238Configuring user authentication 241Summary 246 Chapter 11: Presenting data 247 Structuring an HTML view 247Exploring the view model 247Examining the page layout 250Presenting the elements of a view 254Displaying a list of data items 258Creating a grid view 258Adding paging capabilities 263Adding scrolling capabilities to page elements 268Adding a detail view 271Popover views 271Drill-down views 274Summary 277 Chapter 12: Editing data 279 A common form for the login page 279Presenting the form 279Processing posted data 281Input forms 284The Post-Redirect-Get pattern 284Form validation 286Modal input forms 296Quick tips for improving the user experience 304Using date pickers is great, but. 305Using autocompletion instead of long drop-down lists 307Miscellaneous tips for large input forms 310Summary 311 Chapter 13: Persistence and modeling 313 Examining the different flavors of a model 313The persistence model 314The domain model 315The input model 317The view model 318Designing a persistence layer 319Using an implicit and legacy data model 320Using Entity Framework 322The Repository pattern 326Polyglot persistence 328Polyglot persistence by example 329Costs of polyglot persistence 330Summary 332 PART III: USER EXPERIENCE Chapter 14: Creating more interactive views 335 Exposing JSON content 336Creating JSON endpoints 336Negotiating content 339Solving the cross-origin puzzle 340Designing a Web API 344Purpose of the ASP.NET Web API 344Web API in the context of ASP.NET MVC 345Securing a standalone Web API 346Pulling content 349The Ajax core 349The jQuery tools 351Binding data to the current DOM 354Pushing content to the client 357ASP.NET SignalR at a glance 358Monitoring remote tasks 359Other scenarios for ASP.NET SignalR 362Summary 363 Chapter 15: Pros and cons of responsive design 365 Foundation of Responsive Web Design 365A brief history of RWD 366CSS media queries 366RWD and device independence 371Adapting RWD to non-desktop devices 373Dealing with images 374Dealing with fonts 376Dealing with orientation 378Summary 379 Chapter 16: Making websites mobile-friendly 381 Adapting views to the actual device 381The best of HTML5 for mobile scenarios 382Feature detection 384Client-side device detection 386A look into the future 389Device-friendly images 390The ImageEngine platform 390Resizing images automatically 391Serving device-friendly views 392What''s the best way to offer mobile content? 392Server-side detection 394Summary 399 Index 401.