SlideShare a Scribd company logo
Architecting ASP.NET Core Applications Carl-Hugo
Marcotte download
https://textbookfull.com/product/architecting-asp-net-core-
applications-carl-hugo-marcotte/
Download more ebook from https://textbookfull.com
We believe these products will be a great fit for you. Click
the link to download now, or visit textbookfull.com
to discover even more!
Architecting ASP.NET Core Applications: An atypical
design patterns guide for .NET 8, C# 12, and beyond 3rd
Edition (Early Access) Carl-Hugo Marcotte
https://textbookfull.com/product/architecting-asp-net-core-
applications-an-atypical-design-patterns-guide-for-
net-8-c-12-and-beyond-3rd-edition-early-access-carl-hugo-
marcotte/
Pro ASP.NET Core MVC 2: Develop cloud-ready web
applications using Microsoft’s latest framework,
ASP.NET Core MVC 2 — Seventh Edition Adam Freeman
https://textbookfull.com/product/pro-asp-net-core-mvc-2-develop-
cloud-ready-web-applications-using-microsofts-latest-framework-
asp-net-core-mvc-2-seventh-edition-adam-freeman/
Pro Entity Framework Core 2 for ASP.NET Core MVC Adam
Freeman
https://textbookfull.com/product/pro-entity-framework-core-2-for-
asp-net-core-mvc-adam-freeman/
Essential Angular for ASP.NET Core MVC 3 Adam Freeman
https://textbookfull.com/product/essential-angular-for-asp-net-
core-mvc-3-adam-freeman/
Creating ASP.NET Core Web Applications: Proven
Approaches to Application Design and Development 1st
Edition Dirk Strauss
https://textbookfull.com/product/creating-asp-net-core-web-
applications-proven-approaches-to-application-design-and-
development-1st-edition-dirk-strauss-2/
Essential Docker for ASP.NET Core MVC 1st Edition Adam
Freeman
https://textbookfull.com/product/essential-docker-for-asp-net-
core-mvc-1st-edition-adam-freeman/
ASP.NET Core in Action - MEAP Version 5 2nd Edition
Andrew Lock
https://textbookfull.com/product/asp-net-core-in-action-meap-
version-5-2nd-edition-andrew-lock/
Pro ASP.NET Core 3: Develop Cloud-Ready Web
Applications Using MVC, Blazor, and Razor Pages —
Eighth Edition Adam Freeman
https://textbookfull.com/product/pro-asp-net-core-3-develop-
cloud-ready-web-applications-using-mvc-blazor-and-razor-pages-
eighth-edition-adam-freeman/
The Complete ASP.NET Core 3 API Tutorial: Hands-On
Building, Testing, and Deploying 1st Edition Les
Jackson
https://textbookfull.com/product/the-complete-asp-net-core-3-api-
tutorial-hands-on-building-testing-and-deploying-1st-edition-les-
jackson/
Architecting ASP.NET Core Applications Carl-Hugo Marcotte
Architecting ASP.NET Core Applications Carl-Hugo Marcotte
Architecting ASP.NET Core
Applications
Copyright © 2023 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in
a retrieval system, or transmitted in any form or by any means,
without the prior written permission of the publisher, except in the
case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure
the accuracy of the information presented. However, the information
contained in this book is sold without warranty, either express or
implied. Neither the author, nor Packt Publishing, and its dealers
and distributors will be held liable for any damages caused or alleged
to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information
about all of the companies and products mentioned in this book by
the appropriate use of capitals. However, Packt Publishing cannot
guarantee the accuracy of this information.
Early Access Publication: Architecting ASP.NET Core
Applications
Early Access Production Reference: B19826
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham
B3 2PB, UK
ISBN: 978-1-80512-338-5
www.packt.com
Table of Contents
1. Architecting ASP.NET Core Applications, Third Edition: An
atypical design patterns guide for .NET 8, C# 12, and beyond
2. 1 Introduction
I. Before you begin: Join our book community on Discord
II. What is a design pattern?
III. Anti-patterns and code smells
i. Anti-patterns
ii. Code smells
IV. Understanding the web – request/response
V. Getting started with .NET
i. .NET SDK versus runtime
ii. .NET 5+ versus .NET Standard
iii. Visual Studio Code versus Visual Studio versus the
command-line interface
iv. Technical requirements
VI. Summary
VII. Questions
VIII. Further reading
3. 2 Automated Testing
I. Before you begin: Join our book community on Discord
II. Introduction to automated testing
i. Unit testing
ii. Integration testing
iii. End-to-end testing
iv. Other types of tests
v. Picking the right test style
III. Testing approaches
i. TDD
ii. ATDD
iii. BDD
iv. Refactoring
v. Technical debt
IV. Testing techniques
i. White-box testing
ii. Black-box testing
iii. Grey-box testing
iv. White-box vs. Black-box vs. Grey-box testing
v. Conclusion
V. Test case creation
i. Equivalence Partitioning
ii. Boundary Value Analysis
iii. Decision Table Testing
iv. State Transition Testing
v. Use Case Testing
VI. How to create an xUnit test project
VII. Key xUnit features
i. Facts
ii. Assertions
iii. Theories
iv. Closing words
VIII. Arrange, Act, Assert
IX. Organizing your tests
i. Unit tests
ii. Integration tests
X. Writing ASP.NET Core integration tests
i. Classic web application
ii. Minimal hosting
XI. Important testing principles
XII. Summary
XIII. Questions
XIV. Further reading
4. 3 Architectural Principles
I. Before you begin: Join our book community on Discord
II. Separation of concerns (SoC)
III. Don’t repeat yourself (DRY)
IV. Keep it simple, stupid (KISS)
V. The SOLID principles
i. Single responsibility principle (SRP)
ii. Open/Closed principle (OCP)
iii. Liskov substitution principle (LSP)
iv. Interface segregation principle (ISP)
v. Dependency inversion principle (DIP)
VI. Summary
VII. Questions
VIII. Further reading
5. 4 REST APIs
I. Before you begin: Join our book community on Discord
II. REST & HTTP
i. HTTP methods
ii. HTTP Status code
iii. HTTP headers
iv. Versioning
v. Wrapping up
III. Data Transfer Object (DTO)
i. Goal
ii. Design
iii. Conceptual examples
iv. Conclusion
IV. API contracts
i. Code-first API Contract
ii. Wrapping up
V. Summary
VI. Questions
VII. Further reading
VIII. Answers
6. 5 Minimal API
I. Before you begin: Join our book community on Discord
II. Top-level statements
III. Minimal Hosting
IV. Minimal APIs
i. Map route-to-delegate
ii. Configuring endpoints
iii. Leveraging endpoint filters
iv. Leveraging the endpoint filter factory
v. Organizing endpoints
V. Using Minimal APIs with Data Transfer Objects
i. Goal
ii. Design
iii. Project – Minimal API
iv. Conclusion
VI. Summary
VII. Questions
VIII. Further reading
IX. Answers
7. 6 Model-View-Controller
I. Before you begin: Join our book community on Discord
II. The Model View Controller design pattern
i. Goal
ii. Design
iii. Anatomy of ASP.NET Core web APIs
iv. Conclusion
III. Using MVC with DTOs
i. Goal
ii. Design
iii. Project – MVC API
iv. Conclusion
IV. Summary
V. Questions
VI. Further reading
VII. Answers
8. 7 Strategy, Abstract Factory, and Singleton Design Patterns
I. Before you begin: Join our book community on Discord
II. The Strategy design pattern
i. Goal
ii. Design
iii. Project – Strategy
iv. Conclusion
III. The Abstract Factory design pattern
i. Goal
ii. Design
iii. Project – Abstract Factory
iv. Project – The mid-range vehicle factory
v. Impacts of the Abstract Factory
vi. Conclusion
IV. The Singleton design pattern
i. Goal
ii. Design
iii. An alternate (better) way
iv. Code smell – Ambient Context
v. Conclusion
V. Summary
VI. Questions
VII. Answers
9. 8 Dependency Injection
I. Before you begin: Join our book community on Discord
II. What is dependency injection?
i. The composition root
ii. Striving for adaptability
iii. Understanding the use of the IoC container
iv. The role of an IoC container
v. Code smell – Control Freak
vi. Object lifetime
vii. Registering our dependencies
viii. Registering your features elegantly
ix. Using external IoC containers
III. Revisiting the Strategy pattern
i. Constructor injection
ii. Property injection
iii. Method injection
iv. Project – Strategy
v. Conclusion
IV. Understanding guard clauses
V. Revisiting the Singleton pattern
i. Project – Application state
ii. Project – Wishlist
iii. Conclusion
VI. Understanding the Service Locator pattern
i. Project – ServiceLocator
ii. Conclusion
VII. Revisiting the Factory pattern
i. Project – Factory
VIII. Summary
IX. Questions
X. Further reading
XI. Answers
10. 9 Options, Settings, and Configuration
I. Before you begin: Join our book community on Discord
II. Loading the configuration
III. Learning the building blocks
i. IOptionsMonitor<TOptions>
ii. IOptionsFactory<TOptions>
iii. IOptionsSnapshot<TOptions>
iv. IOptions<TOptions>
IV. Project – CommonScenarios
i. Manual configuration
ii. Using the settings file
iii. Injecting options
iv. Named options
v. Reloading options at runtime
V. Project – OptionsConfiguration
i. Creating the program
ii. Configuring the options
iii. Implementing a configurator object
iv. Adding post-configuration
v. Using multiple configurator objects
vi. Exploring other configuration possibilities
VI. Project – OptionsValidation
i. Eager validation
ii. Data annotations
iii. Validation types
VII. Project – OptionsValidationFluentValidation
VIII. Workaround – Injecting options directly
IX. Project – Centralizing the configuration
X. Using the configuration-binding source generator
i. Project – ConfigurationGenerators: Part 1
XI. Using the options validation source generator
i. Project – ConfigurationGenerators: Part 2
XII. Using the ValidateOptionsResultBuilder class
i. Project - ValidateOptionsResultBuilder
XIII. Summary
XIV. Questions
XV. Further reading
XVI. Answers
11. 10 Logging patterns
I. Before you begin: Join our book community on Discord
II. About logging
III. Writing logs
IV. Log levels
V. Logging providers
VI. Configuring logging
VII. Structured logging
VIII. Summary
IX. Questions
X. Further reading
XI. Answers
12. 11 Structural Patterns
I. Before you begin: Join our book community on Discord
II. Implementing the Decorator design pattern
i. Goal
ii. Design
iii. Project – Adding behaviors
iv. Project – Decorator using Scrutor
v. Conclusion
III. Implementing the Composite design pattern
i. Goal
ii. Design
iii. Project – BookStore
iv. Conclusion
IV. Implementing the Adapter design pattern
i. Goal
ii. Design
iii. Project – Greeter
iv. Conclusion
V. Implementing the Façade design pattern
i. Goal
ii. Design
iii. Project – The façades
iv. Conclusion
VI. Summary
VII. Questions
VIII. Further reading
IX. Answers
13. 12 Behavioral Patterns
I. Before you begin: Join our book community on Discord
II. Implementing the Template Method pattern
i. Goal
ii. Design
iii. Project – Building a search machine
iv. Conclusion
III. Implementing the Chain of Responsibility pattern
i. Goal
ii. Design
iii. Project – Message interpreter
iv. Conclusion
IV. Mixing the Template Method and Chain of Responsibility
patterns
i. Project – Improved message interpreter
ii. Project – A final, finer-grained design
iii. Conclusion
V. Summary
VI. Questions
VII. Answers
14. 13 Understanding the Operation Result Design Pattern
I. Before you begin: Join our book community on Discord
II. The Operation Result pattern
i. Goal
ii. Design
iii. Project – Implementing different Operation Result
patterns
iv. Advantages and disadvantages
III. Summary
IV. Questions
V. Further reading
VI. Answers
15. 14 Layering and Clean Architecture
I. Before you begin: Join our book community on Discord
II. Introducing layering
i. Classic layering model
ii. Splitting the layers
iii. Layers versus tiers versus assemblies
III. Responsibilities of the common layers
i. Presentation
ii. Domain
iii. Data
IV. Abstract layers
V. Sharing the model
VI. Clean Architecture
VII. Implementing layering in real life
i. To be or not to be a purist?
ii. Building a façade over a database
VIII. Summary
IX. Questions
X. Further reading
XI. Answers
16. 15 Object Mappers, Aggregate Services, and Façade
I. Before you begin: Join our book community on Discord
II. Object mapper
i. Goal
ii. Design
iii. Project – Mapper
iv. Conclusion
III. Code smell – Too many dependencies
IV. Pattern – Aggregate Services
V. Pattern – Mapping Façade
VI. Project – Mapping service
VII. Project – AutoMapper
VIII. Project – Mapperly
IX. Summary
X. Questions
XI. Further reading
XII. Answers
17. 16 Mediator and CQRS Design Patterns
I. Before you begin: Join our book community on Discord
II. A high-level overview of Vertical Slice Architecture
III. Implementing the Mediator pattern
i. Goal
ii. Design
iii. Project – Mediator (IMediator)
iv. Project – Mediator (IChatRoom)
v. Conclusion
IV. Implementing the CQS pattern
i. Goal
ii. Design
iii. Project – CQS
iv. Conclusion
V. Code smell – Marker Interfaces
i. Metadata
ii. Dependency identifier
VI. Using MediatR as a mediator
i. Project – Clean Architecture with MediatR
ii. Conclusion
VII. Summary
VIII. Questions
IX. Further reading
X. Answers
18. 17 Getting Started with Vertical Slice Architecture
I. Before you begin: Join our book community on Discord
II. Anti-pattern – Big Ball of Mud
III. Vertical Slice Architecture
i. What are the advantages and disadvantages?
ii. Project – Vertical Slice Architecture
iii. Conclusion
IV. Continuing your journey: A few tips and tricks
V. Summary
VI. Questions
VII. Further reading
VIII. Answers
19. 18 Request-EndPoint-Response (REPR) and Minimal APIs
I. Before you begin: Join our book community on Discord
II. Request-EndPoint-Response (REPR) pattern
i. Goal
ii. Design
iii. Project – SimpleEndpoint
iv. Conclusion
III. Project – REPR—A slice of the real-world
i. Assembling our stack
ii. Dissecting the code structure
iii. Exploring the shopping basket
iv. Managing exception handling
v. Grey-box testing
IV. Summary
V. Questions
VI. Further reading
VII. Answers
20. 19 Introduction to Microservices Architecture
I. Before you begin: Join our book community on Discord
II. What are microservices?
i. Cohesive unit of business
ii. Ownership of data
iii. Microservice independence
III. An introduction to event-driven architecture
i. Domain events
ii. Integration events
iii. Application events
iv. Enterprise events
v. Conclusion
IV. Getting started with message queues
i. Conclusion
V. Implementing the Publish-Subscribe pattern
i. Message brokers
ii. The event sourcing pattern
iii. Example
iv. Conclusion
VI. Introducing Gateway patterns
i. Gateway Routing pattern
ii. Gateway Aggregation pattern
iii. Backend for Frontend pattern
iv. Mixing and matching gateways
v. Conclusion
VII. Project – REPR.BFF
i. Layering APIs
ii. Running the microservices
iii. Creating typed HTTP clients using Refit
iv. Creating a service that serves the current customer
v. Features
vi. Conclusion
VIII. Revisiting the CQRS pattern
i. Advantages and potential risks
ii. Conclusion
IX. Exploring the Microservice Adapter pattern
i. Adapting an existing system to another
ii. Decommissioning a legacy application
iii. Adapting an event broker to another
iv. Conclusion
X. Summary
XI. Questions
XII. Further reading
XIII. Answers
21. 20 Modular Monolith
I. Before you begin: Join our book community on Discord
II. What is a Modular Monolith?
i. What are traditional Monoliths?
ii. What are microservices?
III. Advantages of Modular Monoliths
IV. Key Components of a Modular Monolith
V. Implementing a Modular Monolith
i. Planning the project
ii. Defining our stack
VI. Project—Modular Monolith
i. Sending events from the catalog module
ii. Consuming the events from the basket module
iii. Inside the aggregator
iv. Exploring the REST API HttpClient
v. Sending HTTP requests to the API
vi. Validating the existence of a product
VII. Transitioning to Microservices
VIII. Challenges and Pitfalls
IX. Conclusion
X. Questions
XI. Further reading
XII. An end is simply a new beginning
XIII. Answers
Architecting ASP.NET Core
Applications, Third Edition: An
atypical design patterns guide for
.NET 8, C# 12, and beyond
Welcome to Packt Early Access. We’re giving you an exclusive
preview of this book before it goes on sale. It can take many months
to write a book, but our authors have cutting-edge information to
share with you today. Early Access gives you an insight into the latest
developments by making chapter drafts available. The chapters may
be a little rough around the edges right now, but our authors will
update them over time.You can dip in and out ofthis bookorfollow
alongfrom start to finish; Early Access is designed to be flexible. We
hope you enjoy getting to know more about the process of writing a
Packt book.
1. Chapter 1: Introduction
2. Chapter 2: Automated Testing
3. Chapter 3: Architectural Principles
4. Chapter 4: REST APIs
5. Chapter 5: Minimal API
6. Chapter 6: Model-View-Controller
7. Chapter 7: Strategy, Abstract Factory, and Singleton Design
Patterns
8. Chapter 8: Dependency Injection
9. Chapter 9: Options, Settings, and Configuration
10. Chapter 10: Logging patterns
11. Chapter 11: Structural Patterns
12. Chapter 12: Behavioral Patterns
13. Chapter 13: Understanding the Operation Result Design Pattern
14. Chapter 14: Layering and Clean Architecture
15. Chapter 15: Object Mappers, Aggregate Services, and Façade
16. Chapter 16: Mediator and CQRS Design Patterns
17. Chapter 17: Getting Started with Vertical Slice Architecture
18. Chapter 18: Request-EndPoint-Response (REPR) and Minimal
APIs
19. Chapter19: Introduction to Microservices Architecture
20. Chapter20: Modular Monolith
1 Introduction
Before you begin: Join our book community on Discord
Give your feedback straight to the author himself and chat to other early readers on our Discord
server (find the "architecting-aspnet-core-apps-3e" channel under EARLY ACCESS
SUBSCRIPTION).
https://packt.link/EarlyAccess
The goal of this book is not to create yet another design pattern book; instead, the chapters are
organized according to scale and topic, allowing you to start small with a solid foundation and build
slowly upon it, just like you would build a program.Instead of a guide covering a few ways of
applying a design pattern, we will explore the thought processes behind the systems we are designing
from a software engineer’s point of view.This is not a magic recipe book; from experience, there is no
magical recipe when designing software; there are only your logic, knowledge, experience, and
analytical skills. Let’s define “experience” as your past successes and failures. And don’t worry, you
will fail during your career, but don’t get discouraged by it. The faster you fail, the faster you can
recover and learn, leading to successful products. Many techniques covered in this book should help
you achieve success. Everyone has failed and made mistakes; you aren’t the first and certainly won’t
be the last. To paraphrase a well-known saying by Roosevelt: the people that never fail are the ones
who never do anything.At a high level:
This book explores basic patterns, unit testing, architectural principles, and some ASP.NET Core
mechanisms.
Then, we move up to the component scale, exploring patterns oriented toward small chunks of
software and individual units.
After that, we move to application-scale patterns and techniques, exploring ways to structure an
application.
Some subjects covered throughout the book could have a book of their own, so after this book,
you should have plenty of ideas about where to continue your journey into software architecture.
Here are a few pointers about this book that are worth mentioning:
The chapters are organized to start with small-scale patterns and then progress to higher-level
ones, making the learning curve easier.
Instead of giving you a recipe, the book focuses on the thinking behind things and shows the
evolution of some techniques to help you understand why the shift happened.
Many use cases combine more than one design pattern to illustrate alternate usage so you can
understand and use the patterns efficiently. This also shows that design patterns are not beasts
to tame but tools to use, manipulate, and bend to your will.
As in real life, no textbook solution can solve all our problems; real problems are always more
complicated than what’s explained in textbooks. In this book, I aim to show you how to mix and
match patterns to think “architecture” instead of giving you step-by-step instructions to
reproduce.
The rest of the introduction chapter introduces the concepts we explore throughout the book,
including refreshers on a few notions. We also touch on .NET, its tooling, and some technical
requirements.In this chapter, we cover the following topics:
What is a design pattern?
Anti-patterns and code smell.
Understanding the web – request/response.
Getting started with .NET.
What is a design pattern?
Since you just purchased a book about design patterns, I guess you have some idea of what design
patterns are, but let’s make sure that we are on the same page.Abstract definition: A design
pattern is a proven technique that we can use to solve a specific problem.In this book, we apply
different patterns to solve various problems and leverage some open-source tools to go further,
faster! Abstract definitions make people sound smart, but understanding concepts requires more
practice, and there is no better way to learn than by experimenting with something, and design
patterns are no different.If that definition does not make sense to you yet, don’t worry. You should
have enough information by the end of the book to correlate the multiple practical examples and
explanations with that definition, making it crystal clear.I like to compare programming to playing
with LEGO® because what you have to do is very similar: put small pieces together to create
something bigger. Therefore, if you lack imagination or skills, possibly because you are too young,
your castle might not look as good as someone with more experience. With that analogy in mind, a
design pattern is a plan to assemble a solution that fits one or more scenarios, like the tower of a
castle. Once you designed a single tower, you can build multiple by following the same steps. Design
patterns act as that tower plan and give you the tools to assemble reliable pieces to improve your
masterpiece (program).However, instead of snapping LEGO® blocks together, you nest code blocks
and interweave objects in a virtual environment!Before going into more detail, well-thought-out
applications of design patterns should improve your application designs. That is true whether
designing a small component or a whole system. However, be careful: throwing patterns into the mix
just to use them can lead to the opposite result: over-engineering. Instead, aim to write the least
amount of readable code that solves your issue or automates your process.As we have briefly
mentioned, design patterns apply to different software engineering levels, and in this book, we start
small and grow to a cloud-scale! We follow a smooth learning curve, starting with simpler patterns
and code samples that bend good practices to focus on the patterns—finally ending with more
advanced topics and good practices.Of course, some subjects are overviews more than deep dives,
like automated testing, because no one can fit it all in a single book. Nonetheless, I’ve done my best
to give you as much information about architecture-related subjects as possible to ensure the proper
foundations are in place for you to get as much as possible out of the more advanced topics, and I
sincerely hope you’ll find this book a helpful and enjoyable read.Let’s start with the opposite of
design patterns because it is essential to identify wrong ways of doing things to avoid making those
mistakes or to correct them when you see them. Of course, knowing the right way to overcome
specific problems using design patterns is also crucial.
Anti-patterns and code smells
Anti-patterns and code smells are bad architectural practices or tips about possible bad design.
Learning about best practices is as important as learning about bad ones, which is where we start.
The book highlights multiple anti-patterns and code smells to help you get started. Next, we briefly
explore the first few.
Anti-patterns
An anti-pattern is the opposite of a design pattern: it is a proven flawed technique that will most
likely cause you trouble and cost you time and money (and probably give you headaches).An anti-
pattern is a pattern that seems a good idea and seems to be the solution you were looking for, but it
causes more harm than good. Some anti-patterns started as legitimate design patterns and were
labelled anti-patterns later. Sometimes, it is a matter of opinion, and sometimes the classification
can be influenced by the programming language or technologies.Let’s look at an example next. We
will explore some other anti-patterns throughout the book.
Anti-pattern – God Class
A God class is a class that handles too many things. Typically, this class serves as a central entity
which many other classes inherit or use within the application it is the class that knows and manages
everything in the system; it is the class. On the other hand, it is also the class that nobody wants to
update, which breaks the application every time somebody touches it: it is an evil class!The best
way to fix this is to segregate responsibilities and allocate them to multiple classes rather than
concentrating them in a single class. We look at how to split responsibilities throughout the book,
which helps create more robust software.If you have a personal project with a God class at its core,
start by reading the book and then try to apply the principles and patterns you learn to divide that
class into multiple smaller classes that interact together. Try to organize those new classes into
cohesive units, modules, or assemblies.To help fix God classes, we dive into architectural principles
in Chapter 3, Architectural Principles, opening the way to concepts such as responsibility
segregation.
Code smells
A code smell is an indicator of a possible problem. It points to areas of your design that could
benefit from a redesign. By “code smell,” we mean “code that stinks” or “code that does not smell
right.”It is important to note that a code smell only indicates the possibility of a problem; it does not
mean a problem exists. Code smells are usually good indicators, so it is worth analyzing your
software’s “smelly” parts.An excellent example is when a method requires many comments to
explain its logic. That often means that the code could be split into smaller methods with proper
names, leading to more readable code and allowing you to get rid of those pesky comments.Another
note about comments is that they don’t evolve, so what often happens is that the code described by a
comment changes, but the comment remains the same. That leaves a false or obsolete description of
a block of code that can lead a developer astray.The same is also true with method names.
Sometimes, the method’s name and body tell a different story, leading to the same issues.
Nevertheless, this happens less often than orphan or obsolete comments since programmers tend to
read and write code better than spoken language comments. Nonetheless, keep that in mind when
reading, writing, or reviewing code.
Code smell – Control Freak
An excellent example of a code smell is using the new keyword. This indicates a hardcoded
dependency where the creator controls the new object and its lifetime. This is also known as the
Control Freak anti-pattern, but I prefer to box it as a code smell instead of an anti-pattern since
the new keyword is not intrinsically wrong.At this point, you may be wondering how it is possible not
to use the new keyword in object-oriented programming, but rest assured, we will cover that and
expand on the control freak code smell in Chapter 7, Deep Dive into Dependency Injection.
Code smell – Long Methods
The long methods code smell is when a method extends to more than 10 to 15 lines of code. That is
a good indicator that you should think about that method differently. Having comments that
separate multiple code blocks is a good indicator of a method that may be too long.Here are a few
examples of what the case might be:
The method contains complex logic intertwined in multiple conditional statements.
The method contains a big switch block.
The method does too many things.
The method contains duplications of code.
To fix this, you could do the following:
Extract one or more private methods.
Extract some code to new classes.
Reuse the code from external classes.
If you have a lot of conditional statements or a huge switch block, you could leverage a design
pattern such as the Chain of Responsibility, or CQRS, which you will learn about in Chapter 10,
Behavioral Patterns, and Chapter 14, Mediator and CQRS Design Patterns.
Usually, each problem has one or more solutions; you need to spot the problem and then find,
choose, and implement one of the solutions. Let’s be clear: a method containing 16 lines does not
necessarily need refactoring; it could be OK. Remember that a code smell indicates that there might
be a problem, not that there necessarily is one—apply common sense.
Understanding the web – request/response
Before going any further, it is imperative to understand the basic concept of the web. The idea
behind HTTP 1.X is that a client sends an HTTP request to a server, and then the server responds to
that client. That can sound trivial if you have web development experience. However, it is one of the
most important web programming concepts, irrespective of whether you are building web APIs,
websites, or complex cloud applications.Let’s reduce an HTTP request lifetime to the following:
1. The communication starts.
2. The client sends a request to the server.
3. The server receives the request.
4. The server does something with the request, like executing code/logic.
5. The server responds to the client.
6. The communication ends.
After that cycle, the server is no longer aware of the client. Moreover, if the client sends another
request, the server is unaware that it responded to a request earlier for that same client because
HTTP is stateless.There are mechanisms for creating a sense of persistence between requests for
the server to be “aware” of its clients. The most well-known of these is cookies.If we dig deeper, an
HTTP request comprises a header and an optional body. Then, requests are sent using a specific
method. The most common HTTP methods are GET and POST . On top of those, extensively used by
web APIs, we can add PUT , DELETE , and PATCH to that list.Although not every HTTP method accepts
a body, can respond with a body, or should be idempotent, here is a quick reference table:
Method Request has body Response has body Idempotent
GET No* Yes Yes
POST Yes Yes No
PUT Yes No Yes
PATCH Yes Yes No
DELETE May May Yes
* Sending a body with a GET request is not forbidden by the HTTP specifications, but the
semantics of such a request are not defined either. It is best to avoid sending GET requests with
a body.
An idempotent request is a request that always yields the same result, whether it is sent once or
multiple times. For example, sending the same POST request multiple times should create multiple
similar entities, while sending the same DELETE request multiple times should delete a single entity.
The status code of an idempotent request may vary, but the server state should remain the same. We
explore those concepts in more depth in Chapter 4, Model-View-Controller.Here is an example of a
GET request:
GET http: //www.forevolve.com/ HTTP/1.1
Host: www.forevolve.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,fr-CA;q=0.8,fr;q=0.7
Cookie: ...
The HTTP header comprises a list of key/value pairs representing metadata that a client wants to
send to the server. In this case, I queried my blog using the GET method and Google Chrome
attached some additional information to the request. I replaced the Cookie header’s value with ...
because it can be pretty large and that information is irrelevant to this sample. Nonetheless, cookies
are passed back and forth like any other HTTP header.
Important note about cookies
The client sends cookies, and the server returns them for every request-response cycle. This
could kill your bandwidth or slow down your application if you pass too much information
back and forth (cookies or otherwise). One good example would be a serialized identity
cookie that is very large.
Another example, unrelated to cookies but that created such a back-and-forth, was the good
old Web Forms ViewState . This was a hidden field sent with every request. That field could
become very large when left unchecked.
Nowadays, with high-speed internet, it is easy to forget about those issues, but they can
significantly impact the user experience of someone on a slow network.
When the server decides to respond to the request, it returns a header and an optional body,
following the same principles as the request. The first line indicates the request’s status: whether it
was successful. In our case, the status code was 200 , which indicates success. Each server can add
more or less information to its response. You can also customize the response with code.Here is the
response to the previous request:
HTTP/1.1 200 OK
Server: GitHub.com
Content-Type: text/html; charset=utf-8
Last-Modified: Wed, 03 Oct 2018 21:35:40 GMT
ETag: W/"5bb5362c-f677"
Access-Control-Allow-Origin: *
Expires: Fri, 07 Dec 2018 02:11:07 GMT
Cache-Control: max-age=600
Content-Encoding: gzip
X-GitHub-Request-Id: 32CE:1953:F1022C:1350142:5C09D460
Content-Length: 10055
Accept-Ranges: bytes
Date: Fri, 07 Dec 2018 02:42:05 GMT
Via: 1.1 varnish
Age: 35
Connection: keep-alive
X-Served-By: cache-ord1737-ORD
X-Cache: HIT
X-Cache-Hits: 2
X-Timer: S1544150525.288285,VS0,VE0
Vary: Accept-Encoding
X-Fastly-Request-ID: 98a36fb1b5642c8041b88ceace73f25caaf07746
<Response body truncated for brevity>
Now that the browser has received the server’s response, it renders the HTML webpage. Then, for
each resource, it sends another HTTP call to its URI and loads it. A resource is an external asset,
such as an image, a JavaScript file, a CSS file, or a font.After the response, the server is no longer
aware of the client; the communication has ended. It is essential to understand that to create a
pseudo-state between each request, we need to use an external mechanism. That mechanism could
be the session-state leveraging cookies, simply using cookies, or some other ASP.NET Core
mechanisms, or we could create a stateless application. I recommend going stateless whenever
possible. We write primarily stateless applications in the book.
Note
If you want to learn more about session and state management, I left a link in the Further
reading section at the end of the chapter.
As you can imagine, the backbone of the internet is its networking stack. The Hypertext Transfer
Protocol (HTTP) is the highest layer of that stack (layer 7). HTTP is an application layer built on
the Transmission Control Protocol (TCP). TCP (layer 4) is the transport layer, which defines
how data is moved over the network (for instance, the transmission of data, the amount of
transmitted data, and error checking). TCP uses the Internet Protocol (IP) layer to reach the
computer it tries to talk to. IP (layer 3) represents the network layer, which handles packet IP
addressing.A packet is a chunk of data that is transmitted over the wire. We could send a large file
directly from a source to a destination machine, but that is not practical, so the network stack breaks
down large items into smaller packets. For example, the source machine breaks a file into multiple
packets, sends them to the target machine, and then the target reassembles them back into the
source file. This process allows numerous senders to use the same wire instead of waiting for the first
transmission to be done. If a packet gets lost in transit, the source machine can also send only that
packet back to the target machine.Rest assured, you don’t need to understand every detail behind
networking to program web applications, but it is always good to know that HTTP uses TCP/IP and
chunks big payloads into smaller packets. Moreover, HTTP/1 limits the number of parallel requests a
browser can open simultaneously. This knowledge can help you optimize your apps. For example, a
high number of assets to load, their size, and the order in which they are sent to the browser can
increase the page load time, the perceived page load time, or the paint time.To conclude this subject
and not dig too deep into networking, HTTP/1 is older but foundational. HTTP/2 is more efficient
and supports streaming multiple assets using the same TCP connection. It also allows the server to
send assets to the client before it requests the resources, called a server push.If you find HTTP
interesting, HTTP/2 is an excellent place to start digging deeper, as well as the HTTP/3 proposed
standard that uses the QUIC transport protocol instead of HTTP (RFC 9114). ASP.NET Core 7.0+
supports HTTP/3, which is enabled by default in ASP.NET Core 8.0.Next, let’s quickly explore .NET.
Getting started with .NET
A bit of history: .NET Framework 1.0 was first released in 2002. .NET is a managed framework that
compiles your code into an Intermediate Language (IL) named Microsoft Intermediate
Language (MSIL). That IL code is then compiled into native code and executed by the Common
Language Runtime (CLR). The CLR is now known simply as the .NET runtime. After releasing
several versions of .NET Framework, Microsoft never delivered on the promise of an interoperable
stack. Moreover, many flaws were built into the core of .NET Framework, tying it to Windows.Mono,
an open-source project, was developed by the community to enable .NET code to run on non-
Windows OSes. Mono was used and supported by Xamarin, acquired by Microsoft in 2016. Mono
enabled .NET code to run on other OSes like Android and iOS. Later, Microsoft started to develop an
official cross-platform .NET SDK and runtime they named .NET Core.The .NET team did a
magnificent job building ASP.NET Core from the ground up, cutting out compatibility with the older
.NET Framework versions. That brought its share of problems at first, but .NET Standard alleviated
the interoperability issues between the old .NET and the new .NET.After years of improvements and
two major versions in parallel (Core and Framework), Microsoft reunified most .NET technologies
into .NET 5+ and the promise of a shared Base Class Library (BCL). With .NET 5, .NET Core
simply became .NET while ASP.NET Core remained ASP.NET Core. There is no .NET “Core” 4, to
avoid any potential confusion with .NET Framework 4.X.New major versions of .NET release every
year now. Even-number releases are Long-Term Support (LTS) releases with free support for 3
years, and odd-number releases (Current) have free support for only 18 months.The good thing
behind this book is that the architectural principles and design patterns covered should remain
relevant in the future and are not tightly coupled with the versions of .NET you are using. Minor
changes to the code samples should be enough to migrate your knowledge and code to new
versions.Next, let’s cover some key information about the .NET ecosystem.
.NET SDK versus runtime
You can install different binaries grouped under SDKs and runtimes. The SDK allows you to build
and run .NET programs, while the runtime only allows you to run .NET programs.As a developer,
you want to install the SDK on your deployment environment. On the server, you want to install the
runtime. The runtime is lighter, while the SDK contains more tools, including the runtime.
.NET 5+ versus .NET Standard
When building .NET projects, there are multiple types of projects, but basically, we can separate
them into two categories:
Applications
Libraries
Applications target a version of .NET, such as net5.0 and net6.0 . Examples of that would be an
ASP.NET application or a console application.Libraries are bundles of code compiled together, often
distributed as a NuGet package. .NET Standard class library projects allow sharing code between
.NET 5+, and .NET Framework projects. .NET Standard came into play to bridge the compatibility
gap between .NET Core and .NET Framework, which eased the transition. Things were not easy
when .NET Core 1.0 first came out.With .NET 5 unifying all the platforms and becoming the future of
the unified .NET ecosystem, .NET Standard is no longer needed. Moreover, app and library authors
should target the base Target Framework Moniker (TFM), for example, net8.0 . You can also
target netstandard2.0 or netstandard2.1 when needed, for example, to share code with .NET
Framework. Microsoft also introduced OS-specific TFMs with .NET 5+, allowing code to use OS-
specific APIs like net8.0-android and net8.0-tvos . You can also target multiple TFMs when
needed.
Note
I’m sure we will see .NET Standard libraries stick around for a while. All projects will not
just migrate from .NET Framework to .NET 5+ magically, and people will want to continue
sharing code between the two.
The next versions of .NET are built over .NET 5+, while .NET Framework 4.X will stay where it is
today, receiving only security patches and minor updates. For example, .NET 8 is built over .NET 7,
iterating over .NET 6 and 5.Next, let’s look at some tools and code editors.
Visual Studio Code versus Visual Studio versus the command-line interface
How can one of these projects be created? .NET Core comes with the dotnet command-line
interface (CLI), which exposes multiple commands, including new . Running the dotnet new
command in a terminal generates a new project.To create an empty class library, we can run the
following commands:
md MyProject
cd MyProject
dotnet new classlib
That would generate an empty class library in the newly created MyProject directory.The -h option
helps discover available commands and their options. For example, you can use dotnet -h to find
the available SDK commands or dotnet new -h to find out about options and available templates.It
is fantastic that .NET now has the dotnet CLI. The CLI enables us to automate our workflows in
continuous integration (CI) pipelines while developing locally or through any other process.The
CLI also makes it easier to write documentation that anyone can follow; writing a few commands in a
terminal is way easier and faster than installing programs like Visual Studio and emulators.Visual
Studio Code is my favourite text editor. I don’t use it much for .NET coding, but I still do to
reorganize projects, when it’s CLI time, or for any other task that is easier to complete using a text
editor, such as writing documentation using Markdown, writing JavaScript or TypeScript, or
managing JSON, YAML, or XML files. To create a C# project, a Visual Studio solution, or to add a
NuGet package using Visual Studio Code, open a terminal and use the CLI.As for Visual Studio, my
favourite C# IDE, it uses the CLI under the hood to create the same projects, making it consistent
between tools and just adding a user interface on top of the dotnet new CLI command.You can
create and install additional dotnet new project templates in the CLI or even create global tools. You
can also use another code editor or IDE if you prefer. Those topics are beyond the scope of this book.
An overview of project templates
Here is an example of the templates that are installed ( dotnet new --list ):
Figure 1.1: Project templates
A study of all the templates is beyond the scope of this book, but I’d like to visit the few that are
worth mentioning, some of which we will use later:
dotnet new console creates a console application
dotnet new classlib creates a class library
dotnet new xunit creates an xUnit test project
dotnet new web creates an empty web project
dotnet new mvc scaffolds an MVC application
dotnet new webapi scaffolds a web API application
Running and building your program
If you are using Visual Studio, you can always hit the play button, or F5, and run your app. If you are
using the CLI, you can use one of the following commands (and more). Each of them also offers
different options to control their behaviour. Add the -h flag with any command to get help on that
command, such as dotnet build -h :
Command Description
dotnet restore Restore the dependencies (a.k.a. NuGet packages) based on the .csproj or
.sln file present in the current dictionary.
dotnet build Build the application based on the .csproj or .sln file present in the current
dictionary. It implicitly runs the restore command first.
dotnet run Run the current application based on the .csproj file present in the current
dictionary. It implicitly runs the build and restore commands first.
dotnet watch run Watch for file changes. When a file has changed, the CLI updates the code from
that file using the hot-reload feature. When that is impossible, it rebuilds the
application and then reruns it (equivalent to executing the run command
again). If it is a web application, the page should refresh automatically.
dotnet test Run the tests based on the .csproj or .sln file present in the current directory.
It implicitly runs the build and restore commands first. We cover testing in
the next chapter.
dotnet watch test Watch for file changes. When a file has changed, the CLI reruns the tests
(equivalent to executing the test command again).
dotnet publish Publish the current application, based on the .csproj or .sln file present in
the current directory, to a directory or remote location, such as a hosting
provider. It implicitly runs the build and restore commands first.
dotnet pack Create a NuGet package based on the .csproj or .sln file present in the
current directory. It implicitly runs the build and restore commands first.
You don’t need a .nuspec file.
dotnet clean Clean the build(s) output of a project or solution based on the .csproj or .sln
file present in the current directory.
Technical requirements
Throughout the book, we will explore and write code. I recommend installing Visual Studio, Visual
Studio Code, or both to help with that. I use Visual Studio and Visual Studio Code. Other alternatives
are Visual Studio for Mac, Riders, or any other text editor you choose.Unless you install Visual
Studio, which comes with the .NET SDK, you may need to install it. The SDK comes with the CLI we
explored earlier and the build tools for running and testing your programs. Look at the README.md
file in the GitHub repository for more information and links to those resources.The source code of all
chapters is available for download on GitHub at the following address: https://adpg.link/net6.
Summary
This chapter looked at design patterns, anti-patterns, and code smells. We also explored a few of
them. We then moved on to a recap of a typical web application’s request/response cycle.We
continued by exploring .NET essentials, such as SDK versus runtime and app targets versus .NET
Standard. We then dug a little more into the .NET CLI, where I laid down a list of essential
commands, including dotnet build and dotnet watch run . We also covered how to create new
projects. This has set us up to explore the different possibilities we have when building our .NET
applications.In the next two chapters, we explore automated testing and architectural principles.
These are foundational chapters for building robust, flexible, and maintainable applications.
Questions
Let’s take a look at a few practice questions:
1. Can we add a body to a GET request?
2. Why are long methods a code smell?
3. Is it true that .NET Standard should be your default target when creating libraries?
4. What is a code smell?
Further reading
Here are some links to consolidate what has been learned in the chapter:
Overview of how .NET is versioned: https://adpg.link/n52L
.NET CLI overview: https://adpg.link/Lzx3
Custom templates for dotnet new : https://adpg.link/74i2
Session and state management in ASP.NET Core: https://adpg.link/Xzgf
Random documents with unrelated
content Scribd suggests to you:
—Poor man! zeide zij, toen Giuseppe vertrokken was. Ja, ik heb hem
maar van tante overgenomen. Hij had het zoo druk in het palazzo
Belloni. Hij heeft hier heel weinig te doen, en hij heeft een jongen
hofmeester onder zich. Het personeel moest toch worden uitgebreid.
Hij heeft hier een prettigen ouden dag: poor old dear Giuseppe ...
Bob, nu heb je je niet verkleed!
—Goed kind! dacht Cornélie, terwijl zij allen opstonden en Urania
haar broêr als een bedorven jongen heel zachtjes verweet, dat hij
met zijn kuiten aan tafel kwam.
XXXV.
Zij waren in de groote sombere eetzaal, met de bijna zwarte arazzi,
met het bijna zwarte plafond in caissons, met al het bijna zwarte
eiken beeldhouwwerk; met de zwarte monumentale schouw; er
boven, in zwart marmer, het familiewapen. Het kaarsenlicht van
twee groote zilveren luchters op tafel gaf alleen wat schijn over het
damast en kristal, maar verder bleef de te groote zaal in een
sombere duisternis van schaduw, in de hoeken opgehoopt met
massa's dikke schaduw, dunnere schaduw van het plafond wazende
af, als eene vervluchtiging van donker fluweel, dat boven den
kaarsenschijn in atomen rondzweefde. De antieke oudheid van San
Stefano drukte hier zwaar neêr als een ontzag, tegelijk met een
melancholie van zwart zwijgen en zwarten hoogmoed. Hier klonken
de woorden gedempt. Dit was nog geheel gebleven als het altijd
geweest was, dit was als iets heiligs van hunne voorname traditie,
en waaraan Urania niets zoû durven veranderen, als dorst zij er bijna
niet spreken en eten. Men wachtte een oogenblik, toen een dubbele
deur werd geopend. En als een schim trad binnen een groote oude
grijze man, die zijn arm gestoken had door den arm van den
geestelijke naast hem. De oude prins Ercole kwam heel langzaam en
waardig nader, terwijl de kapelaan zijn tred regelde naar die
langzame waardigheid. Hij droeg een lange zwarte jas van een
ouden ruimen snit, die in plooien om hem hing met iets van een
tabbaard, en op zijn glinsterend grijze haren, even golvend in den
nek, een zwart fluweelen kalot. En men naderde hem met heel veel
eerbied. De marchesa eerst, toen Urania, die hij heel langzaam—als
wijdde hij haar—een kus gaf op het voorhoofd; toen naderde hem
Gilio en kuste zijn vader onderdanig de hand. De grijsaard knikte
den jongen Hope toe, die boog en wendde zijn blik naar Cornélie.
Urania stelde haar voor. En als verleende hij een audientie, sprak de
oude prins haar enkele minzame woorden toe en vroeg haar of Italië
haar beviel. Toen Cornélie geantwoord had, ging prins Ercole zitten
en gaf zijn kalot aan Giuseppe, die haar diep buigend aannam.
Daarop zetten zich allen: de marchesa met den kapelaan over prins
Ercole, die tusschen Cornélie en Urania zat, Gilio naast Cornélie, Bob
Hope naast zijne zuster.
—Mijn kuiten zijn niet te zien, fluisterde hij zijn zuster toe.
—Cht! zeide Urania.
Giuseppe, herlevende in zijn oude waardigheid, vulde aan een
dressoir, plechtstatig, de borden met soep. Hij vond zich hier in zijn
element terug; hij was zichtbaar Urania dankbaar; hij had een trek
van voornamen zielevrede en zag er in zijn rok uit als een oude
diplomaat. Hij amuzeerde Cornélie, die dacht aan Belloni, als hij
ongeduldig werd, omdat de gasten niet kwamen, als hij uitvaarde
tegen de jonge blanc-becs van kellners, die de marchesa voor de
goedkoopte in dienst nam. Toen twee lakeien de soep hadden
rondgediend, stond de kapelaan op, en zei het Benedicite. Er werd
nog geen woord gesproken. Men at de soep in stilte, terwijl de drie
bedienden onbewegelijk stonden. De lepels tikkelden tegen het
porcelein en de marchesa smakte. De luchters trillerden nu en dan
en van het plafond viel drukkender de schaduw, als vervluchtiging
van fluweel Toen wendde prins Ercole zich tot de marchesa. En
beurtelings wendde hij zich tot iedereen met een vriendelijk
neêrbuigende waardigheid, in het Fransch, in het Italiaansch. Het
gesprek werd iets algemeener, maar de oude prins bleef het leiden.
En hij was heel vriendelijk tegen Urania, merkte Cornélie op.... Maar
Cornélie herinnerde zich Gilio's woorden: papa heeft bijna een
beroerte gehad, omdat de oude Hope op Urania's bruidschat
beknibbelde. Tien millioen? Vijf millioen? Geen drie millioen! Dollars?
Lires!! En de oude prins scheen haar eensklaps toe als het vergrijsd
egoïsme van San Stefano's glorie en adelhoogmoed, scheen haar toe
de levende schim dier opschaduwing van verleden, zooals zij het
dien middag gevoeld had, starende met Urania in het diepe, blauwe
meer: de veel eischende schim; de millioenen eischende schim, de
nieuwe levensvatbaarheid eischende schim; spectrale paraziet, die
zijn gedeprecieerde symbolen verkocht had aan de ijdelheid van een
nieuw koopmanshuis, maar in zijn voornaamheid niet had opgekund
tegen de slimheid van den koopman. Hun prinsesse- en
hertoginnetitel voor nog geen drie millioen lire's! Papa had bijna een
beroerte gehad ... had Gilio gezegd. En Cornélie, in de afgemeten
minzame stijfte van het door prins Ercole geleide gesprek, zag van
den ouden prins-hertog,—zeventig jaar—, naar den jongen frisschen
Far-Wester—achttien, en zag van hem naar prins Gilio: de hoop van
het oude geslacht, hun eenige hoop. Hier, in de somberheid van die
eetzaal, waar hij zich verveelde, bovendien nog uit zijn humeur, zag
zij hem klein, nietig, dunnetjes, een schraal, gedistingeerd viveurtje;
zijn karbonkeloogen, die vroolijk, pervers geestig schitteren konden,
zagen nu mat onder de vallende oogleden uit op zijn bord, waarin hij
lusteloos pikte.
Zij kreeg medelijden met hem, en zij dacht aan de gouden
bruidskamer.... Zij minachtte hem een beetje. Zij beschouwde hem
niet als een man, hij kon niet wat hij wilde: zij beschouwde hem
meer als een stouten jongen. En hij moest jaloersch zijn van Bob,
dacht zij: van zijn frisch bloed, dat tintelde onder zijn wangen, van
zijn breede schouders en zijn breede borst. Maar toch, hij
amuzeerde haar. Aardig kon hij zijn, vroolijk en geestig, en vlug, als
hij was opgewekt, vlug in zijn woorden, in zijn geest. Zij hield wel
van hem. En dan zijn goed hart. De armband en vooral de duizend
lire. Zij dacht er steeds aan met aandoening; hoe was zij aangedaan
geweest, tijdens die wandeling, voorbij de post heen en weêr;
aangedaan om zijn brief en om zijn royale hulp. Hij had geen fond,
hij was haar geen man: maar hij was geestig en had een zeer goed
hart. Zij hield van hem, als van een vriend en prettig kameraad. Wat
was hij neêrgeslagen en uit zijn humeur. Maar waarom waagde hij
zich dan ook aan die dwaze attaques...!
Zij richtte nu en dan het woord tot hem, maar zij vermocht hem niet
op te wekken. Trouwens, het gesprek sleepte stijf en minzaam voort,
steeds geleid door prins Ercole. Het diner liep ten einde en prins
Ercole rees op. Uit de handen van Giuseppe ontving hij zijn kalot,
allen namen afscheid van hem, de deuren werden geopend en, aan
den arm van zijn kapelaan, trok prins Ercole zich terug. Gilio, boos,
verdween. De marchesa, nog rillende voor Cornélie, verdween en
wees, in haar japon, de gettatura naar haar toe. En Urania nam
Cornélie en Bob meê terug naar haar salon. Zij herademden alle
drie. Zij spraken vrij uit, in het Engelsch nu: de jongen zei wanhopig,
dat hij niet genoeg at, dat hij niet dorst eten tot zijn honger gestild
was, en Cornélie lachte, hem prettig vindend, om zijn gezondheid,
terwijl Urania beschuitjes voor hem zocht en een stuk cake, van de
tea nog over, en hem brood en vleesch beloofde, voor zij naar bed
zouden gaan. En zij ontspanden hun gemoed na het plechtstatige
middagmaal. Urania zei, dat zij den ouden prins anders nooit zagen,
dan aan het diner, maar zij zocht hem 's morgens altijd op, bleef een
uurtje met hem spreken of speelde met hem schaak. Anders speelde
hij schaak met den kapelaan. Zij had het druk, Urania. De
reorganizatie der huishouding, indertijd overgelaten aan een arme
bloedverwante, die nu in Rome van een pensioen leefde, kostte haar
veel tijd: zij besprak in de morgenuren van détails met prins Ercole,
die, niettegenstaande zijne afzondering, van alles op de hoogte was.
Dan had zij de beraadslagingen met haar Romeinschen architect
over de restauraties van het kasteel: zij hadden soms plaats in het
kabinet van den ouden prins. Dan liet zij in de stad een groot
gesticht bouwen, een Albergo dei Poveri, waarvoor de oude Hope
haar afzonderlijk doteerde: gesticht voor oude mannen en vrouwen.
Toen zij voor het eerst te San Stefano kwam, hadden haar getroffen
de vervallen, in elkaâr stortende huizen en huisjes der arme wijken,
melaatsch en schurftig van vuil, opgegeten door hun eigen gebrek,
waar een geheele bevolking planteleefde als paddestoelen. Zij liet nu
bouwen het gesticht voor de ouden, zij bezorgde op het domein
werk aan de gezonden en jongen, zij bemoeide zich met de
verwaarloosde kinderen, zij had een nieuwe school opgericht. Zij
sprak over dit alles doodeenvoudig, de cake snijdende voor haar
broêr Bob, die zich te goed deed na de etiquette van het diner. Zij
noodigde Cornélie 's morgens eens meê te gaan naar het werk van
de Albergo, naar de nieuwe school, onder twee geestelijken van
Rome, haar door de monsignori aanbevolen.—
Door de spitsboogramen schemerde in de diepte de stad, en onder
den zoelen, met starren bezaaiden, zomernacht, rees de silhouet van
den Dom omhoog. En Cornélie dacht: het is niet alleen voor schim
en schaduw, dat zij hier is gekomen, de rijke Amerikaansche, die
adel zoo lief vond—"so nice"—het kind, dat staaltjes verzamelde van
de baljaponnen der koningin—album, dat zij nu als "zwarte" prinses
verborg—het meisje, dat met haar licht laken tailorpak trippelde
door het Forum, en niet begreep noch oud Rome, noch nieuw
dagende toekomst....
En nu Cornélie door de stille zware nacht van het kasteel van San
Stefano ging naar haar eigen kamer, dacht zij: ik schrijf, maar zij
doet. Ik droom en ik denk, maar zij, zij leert de kinderen, al is het
met een priester; zij voedt en huisvest oude mannen en vrouwen.
Toen, in haar kamer, uitziende naar het meer onder den zomernacht,
bepoeierd met sterren, dacht zij na, dat zij ook gaarne rijk zoû willen
zijn en een groot arbeidsveld zoû willen hebben. Want nu had zij
geen veld, nu had zij geen geld, en nu ... nu verlangde zij alleen
naar Duco, en moest hij haar niet te lang alleen laten, op dit kasteel,
in al deze sombere grootheid, die op haar drukte als met eeuwen.
XXXVI.
Den volgenden morgen leidde Urania's kamenier Cornélie door een
warreling van galerijen naar buiten, waar men ontbijten zoû, toen zij
op de trap Gilio ontmoette. De kamenier keerde terug.
—Ik heb nog altijd geleide noodig om mijn weg te vinden, lachte
Cornélie.
Hij bromde wat.
—Hoe heeft u geslapen, prins?
Hij bromde iets.
—Zeg eens, prins, dat booze humeur moet veranderen. Hoort u? Het
moet. Ik wil het. Ik wil vandaag geen bouderie meer zien, en hoop,
dat u zoo spoedig mogelijk uw vroolijken, geestigen toon van
gesprek weêr aanneemt, dien ik in u apprecieer.
Hij mopperde iets.
—Adieu, prins, zei Cornélie kort.
En zij keerde op haar weg terug.
—Waar gaat u heen? vroeg hij.
—Naar mijn kamer. Ik zal op mijn kamer ontbijten.
—Maar waarom?
—Omdat u me niet bevalt als gastheer.
—Ik niet?
—Neen, u niet. Gisteren beleedigt u me, ik verdedig mij, u blijft grof,
ik ben dadelijk weêr lief als altijd, geef u een hand en zelfs een
zoen. Aan het diner boudeert u me op een alleronbeleefdste manier.
U gaat naar uw kamer zonder me goeden nacht te wenschen. U
komt me van morgen tegen zonder me te begroeten. U bromt,
boudeert en moppert als een stout kind. Uw oogen staan nijdig, u
ziet geel van galligheid. Bepaald, u ziet er slecht uit. Het flatteert u
niets. U is alleronaangenaamst, grof, onbeleefd, en klein. Ik heb
geen lust met u te ontbijten in zoo een stemming.... En ik ga naar
mijn kamer.
—Neen, smeekte hij.
—Jawel.
—Neen, neen.
—Nu wees dan anders. Doe u geweld aan, denk niet meer aan uw
nederlaag, en wees lief tegen me. U doet maar als de beleedigde
partij, terwijl ik de beleedigde ben. Maar ik kan niet boudeeren, en ik
ben niet klein. Ik kan niet klein doen. Ik vergeef u, vergeef mij ook.
Zeg iets liefs, zeg iets aardigs.
—Ik ben dol op u.
—Ik merk er niets van. Als u dol op me is, wees dan vriendelijk,
beleefd, vroolijk en geestig. Ik eisch het van u als van mijn gastheer.
—Ik zal niet meer boudeeren ... maar ik hoû zooveel van u! En u
heeft me geslagen.
—Vergeeft u nooit die zelfverdediging?
—Neen, nooit!
—Adieu, dan.
Zij keerde zich om.
—Neen, neen, ga niet terug. Ga meê naar de pergola, waar wij
ontbijten. Ik vraag u vergiffenis. Ik maak u mijn excuzes. Ik zal niet
grof meer zijn en niet klein. U, u is niet klein. U is de bizonderste
vrouw, die ik ken. Ik aanbid u.
—Aanbid dan in stilte, en amuzeer me.
Zijn oogen, zijn zwarte karbonkeloogen, begonnen weêr op te leven,
op te lachen; zijn gelaat ontrimpelde en klaarde op.
—Ik ben te verdrietig om amuzant te zijn.
—Ik geloof er niets van.
—Heusch, ik heb verdriet, ik lijd....
—Arme prins!
—U gelooft mij maar niet. U neemt me nooit in ernst aan. Ik moet
maar uw clown, uw paljas zijn. En ik heb u lief, en mag niets hopen?
Zeg, mag ik nooit iets hopen?
—Niet veel.
—U is onverbiddelijk, en zoo streng.
—Ik moet wel streng tegen u zijn, u is net een stoute jongen.... O,
daar zie ik de pergola. Dus, u belooft me beterschap?
—Ik zal zoet zijn.
—En amuzant.
Hij zuchtte.
—Povero Gilio! zuchtte hij. Arme paljas!
Zij lachte. In de pergola waren Urania en Bob Hope. De pergola,
begroeid met wijngaard en een roze bruidstraan, die met roze
bloementrossen neêrhing, verhief een rij van marmeren karyatiden
en hermen—nimfen, saters en faunen—wier bovenlijven eindigden in
slank voetstuk van sculptuur en die met opgeheven handen het
vlakke blad- en bloemdak steunden; terwijl in het midden een open
rotonde was als een open tempel, de cirkelbalustrade ook door
karyatiden verheven en waar een antieke sarkofaag tot cisterna was
vermetseld. In de pergola was een tafel gedekt voor het ontbijt;
men ontbeet hier zonder den ouden prins Ercole, ook de marchesa
ontbeet op haar kamer. Het was acht uur, een morgenfrischheid
ademde nog op uit het meer, een waas van blauw fluweel donsde
over de heuvelen, waartusschen als in zacht gebogen cannelures het
meer verzonk als een ovalen beker.
—O, wat is het hier mooi! riep Cornélie verrukt.
Het ontbijt was een zonnig en vroolijk maal, na het zwartsombere
diner van gisteren. Urania was vol levendigheid over haar Albergo,
die zij straks met Cornélie zoû bezoeken, Gilio vond zijne
beminnelijkheid terug en Bob at goed. En toen Bob daarna ging
fietsen, ging Gilio zelfs met de dames meê naar de stad. Zij reden
stapvoets in een landauer den slotweg af. De zon werd warmer en
het oude stadje blankte op, roomwit en witgrijs van huizen als
steenen spiegels, waarin de zon kaatste; de pleintjes als putten,
waarin de zon gloed goot. Voor het werk van de albergo hield de
koetsier stil, stegen zij uit en de aannemer kwam plichtplegerig
nader, de zweetende metselaars zagen uit naar den prins en de
prinses. Het was smoorheet. Gilio veegde zich telkens het voorhoofd
af, en school achter de parasol van Cornélie. Maar Urania was éen
levendigheid en belangstelling, vlug en energisch in haar wit piqué
pakje, met haar witten matelot onder haar witte parasol, tripte zij
over balken langs stapelingen van baksteen en cement en
kalkbakken met haar aannemer voort, liet zich verklaren en gaf raad,
was het niet altijd eens, en trok een wijs gezicht; zeide, dat die en
die afmetingen haar tegenvielen, geloofde niet wat de aannemer
haar verzekerde, dat naarmate het gebouw vorderde, de afmetingen
haar zouden meêvallen, schudde haar hoofd, drukte dìt op het hart,
drukte dàt op het hart, alles in een vlug, niet geheel correct, en
hakkelig Italiaansch, dat zij kauwde tusschen hare tanden. Maar
Cornélie vond haar lief, vond haar aardig, Cornélie vond haar de
prinses di Forte-Braccio. Er was geen twijfel aan. Terwijl Gilio, bang
zijn licht flanellen pak en gele schoenen te bezoedelen aan de kalk,
in de schaduw van haar parasol bleef, puffende van de warmte,
zonder belang, was zijn vrouw onvermoeid, dacht zij niet, dat haar
witte rok een vuilen rand kreeg, en sprak zij met den aannemer met
een zekerheid, levendig maar waardig, om eerbied voor te hebben.
Waar had dat kind dat geleerd? Waar had zij haar assimilatie-
vermogen vandaan? Waar vandaan had zij die liefde voor San
Stefano, die liefde voor zijn armen? Hoe had dat Amerikaansche
meisje dat talent verkregen om hare hooge en nieuwe pozitie zoo
goed te bekleeden? Admirabile!—vond Gilio haar en fluisterde het
Cornélie in. Hij was niet blind voor hare kwaliteiten. Hij vond Urania
prachtig, uitstekend; ze verbaasde hem altijd. Geen Italiaansche
vrouw van zijn kringen zoû zoo geweest zijn. En ze hielden van haar.
De bedienden van het kasteel hielden van haar, Giuseppe zoû voor
haar door het vuur gaan, die aannemer bewonderde haar, de
metselaars keken haar met eerbied na, omdat zij zoo knap was, en
er zooveel van wist en zoo goed was voor hen en hun misère.
Admirabile! zei Gilio. Maar hij pufte. Hij wist niets van steenen,
balken en afmetingen en begreep niet, waar Urania dien technischen
blik vandaan had. Zij was onvermoeid. Zij liep het heele werk door,
terwijl hij smeekend naar Cornélie opzag. En eindelijk, in het
Engelsch, bad hij zijn vrouw er nu in godsnaam meê uit te scheiden.
Zij stegen in, de aannemer groette, de werklui groetten met iets van
dankbaarheid en aanhankelijkheid. En ze reden naar den Dom, dien
Cornélie wilde bezichtigen, en waar Gilio, terwijl Urania haar
vriendelijk rondleidde, genade vroeg aan zijn dames, en op de
trappen van het altaar ging zitten, de armen hangende over de
knieën, om te bekoelen.
XXXII.
Er waren zeven dagen verloopen en Duco was aangekomen. Het
was na het plechtige diner in de sombere eetzaal, waar Duco was
voorgesteld aan prins Ercole, en het was een zomeravond als een
droom, toen Cornélie en Duco naar buiten gingen. Het kasteel lag al
in zware rust, maar Cornélie had zich door Giuseppe een sleutel
laten geven. En zij gingen naar buiten, naar de pergola. De starren
poeierden als een blond licht over den nachthemel heen, en aan de
toppen der heuvels kroonde de maan en trilde even terug in de
mystieke diepte van het meer. Een adem van slapende rozen walmde
uit den bloementuin aan de andere zijde der pergola, en beneden, in
de dakvlakkende stad, stond aan zijn maanbelicht plein de Dom zijn
reuzensilhouet uit tegen de starren. En een slapen was overal, over
het meer, over de stad en achter de vensters van het kasteel; de
karyatiden en hermen—de saters en nimfen—torsten slapend het
looverdak van de pergola, als in een betooverde houding van
dienaren der Slaapster. Een krekel knerpte, maar zweeg stil zoodra
zij naderden, Duco en Cornélie. En zij zetten zich op een antieke
bank, en zij sloeg om zijn lichaam haar armen en drukte zich tegen
hem aan.
—Een week! fluisterde zij. Een volle week, dat ik je niet gezien heb,
Duco, mijn lieveling! Ik kan niet zoo lang zonder je. Bij alles wat ik
dacht en zag, en bewonderde, dacht ik aan jou, hoe mooi je het hier
zoû vinden. Je bent hier wel eens geweest, als toerist. O, dat is niet
het zelfde. Het is hier juist zoo mooi om te blijven, om niet door te
loopen, maar om te blijven. Dat meer, die Dom, die heuvels! Die
zalen binnen. Verwaarloosd maar zoo mooi. De drie hoven zijn
vervallen, de fonteinen brokkelen in elkaâr Maar de stijl van de atrio,
de somberheid van de eetzaal, de poëzie van deze pergola ... Duco,
is die pergola niet als een antieke ode? We hebben samen wel eens
Horatius gelezen, jij vertaalde me de verzen zoo mooi, je
improvizeerde zoo heerlijk! Wat ben je toch knap, je weet zoo veel,
je voelt zoo mooi. Ik hoû van je oogen, van je stem, en van je
heelemaal, van allemaal wat jou is ... ik kan het niet zeggen, Duco.
Ik heb mij langzamerhand gewonnen gegeven aan elk woord van je,
aan ieder gevoel van je, aan je liefde voor Rome, aan je liefde voor
muzea, aan de manier, waarop je die luchten ziet, die je op je
aquarellen wascht. Je bent zoo heerlijk kalm, bijna als dit meer. O,
lach niet, weer me niet af: ik heb je in geen week gezien, ik heb
behoefte zoo eens tegen je te spreken. Is het overdreven? Ik voel
hier ook niet gewoon, er is iets in die lucht, in dat licht, dat me zoo
laat spreken. Het is zoo mooi, dat ik bijna niet gelooven kan, dat het
gewoon leven, gewone realiteit is.... Herinner je te Sorrento op het
terras van het hôtel, toen we over de zee uitkeken, over die parelen
zee, met Napels zoo wit ver af, toen heb ik zoo gevoeld, maar toen
dorst ik zoo niet spreken: het was 's morgens, er waren menschen
om ons heen, die wij wel niet zagen, maar die ons zagen en die ik
om mij heen vermoedde: maar nu zijn wij alleen, en nu wil ik het je
zeggen, in je armen, aan je borst: ik ben zoo gelukkig! Ik hoû zoo
van jou! Ik voel mijn ziel, al mijn mooiste voor jou! Je lacht, maar je
gelooft me niet. Toch? Geloof je me?
—Ja, ik geloof je, ik lach niet om je, ik lach zoo maar.... Ja, het is
hier mooi.... Ik ook, ik voel mij zoo gelukkig. Ik ben zoo gelukkig om
jou en om mijn kunst. Je hebt me werken geleerd, je hebt mij
opgewekt uit mijn droomen! Ik ben zoo gelukkig om de Banieren: ik
heb brieven uit Londen: ik zal je ze morgen laten lezen. Ik heb alles
aan jou te danken. Het is bijna niet te gelooven, dat dit gewoon
leven is. Ik heb het ook zoo stil gehad in Rome. Ik zag niemand, ik
werkte maar wat—maar niet veel; en ik at in de osteria alleen. De
twee Italianen, je weet wel, hadden, geloof ik, medelijden met me.
O, het was een vreeslijke week. Ik kan niet meer buiten je. Herinner
je je onze eerste wandelingen en gesprekken in Borghese, en op den
Palatijn? Wat waren we toen nog vreemd aan elkaâr, zoo niet
samengevoegd. Maar ik voelde het, geloof ik, dadelijk, dat het mooi
zoû worden tusschen ons....
Zij zweeg, en bleef aan zijn borst. De krekel knerpte weêr als met
een langen triller. Maar verder sliep alles....
—Tusschen ons.... herhaalde ze als in koorts, en ze omhelsde hem
geheel.
De geheele nacht sliep, en terwijl zij hun leven ademden in
elkanders armen, torsten boven hunne hoofden de betooverde
karyatiden—faunen en nimfen—slapende het bladerdak der pergola,
tusschen hen en de met starren bepoeierde lucht.
XXXVIII.
Gilio vond de villegiatura op San Stefano verschrikkelijk. Hij moest
iederen morgen om zes uur reeds klaar zijn om met prins Ercole,
Urania en de marchesa de mis bij te wonen, die de kapelaan in de
slotkapel bediende. Daarna wist hij met zijn tijd geen raad. Hij was
een paar malen gaan fietsen met Bob Hope, maar de jonge Far
Wester was hem te energisch, even als zijne zuster, Urania. Hij flirtte
en redetwistte wat met Cornélie, maar in stilte was hij nog steeds
beleedigd, en boos op zichzelven en op haar. Hij herinnerde zich
haar eerste komst op dien avond, in het Palazzo Ruspoli; toen zij zijn
rendez-vous met Urania was komen storen. En in de gouden camera
dei sposi was zij hem voor de tweede maal te sterk geweest! Hij
ziedde als hij er aan dacht, en hij haatte haar, en hij zwoer zijn
groote goden wraak te zullen nemen. Hij vloekte zijn eigen
weifelmoedigheid. Hij was te zwak om woest te dwingen en hij had
nooit behoeven te dwingen: hij was gewoon, dat men hem toegaf.
En van haar, die Hollandsche, moest hij hooren over zijn
temperament, dat niet beantwoordde aan het hare! Wat zat er in die
vrouw? Wat meende zij er meê? Hij was zoo weinig gewoon te
denken, hij was zoo een gedachteloos kind van de gemakkelijke
natuur van Italië, zoo gewoon zich te laten leven naar zijn gril en
impulsie, dat hij haar nauwlijks begreep,—ofschoon hij den zin van
haar woorden vermoedde,— nauwlijks begreep die
terughoudendheid. Waarom zoo tegenover hem, de vreemde vrouw
met hare nieuwe ideeën van den duivel; die zich niet stoorde aan de
wereld, die niets van huwelijk weten wilde, die met een schilder
leefde, als zijn maîtresse! Zij had geen godsdienst, en geen moraal—
hij wist van godsdienst en van moraal—zij was des duivels;
demonisch was zij: wist zij niet alles van de manoeuvres van tante
Lucia Belloni, en had tante Lucia hem niet dezer dagen
gewaarschuwd, dat zij gevaarlijk was, demonisch, des duivels! Zij
was een heks! Waarom wilde zij niet? Had hij niet gisteren nacht
door den cour haar silhouet zien gaan in den maneschijn, duidelijk
naast de figuur van Van der Staal, en had hij hen niet zien openen
de deur van het terras der pergola? En had hij niet éen uur, twee
uur, slapeloos gewacht, tot hij ze had zien keeren, sluitende de deur
weêr achter zich? En waarom had zij lief alleen hèm, dien schilder?
O, hij haatte hem met al de gloeiende haat van zijn ijverzucht, hij
haatte haar, om hare uitsluitendheid, om hare minachting, om al hun
scherts en flirt, als was hij een paljas, een clown! Wat vroeg hij? Een
gunst van liefde zooals zij aan haar minnaar toestond! Hij vroeg
niets ernstigs; geen eeden, geen levenslange banden: hij vroeg zoo
weinig: een enkel uur van liefde. Het was van geen belang: hij had
dat nooit van veel belang beschouwd. En zij, ze weigerde het hem.
Neen, hij begreep haar niet, maar wel begreep hij, dat zij hem
minachtte, en hij, hij haatte haar en hem. En toch was hij verliefd op
haar met al de woede van zijn weêrstreefde passie. In de verveling
dier villigiatura, waartoe zijn vrouw hem drong in haar nieuwe liefde
voor hun vervallen uilennest, was hem zijn haat en de gedachte aan
zijn wraak een bezigheid voor zijn leêge hersenen. Uiterlijk was hij
de zelfde weêr als vroeger, en flirtte hij met Cornélie, en zelfs meer
dan vroeger, om Van der Staal te plagen. En toen zijne nicht, de
gravin di Rosavilla, zijn "witte" nicht—hofdame der koningin—hen
voor enkele dagen kwam bezoeken, flirtte hij ook met haar, en
poogde hij de ijverzucht van Cornélie te wekken, wat hem maar niet
best gelukte, en troostte hij zich met de gravin. Zij stelde hem
schadeloos voor zijn teleurstelling. Zij was geen jonge vrouw meer,
maar zij had het koude, sculpturale Juno-type, een beetje dom: zij
had de Juno-oogen, die puilden: zij was een der toongeefsters aan
het Quirinaal en in de "witte" wereld, en haar galante reputatie was
algemeen bekend. Zij had met Gilio nooit een liaison gehad, die
langer duurde dan een uur. Zij had over de liefde eenvoudige ideeën,
met weinig nuance. Vroolijk pervers amuzeerde zij Gilio. En flirtende
in hoekjes, zijn voet op den hare, onder haar japon, vertelde Gilio
haar van Cornélie, van Duco en van het avontuur in hunne camera
dei sposi, en hij vroeg zijn nicht, of zij begreep? Neen, de gravin di
Rosavilla begreep ook niet zoo heel goed. Temperament? Ach ja,
misschien hield zij—questa Cornelia,—meer van blond of bruin: er
waren vrouwen, die deden keuze.... En Gilio lachte.... Het was zoo
eenvoudig, l'amore, er was niet veel over te praten.
Cornélie was blij, dat Gilio de gravin had. Zij interesseerde zich met
Duco, voor haar, Urania's, plannen; hij voerde gesprekken met den
architekt. En Duco was verontwaardigd, en gaf den raad niet zooveel
te verbouwen in die stijllooze restauratie-manier: het kostte hoopen
met geld, en het bedierf alles.
Urania was uit het veld geslagen, maar Duco ging voort, brak den
architect af, gaf den raad alleen bij te bouwen wat waarlijk stortte in
elkaâr, maar zooveel mogelijk te stutten, te steunen en te behouden.
En op een morgen verwaardigde zich prins Ercole met Duco, Urania
en Cornélie de lange zalen af te loopen. Met alleen te onderhouden
en geregeld—meende Duco—, met artistiek te schikken wat nu
zonder gedachte op elkaâr stond gepakt, was al zoo veel te doen.
De gordijnen? vroeg Urania. Laten, meende Duco: hoogstens nieuwe
venstergordijnen, maar het oude roode Venetiaansche damast.... O
laten, laten: het was zoo mooi: hier en daar, met veel zorg, kon het
worden versteld. Hij schrikte van Urania's idee: nieuwe gordijnen! En
de oude prins was verrukt, omdat de restauratie van San Stefano, op
die manier, duizenden minder zoû kosten en artistieker zoû zijn: hij
beschouwde het geld van zijne schoondochter als het zijne en had
het nog liever dan haarzelve. Hij was verrukt: hij nam Duco meê
naar zijn bibliotheek: hij toonde hem de oude missalen: de oude
familieboeken en documenten, charters en schenkingen: hij toonde
hem zijn munten en medailles. Het was alles verrommeld,
verwaarloosd, eerst uit geldgebrek en toen uit onverschilligheid
gekleinacht, maar nu wilde Urania, met geleerden uit Rome,
Florence, Bologna, het familie-muzeum reorganizeeren. De oude
prins voelde er wel voor, nu er weêr geld was. En de geleerden
kwamen, verbleven op het kasteel, en heele morgens was Duco met
hen bezig. Hij genoot. Hij leefde in zijne betoovering van verleden,
niet meer in antieken tijd, maar in de middeneeuwen en
Renaissance. De dagen waren te kort. En zijn liefde voor San
Stefano werd zóó, dat eens een archivaris hem aanzag voor den
jongen prins: den prins Virgilio. Aan het diner vertelde prins Ercole
de anecdote. En allen lachten, maar Gilio vond de grap eenvoudig
onbetaalbaar terwijl de archivaris, die meê aan tafel zat, niet wist
hoe hij zich klein zoû maken in verontschuldiging.
XXXIX.
Gilio had den raad van zijne nicht, de gravin di Rosavilla, opgevolgd.
Hij was dadelijk na den eten naar buiten geslopen, en hij liep de
pergola af tot de rotonde, waarin het maanlicht viel, als in een witte
schaal. Maar er was schaduw achter een paar karyatiden, en daar
verborg hij zich. Hij wachtte een uur lang. Maar de nacht sliep, de
karyatiden sliepen, roerloos staande en beurende het bladerdak. Hij
vloekte en sloop naar binnen. Hij liep op de teenen de corridors af
en luisterde aan de deur van Van der Staal. Hij hoorde niets, maar
misschien sliep hij...?
Maar Gilio sloop verder een anderen corridor door, en luisterde aan
de deur van Cornélie. Hij hield den adem in.... Jawel, er klonken
stemmen. Zij waren samen! Samen!! Hij krampte de vuisten ineen
en liep terug. Maar waarom wond hij zich op! Hij wist immers hunne
verhouding. Waarom zouden zij hier niet samen komen. En hij klopte
aan bij de gravin....
Den volgenden avond wachtte hij weêr bij de rotonde. Maar zij
kwamen niet. Maar na enkele avonden, terwijl hij zat te wachten,
zich verbijtend van ergernis, zag hij ze komen. Hij zag Duco de
terraspoort achter zich sluiten: het slot knarste van verre, roestig.
Langzaam zag hij ze aanloopen en naderen in het licht, vervagen in
de schaduw, weêr uit komen in den maneschijn. Zij zetten zich op de
marmeren bank.... Wat schenen zij gelukkig! Hij was jaloersch van
hun geluk; jaloersch vooral van hem. En wat was zij zacht en teeder,
zij, die hem, Gilio, maar goed genoeg vond voor amuzement, voor
haar flirt: een clown: zij, de demonische vrouw, was engelachtig met
wie zij lief had! Zij boog zich tot haar minnaar met een glimlachende
liefkoozing, met een ombuiging van haren arm, met een naderen
van hare lippen, met iets innig omstrikkends, met zoo een fluweelen
loomte van liefde, als hij niet vermoed had in haar, met haar kouden
flirtscherts tegen hem, Gilio. Zij leunde nu tegen Duco's arm, aan
zijn borst, haar gezicht tegen het zijne.... O, haar zoen, nu, hoe
zette hij Gilio in woede en vlam! Dat was niet meer hare ijskoude
zinnen-onverschilligheid tegenover hem, Gilio, in de camera dei
sposi! En hij kon zich niet langer inhouden: hij zoû hun dit oogenblik
van hun geluk ten minste verstoren. En trillend in zijn zenuwen,
kwam hij te voorschijn van achter de karyatide, en liep door de
rotonde hen tegemoet. Zij zagen hem niet dadelijk, verloren in
elkanders oogen.... Maar eensklaps schrikten zij, beiden tegelijk; de
omhelzing van hunne armen viel plotseling, zij stonden in éene
beweging op, zij zagen hem aankomen, hem klaarblijkelijk niet
dadelijk herkennende. Pas toen hij vlak bij was, herkenden zij hem,
en zagen, opgeschrikt, hem zwijgende aan, wat hij zeggen zoû. Hij
boog ironisch.
—Een heerlijke avond, niet waar? Het uitzicht is mooi, zoo in den
nacht, van de pergola af. U heeft gelijk hier eens te komen
profiteeren. Ik hoop, dat ik u niet stoor met mijn onverwacht
gezelschap!
Zijn trillende stem was zoo kwaadaardig twistzoekend, dat zij niet
konden twijfelen aan zijn hevige ontstemming.
—Zeker niet, prins! antwoordde Cornélie, zich herstellende. Hoewel
het mij verbaast, wat u hier doet, op dit uur.
—En wat doet u hier, op dit uur?
—Wat ik hier doe? Ik zit hier met Van der Staal....
—Op dit uur?
—Op dit uur! Wat meent u, prins, wat bedoelt u?
—Wat ik bedoel? Dat 's nachts de pergola gesloten is.
—Prins, zeide Duco; uw toon bevalt mij niet.
—En u bevalt mij heelemaal niet....
—Als u niet mijn gastheer was, gaf ik u een klap in uw gezicht....
Cornélie hield Duco's arm tegen: de prins vloekte en balde de
vuisten.
—Prins, sprak zij. Het is klaarblijkelijk, dat u een scène met ons
zoekt. Waarom? Wat heeft u er tegen, dat ik Van der Staal 's avonds
hier ontmoet. Ten eerste is onze verhouding geen geheim voor u. En
dan dunkt het mij onwaardig voor u ons hier te komen bespieden.
—Onwaardig? Onwaardig?—Hij was onmachtig zich meer te
beheerschen.—Onwaardig ben ik, en klein, en grof, en geen man, en
ik heb geen temperament, dat je aanstaat? Zijn temperament staat
je wel aan, niet waar! Ik heb je zoen hooren klinken. Duivelin!
Duivelin! Demon! Niemand heeft me zoo beleedigd als jij. Van
niemand heb ik mij al zooveel laten welgevallen. Ik laat het mij niet
langer! Jij, je hebt me geslagen, demon, duivelin! Hij, hij dreigt me
met een slag. Mijn geduld is ten einde. Ik kan het niet verdragen, in
mijn eigen huis, dat je mij weigert, wat je hem geeft.... Hij is niet je
man! Hij is niet je man! Ik kan evenveel recht hebben als hij, en
rekent hij uit, dat hij meer recht heeft dan ik, dan haàt ik hem!...
En hij vloog Duco aan, naar de keel, blind van woede. De aanval was
zoo onverwacht, dat Duco struikelde. Zij worstelden samen, beiden
razend. Al hunne verborgen antipathie sloeg uit als razernij. Zij
hoorden niet Cornélie's smeeken, zij sloegen elkaâr met de vuist, zij
omstrengelden elkanders beenen en armen, borst geperst aan borst.
Toen zag Cornélie iets flikkeren. In het licht zag zij, dat de prins een
mes trok. Maar zijn beweging zelve was een voordeel voor Duco, die
zijn pols als in ijzer vastgreep en hem dwong op den grond, de knie
stijf drukte op Gilio's borst en met de andere hand hem zijn keel
omklemde.
—Laat los! krijschte de prins.
—Laat dat mes los! krijschte Duco.
De prins, onwillig, hield vol.
—Laat los! krijschte hij nog eens.
—Laat dat mes los....
Het mes viel uit zijn vingers. Duco greep het en stond op.
—Sta op! zeide hij. Wij kunnen, wanneer u wil, dit gevecht op
minder primitieve manier morgen vervolgen. Niet meer met een
mes, maar met degen of pistool.
De prins was opgestaan. Hij hijgde, blauw.... Hij kwam tot
zichzelven.
—Neen, zei hij, langzaam. Ik wil niet duelleeren. Tenzij jij het wilt.
Maar ik wil niet. Ik ben overwonnen.... Er is in haar een demonische
kracht, die je altijd zoû laten winnen, welk spel wij ook speelden. Wij
hebben al geduelleerd. Deze strijd zegt mij meer dan een geregeld
duel. Alleen als jij het wenscht, heb ik er niets op tegen. Maar ik
weet nu zeker, dat je me zoû dooden. Zij beschermt je....
—Ik wensch geen duel, zei Duco.
—Laat ons dan dezen strijd als een duel beschouwen, en geef mij nu
een hand....
Duco strekte de hand. Gilio drukte die.
—Vergeef mij, zeide hij, neêrbuigend tot Cornélie; ik heb u
beleedigd....
—Neen, zeide zij. Ik vergeef u niet.
—Wij hebben elkaâr te vergeven. Ik vergeef u uw slag.
—Ik vergeef u niets. Ik vergeef u dezen avond nooit, niet uw
spionneeren, niet uw gebrek aan zelfbeheersching, niet uw recht,
dat u op mij, ongetrouwde vrouw, meent te kunnen laten gelden,
terwijl ik u geen recht geef, niet uw aanval, en niet uw mes.
—Wij zijn dus vijanden, voor altijd?
—Ja, voor altijd. Ik verlaat morgen uw huis....
—Ik heb verkeerd gehandeld, bekende hij nederig. Vergeef mij. Mijn
bloed is hevig.
—Ik heb u totnogtoe gekend als een heer....
—Ik ben ook nog een Italiaan.
—Ik vergeef u niet.
—Ik heb u wel eens bewezen, dat ik een goed vriend kon zijn.
—Het is geen oogenblik het mij te herinneren.
—Ik herinner u alles, wat u zachter voor mij zoû kunnen stemmen.
—Dat is alles te vergeefs.
—Dus vijanden?
—Ja. Laat ons naar binnen gaan. Ik verlaat morgen uw huis....
—Ik wil alle boete doen, die u mij oplegt.
—Ik leg niets op. Ik wil dit gesprek eindigen en ik wil naar huis.
—Ik zal u voorgaan....
Hij deed zoo. Zij liepen de pergola af. Hij opende zelve de
terraspoort en liet hen het eerst binnen.
Zij begaven zich zwijgend naar hunne kamers.
Het kasteel sliep in duister. De prins lichtte bij met een lucifer. Duco
was het eerst bij zijn vertrek.
—Ik zal u verder bijlichten, sprak de prins nederig.
Hij vergezelde nog, met een tweede lucifer, Cornélie tot haar deur.
Daar viel hij op zijn knieën.
—Vergeef mij, fluisterde hij met een snik in zijn keel.
—Neen, zeide zij.
En zonder meer sloot zij de deur achter zich. Hij bleef nog een
oogenblik zoo geknield. Toen stond hij langzaam op. Zijn hals deed
hem pijn. Zijn schouder voelde als ontwricht.
—Het is uit, mompelde hij. Ik ben overwonnen. Zij is nu sterker dan
ik, maar niet omdat zij een duivel is. Ik heb ze samen gezien.... Ik
heb hun omhelzing gezien. Ze is sterker, hij is sterker dan ik ... om
hun geluk ... Ik voel, dat zij, om hun geluk, altijd sterker zullen zijn,
dan ik....
Hij ging naar zijn kamer, die grensde aan Urania's slaapkamer. Een
snikken golfde op in zijn borst. Hij wierp zich, gekleed, snikkend op
zijn bed, zijn snikken inslikkend in den sluimerenden nacht, die door
het kasteel heen donsde. Toen stond hij op, en zag uit het raam. Hij
zag het meer. Hij zag de pergola, waar zij zoo even hadden
gevochten. De nacht sliep er, de karyatiden blankten er, slapende, uit
de schaduw op. En met den blik zocht hij de juiste plek van hun
strijd en zijn nederlaag. En bijgeloovig, aan hun geluk, meende hij,
dat er niet tegen te strijden zoû zijn, nooit.
Toen haalde hij de schouders op, als wierp hij zich een pak van den
rug.
—Fa niente! troostte hij zich. Domani megliore....
Hij meende er meê, dat hij morgen, zoo niet déze, overwinning, wel
een andere behalen zoû. En zijn oogen nog nat, sliep hij in als een
kind.
XL.
Urania snikte zenuwachtig in Cornélie's armen, toen zij de jonge
prinses zeide, dat zij dien morgen vertrok. Zij waren met Duco alleen
in Urania's eigen salon.
—Wat is er gebeurd? vroeg zij snikkende.
Cornélie vertelde haar den vorigen avond.
—Urania, zeide zij ernstig; ik weet het, ik ben coquet. Ik vond het
prettig met Gilio te praten; noem het flirten, als je wilt. Ik heb er
nooit een geheim van gemaakt, noch voor Duco, noch voor jou. Ik
beschouwde het als amuzement en niet meer. Misschien heb ik
verkeerd gedaan; ik heb je er vroeger al meê geërgerd. Ik heb je
beloofd het niet meer te doen, maar het schijnt sterker dan ik. Het
ligt in mijn natuur, en ik zal me er niet om verdedigen. Ik
beschouwde het als zoo weinig, als aardigheid en amuzement. Maar
misschien is het slecht. Vergeef je het mij? Ik ben zooveel van je
gaan houden: het zoû me leed doen, als je me niet vergaf....
—Verzoen je met Gilio en blijf nog....
—Onmogelijk, mijn lieve meid. Gilio heeft mij beleedigd, Gilio heeft
tegen Duco zijn mes getrokken, en ik vergeef hem die dubbele
beleediging nooit. Het is dus onmogelijk langer te blijven.
—Ik blijf zoo alleen! snikte zij. Ik ook, ik hoû veel van je, ik hoû van
jullie beiden. Is er geen middel.... Bob verlaat mij ook morgen. Ik
blijf heelemaal alleen. Wat heb ik hier. Niemand, die van mij houdt....
—Je houdt heel veel over, Urania. Je hebt een doel om voor te leven;
je kunt veel goed doen in je omgeving.... Je stelt belang in dit
kasteel, dat je eigen nu is.
—Het is alles zoo hol! snikte zij. Het geeft me niets. Ik heb behoefte
aan sympathie. Wie is er die van mij houdt? Ik heb geprobeerd van
Gilio te houden, en ik hoû ook wel van hem, maar hij, hij geeft niets
om mij. Niemand geeft hier om mij....
—Ik geloof, dat je armen van je houden. Je hebt een edel doel.
—Ik ben daar ook blij om, maar ik ben te jong, om alleen voor een
doel te leven. Ik heb verder niets. Niemand geeft iets om mij hier.
—Prins Ercole toch....
—Neen, hij minacht me. Wil ik je wat vertellen? Ik heb je vroeger
eens verteld, dat Gilio mij gezegd had ... dat er geen familie-
juweelen waren, dat alles was verkocht? Herinner je je wel? Nu, er
zijn familie-juweelen. Ik heb dat begrepen uit een gezegde van de
gravin di Rosavilla. Er zijn familie-juweelen. Maar prins Ercole
bewaart ze in de Banca di Roma. Zij minachten mij en ik ben
eenvoudig onwaardig ze te dragen. En voor mij doen ze alsof er
niets meer is. En het ergste is!... dat al hun kennissen, geheel hun
côterie weet, dat ze er zijn en bewaard worden in de Bank, en dat ze
allen prins Ercole gelijk geven. Mijn geld is hunner wel waardig,
maar ik niet hun oude juweelen, de juweelen van hun
grootmoeders!
—Het is een schande! zei Cornélie.
—Het is de waarheid! snikte zij. O, leg het bij; blijf hier nog, om
mij....
—Oordeel zelf, Urania: het is ons heusch niet mogelijk.
—Het is waar, gaf zij zuchtende toe.
—Het is alles mijn schuld.
—Neen, neen; Gilio is soms zoo hevig ...
—Maar zijn hevigheid, zijn drift en zijn jaloezie zijn mijn schuld. Ik
heb er spijt van, Urania, om jou. Vergeef mij. Kom mij in Rome
opzoeken, als je er komt. Vergeet mij niet, en schrijf, niet waar. Nu
moet ik mijn koffer pakken. Hoe laat gaat de trein?
—Tien uur vijf-en-twintig, zei Duco. Wij gaan samen.
—Kan ik afscheid nemen van prins Ercole? Laat belet voor mij
vragen.
—Wat zal je hem zeggen?
—Het allereerste, dat mij in den geest komt: dat een vriendin in
Rome erg ziek is, dat ik er heen ga en dat Van der Staal mij
begeleidt, omdat ik zenuwachtig ben. Het kan me niets schelen wat
prins Ercole denkt.
—Cornélie....
—Lieveling, ik heb heusch geen tijd meer. Omhels me, vergeef me.
En vergeet mij niet. Adieu, we hebben een lieven tijd samen gehad:
ik ben veel van je gaan houden....
Zij wrong zich van Urania los, ook Duco nam afscheid. Zij lieten de
prinses snikkende alleen. Op den corridor ontmoetten zij Gilio.
—Waar gaat u heen? vroeg hij met zijn nederige stem.
—Wij gaan met den trein van tien uur vijf-en-twintig.
—Het doet mij veel leed....
Maar zij gingen door en lieten hem staan, terwijl in het salon Urania
snikte.
XLI.
In den trein, in den brandenden morgen, waren zij stil, en zij vonden
Rome als barstende uit zijne huizen, van zonnebrand. In het atelier
was het echter koel, eenzaam en rustig.
—Cornélie, zeide Duco. Vertel mij wat er gebeurd is tusschen jou en
den prins. Waarom heb je hem geslagen?
Zij trok hem op den divan, wierp zich aan zijn hals en vertelde de
scène van de camera dei sposi. Zij vertelde hem van de duizend lire
en van den armband. Zij verklaarde hem, dat zij hierover gezwegen
had, om hem niet over geldzorgen te spreken, terwijl hij zijn aquarel
voor de tentoonstelling in Londen voltooide.
—Duco, ging zij voort. Ik ben gisteren zoo geschrikt, toen ik Gilio dat
mes zag trekken. Ik voelde mij flauw vallen, maar ik heb het niet
gedaan. Ik had hem nog nooit zoo gezien, zoo hevig, zoo tot alles in
staat.... Ik voelde toen pas, hoeveel ik van je hield.... Ik had hem
vermoord, als hij je verwond had....
—Je hadt niet met hem moeten spelen, zeide hij streng. Hij heeft je
lief ...
Maar ondanks zijn strengen toon, trok hij haar vaster naar zich toe.
Zij legde met iets als schuldbewustzijn haar hoofd vleiend tegen hem
aan.
—Hij is alleen wat verliefd ... verdedigde zij zich, zwakjes.
—Hij is heel gepassionneerd verliefd ... Je hadt niet met hem mogen
spelen....
Zij antwoordde niet meer, hem met de hand vleiende zijn gezicht. Zij
vond hem heel lief, dat hij haar zoo berispte: zij hield van dien
strengen, ernstigen toon, dien hij bijna nooit tegen haar aannam. Zij
wist, dat zij die behoefte tot flirt in zich had, gehad had van heel
jong meisje: zij telde het niet, het was onschuldig amuzement. Zij
was het niet met Duco eens, maar zij vond het onnoodig er over
door te gaan: het was als het was, zij dacht er niet over, zij streed er
niet tegen: het was als een verschil van opinie, bijna van smaak, dat
niet telde. Zij lag te gemakkelijk tegen hem aan, na de agitatie van
gisteren avond, na een slapeloozen nacht, na een overhaast vertrek,
na drie uur sporens in de brandende warmte, om er veel tegen in te
praten. Zij vond de stille koelte van het atelier lief, de eenzaamheid
met hen beiden, na de drie weken op San Stefano. Er was hier een
rust, een komen tot zichzelve, die zalig was. Het hooge raam was
opgetrokken en de warme lucht vloot weldadig in en temperde zich
in de natuurlijke kilte van het noordelijke vertrek. Duco's ezel, leêg,
stond in afwachting. Het was er hun thuis, tusschen al die kleur en
vorm van kunst rondom haar heen. Zij begreep nu die kleur en
vorm: zij leerde Rome. Zij leerde dat alles in den droom van haar
geluk. Zij dacht weinig over de Vrouwenkwestie en de kritieken over
haar brochure keek zij nauwlijks in en interesseerden haar weinig.
Zij vond den engel van Lippo mooi, en zij vond mooi het tryptiekblad
van Gentile da Fabriano en de flonkerkleuren der oude kazuifels. Het
was wel heel weinig na de schatten van San Stefano, maar het was
het hunne en hun home. Zij sprak niet meer, zij voelde zich
tevreden, zij rustte uit aan Duco's borst, en hare vingers streelden
zijn gezicht.
—De Banieren zijn zoo goed als verkocht, zeide hij: voor negentig
pond. Ik zal van middag telegrafeeren naar Londen ... En dan
kunnen we gauw den prins die duizend lire teruggeven.
—Het is het geld van Urania, zeide zij zwakjes.
—Maar ik wil die schuld niet langer hebben ...
Zij voelde, dat hij een beetje boos was, maar zij was in geen
stemming om over geldzaken te praten, en een zalige loomte
doorvloeide haar aan zijn borst....
Ben je boos, Duco?
—Neen ... maar je hadt het niet moeten doen....
Hij nam haar vaster tegen zich aan, om haar te laten voelen, dat hij
niet op haar brommen wilde, al vond hij, dat zij verkeerd had
gehandeld. Zij vond, dat zij goed had gehandeld om hem niet te
spreken over de duizend lire, maar zij verdedigde zich niet. Het
zouden nuttelooze woorden zijn en zij voelde zich te tevreden, om
over geld te praten.
—Cornélie, zeide hij; laten wij trouwen....
Zij zag hem aan, verschrikt, opgeschrikt uit hare zaligheid.
—Waarom?
—Niet om onszelven. Wij zijn even gelukkig, niet getrouwd. Maar om
de wereld, de menschen.
—Om de wereld, de menschen?
—Ja; wij zullen ons hoe langer hoe meer geizoleerd gaan voelen. Ik
heb er wel eens met Urania over gesproken. Zij had er veel verdriet
over, maar zij tolereerde ons.... Zij vond het een onmogelijke
verhouding. Zij heeft misschien gelijk. Wij kunnen nergens komen.
Op San Stefano deed men nog of men niet wist, dat wij samen
woonden. Dat is nu uit....
—Wat kan je schelen de opinie van "kleine onverschillige menschen,
die bij toeval je pad kruisen", zooals je zegt....
—Dat is nu niet meer zoo: aan den prins zijn wij geld schuldig en
Urania is de eenige vriendin, die je hebt....
—Ik heb jou: ik heb niemand noodig.
Hij kuste haar.
—Heusch, Cornélie, het is beter, dat wij trouwen. Dan zal niemand je
meer beleedigen kunnen als de prins je heeft durven doen.
—Hij heeft bekrompen ideeën: hoe kan je willen trouwen om wereld
en menschen als San Stefano en den prins.
—De geheele wereld is zoo en wij zijn in de wereld. Wij leven te
midden van andere menschen. Het is onmogelijk zich geheel te
izoleeren en izolement straft zichzelve later. Wij moeten ons
aansluiten bij andere menschen: het is onmogelijk altijd op je eigen
te bestaan, zonder eenig gemeenschapsgevoel.
—Duco, ik herken je niet meer: het zijn zulke maatschappelijke
ideeën.
—Ik heb meer nagedacht in den laatsten tijd.
—Ik verleer juist na te denken.... Mijn lieveling, wat ben je ernstig
van morgen. En dat terwijl ik zoo heerlijk tegen je aanlig, om uit te
rusten van al die emotie, en die warme reis.
—Heusch Cornélie, laten wij trouwen....
Zij schuurde een weinig nerveus tegen hem aan, ontevreden, dat hij
doorging en met geweld haar zalige stemming vernielde....
—Je bent een akelige jongen. Waarom moeten wij trouwen. Het zoû
niets aan onzen toestand veranderen. Wij zouden ons toch niet met
andere menschen bemoeien. Wij leven zoo heerlijk hier, in je kunst.
Wij hebben niets anders noodig dan elkaâr, en je kunst en Rome. Ik
hoû nu zoo veel van Rome: ik ben heelemaal veranderd. Er is hier
iets wat mij telkens weêr aantrekt. Op San Stefano had ik heimwee
naar Rome en ons atelier. Je moet weêr een ander motief zoeken—
om aan het werk te gaan. Als je niets doet, dan denk je na ... in een
maatschappelijke richting ... en dat is niets voor jou. Ik herken je
zoo niet. En zoo klein maatschappelijk nog. Om te trouwen! In
Godsnaam waarom, Duco? Je kent mijn ideeën over het huwelijk. Ik
heb mijn ondervinding: het is beter van niet....
Zij was opgestaan en werktuigelijk zocht zij in een portefeuille
tusschen half-affe schetsen.
—Je, ondervinding ... herhaalde hij. Wij kennen elkaâr te goed om
voor iets bang te zijn.
Zij trok de schetsen uit de portefeuile: het waren de ideeën, die bij
hem opgeschoten waren en die hij had aangeteekend, terwijl hij
werkte aan de Banieren. Zij zag ze na en strooide ze uit.
—Bang te zijn? herhaalde zij vaag. Neen, hernam zij plotseling
vaster. Een mensch kent zich en een ander nooit. Ik ken je niet, ik
ken mijzelf niet.
Iets waarschuwde haar in het diepst van zich: trouw niet, geef hem
niet toe. Het is beter van niet, het is beter van niet.... Het was
nauwlijks een fluisterende zweeming van waarschuwend voorgevoel,
het was onuitgedacht, onbewust en zielediep geheimzinnig. Want zij
was het zich niet bewust, zij dacht het niet, zij hoorde het nauwlijks
in zich. Het ging door haar heen en het was geen gevoel en het liet
alleen achter een tegenwerkende onwil in haar, zeer duidelijk.... Pas
jaren later zoû zij dien onwil begrijpen....
—Neen Duco, het is beter van niet....
—Denk er nu eens over na, Cornélie.
—Het is beter van niet, herhaalde zij star. Toe, laat ons er niet meer
over spreken. Het is beter van niet, maar ik vind het zoo akelig het
je te weigeren, omdat jij het verlangt. Ik weiger je anders nooit iets.
Ik zoû anders alles voor je willen doen. Maar dit voel ik zoo: het ... is
beter ... van niet!
Zij kwam als eéne liefkoozing naar hem toe en omhelsde hem.
—Vraag het mij niet meer. Wat een wolk op je gezicht! Ik zie, dat je
er nog altijd over denken zult.
Zij streelde over zijn voorhoofd als om zijn rimpels weg te vegen.
—Denk er niet meer over na. Ik hoû van je, ik hoû van je! Ik wil
niets anders dan jou.... Ik ben gelukkig, zooals wij zijn. Waarom jij
ook niet? Omdat Gilio grof is geweest en Urania "prim?" Kom je
schetsen eens bezien. Ga je gauw aan het werk? Ik vind het heerlijk
als je werkt. Dan ga ik weêr wat schrijven: een causerie over een
oud Italiaansch kasteel. Mijn souvenirs van San Stefano. Misschien
wel een novelle en de pergola als achtergrond. O, die mooie
pergola.... Maar gisteren, dat mes! Zeg Duco, ga je weêr werken?
Laten wij samen eens zien. Wat had je toen veel ideeën! Maar word
niet te symbolistisch: ik meen, krijg niet die trucs, die repetities van
je eigen.... Die vrouw hier, die is wel mooi.... Ze loopt zoo in
onbewust-zijn die hellende lijn af en die duwende handen om haar
heen, en die roode bloemen in den afgrond.... Zeg Duco, wat
meende je er meê?
—Ik weet niet: het was mezelf niet heel duidelijk....
—Ik vind het wel mooi, maar ik hoû niet van die schets. Ik weet niet
waarom. Ik vind er iets akeligs in. Ik vind die vrouw dom. Ik hoû
niet van die hellende lijnen: ik hoû van opgaande lijnen, als in de
Banieren. Dat vloeide alles uit den nacht naar boven, naar de zon!
Wat was dat mooi! Hoe jammer, dat wij het nu niet meer hebben,
dat het verkocht wordt. Als ik schilder was, zoû ik nooit wat kunnen
verkoopen. Ik zal de schetsen ervan bewaren, als souvenir. Vindt je
het niet vreeslijk, dat wij het niet meer hebben...?
Hij beaamde het: hij miste ook zijn Banieren: hij had ze lief. En hij
zocht met haar tusschen de andere studiën en schetsen. Maar
behalve de onbewuste vrouw was er niets onder, dat hem duidelijk
genoeg was, om uit te werken. En Cornélie wilde niet, dat hij de
onbewuste vrouw afmaakte: neen, ze hield niet van die hellende
lijnen.... Maar toen vond hij nog schetsen van landschapsstudiën,
van wolken en luchten, over de Campagna, Venetië en Napels.
En hij zette zich aan het werk.
XLII.
Zij waren heel zuinig, zij hadden eenig geld en de maanden
droomden voorbij, in den blakenden zomer van Rome. Zij leefden
hun vereenzaamd geluksleven voort, zonder iemand anders te zien
dan Urania, die een enkelen keer in Rome kwam, hen opzocht, bij
hen déjeuneerde in het atelier en 's avonds weêr vertrok. Toen
schreef Urania hen, dat Gilio het niet meer uithield te San Stefano,
en dat zij op reis gingen, eerst naar Zwitserland, later naar Ostende.
Zij kwam nog eenmaal om afscheid te nemen, en toen zagen zij
niemand meer.
Vroeger had Duco nog wel eens gekend een enkelen artist, een
schilder-landgenoot in Rome: nu kende hij niemand meer, nu zag hij
niemand. En hun leven in het koele atelier was als een eenzaam
oaze-bestaan te midden van de zonwoestijn van Rome, in Augustus.
Zij gingen niet de bergen in, naar een koelere plaats, voor de
zuinigheid. Zij gaven niet meer uit dan het allerhoogst noodzakelijke
en hunne bohême-armoede was toch geluk in hun decor van
tryptiek- en kazuifelkleuren.
Het geld echter bleef schaarsch. Duce verkocht eens een enkele
aquarel, maar soms moesten zij wel eens hun toevlucht nemen tot
het verkoopen van een bibelot. En het ging Duco altijd zeer aan het
hart te scheiden van iets, dat hij verzameld had. Zij hadden weinig
behoeften, maar soms moest de huur van het atelier worden
betaald. Cornélie schreef soms een brief, een schets, en kocht ervan
wat zij noodig had voor haar toilet. Zij had een zekeren chic van
dragen, een talent er elegant uit te zien in een oude versleten
blouse. Zij was coquet op haar haar, op haar huid, op haar tanden,
op haar nagels. Met een nieuwe voile droeg zij een ouden hoed; met
een oude wandeljapon, een paar frissche handschoenen, en zij
droeg alles met coquetterie. Thuis, in haar rozen peignoir, die geen
kleur meer had, had zij een lijn van zoo groote bevalligheid, dat
Duco haar telkens schetste. Zij gingen bijna nooit meer naar een
restauratie. Cornélie kookte thuis wat, verzon gemakkelijke recepten,
haalde een fiasco wijn in de eerste de beste "Olio e vino" waar de
koetsiers aan tafeltjes zaten te drinken, en zij aten thuis lekkerder
en goedkooper dan in de osteria. En Duco, nu hij niet meer kocht bij
de antiquaires aan den Tiber, gaf niets uit. Maar het geld bleef
schaarsch. Toen zij eens een zilveren crucifix hadden verkocht, voor
veel te weinig geld, was Cornélie zoo ontmoedigd, dat zij snikte aan
Duco's borst. Hij troostte haar, streelde heur haar en verklaarde, dat
hij niet veel om het crucifix gaf. Maar zij wist, dat het crucifix een
heel mooi werk was van een onbekende uit de zestiende eeuw, en
dat hij er veel leed van had het niet meer te bezitten. En ernstig
zeide zij hem, dat het zoo niet langer kon gaan, dat zij hem, niet tot
lastpost kon wezen, en dat zij maar scheiden moesten: dat zij iets
zoeken zoû, naar Holland terug zoû gaan.... Hij schrikte van haar
wanhoop, en zei, dat het niet hoefde, dat hij wel voor haar zorgen
kon, als voor zijn vrouw, maar dat hij nu eenmaal zoo een
onpractische jongen was, die niets anders kon dan een beetje
kladderen, en niet eens genoeg om er van te leven. Maar zij zeide,
dat hij zoo niet spreken mocht, dat hij een groot artist was, die niet
had een geldmakende, gemakkelijke vruchtbaarheid, maar daarom
des te hooger stond. Zij zeide, dat zij niet van zijn geld wilde leven,
dat zij voor zichzelve wilde zorgen. En zij verzamelde de verwaaide
resten van hare feministische ideeën. Nog eens vroeg hij haar toe te
staan in een huwelijk: zij zouden zich verzoenen met zijn moeder en
mevrouw Van der Staal zoû hem weêr geven wat zij hem vroeger
gaf, toen hij nog met zijn moeder bij Belloni woonde. Maar zij wilde
ten eerste van geen huwelijk weten en ten tweede van geen
onderstand van zijn moeder, evenmin als hij geld van Urania wilde.
Hoe dikwijls had Urania hun niet haar hulp geboden! Hij had nooit
gewild: hij was zelfs boos geweest, toen Urania een blouse aan
Cornélie had gegeven, en zij die met een zoen had aangenomen.
Neen, het ging niet langer: zij moesten maar scheiden: zij zoû naar
Holland terug, iets zoeken. Het was gemakkelijker in Holland dan in
den vreemde.... Maar hij was zoo wanhopig, om hun geluk, dat
wankelde voor zijn oogen, dat hij haar vasthield aan zijn borst, en
ook zij snikte, de armen om zijn hals. Waarom scheiden? vroeg hij.
Zij zouden sterker te zamen zijn. Hij kon niet meer buiten haar, zijn
leven zoû zonder haar geen leven zijn. Hij leefde vroeger in zijn
droom, hij leefde nu in de werkelijkheid van hun geluk.
En het bleef er bij: zij konden niets veranderen, zij leefden zoo gierig
mogelijk, om bij elkaâr te blijven. Hij werkte zijn landschappen af,
die hij altijd verkocht, maar hij verkocht ze dadelijk, voor veel te
weinig geld, om maar niet behoeven te wachten. Maar toen dreigde
weêr het gebrek en zij dacht er over naar Holland te schrijven. Juist
echter ontving zij een brief van hare moeder, daarna een brief van
eene harer zusters. En zij vroegen haar in die brieven of het waar
was, wat men vertelde in Den Haag, dat zij leefde met Van der
Staal. Zij had zich altijd zoover beschouwd van Den Haag en de
Haagsche menschen, dat zij er nooit over had gedacht, dat haar
leven bekend kon worden. Zij sprak zoo niemand, zij kende zoo
niemand met Hollandsche relaties.... Hoe dan ook, hare
onafhankelijkheid was nu bekend. En zij beantwoordde die brieven
in een feministischen toon: zeide hare antipathie tegen het huwelijk,
bekende, dat zij leefde met Van der Staal. Zij schreef koel en
zakelijk, om in Den Haag indruk te maken als vrije vrouw. Men
kende er natuurlijk hare brochure. Maar zij begreep, dat zij nu aan
Holland niet meer kon denken. Ze schreef hare familie af. Het
scheurde toch nog iets in haar, het onbewuste van familieband. Maar
de band was reeds zoo los, door te weinig sympathie, vooral in de
dagen van haar scheiding. En zij voelde zich geheel alleen: zij had
alleen haar geluk, hare liefde, Duco. O, het was genoeg, het was
genoeg voor heel haar leven. Als zij alleen maar geld verdienen kon!
Maar hoe? Zij ging naar den Hollandschen consul: zij vroeg hem
raad: het gaf niets. Voor liefdezuster was zij ongeschikt: zij wilde
dadelijk verdienen en studeeren kon zij niet. In een winkel staan, dat
kon zij. En zij bood zich aan, zonder Duco er iets van te zeggen,
maar niettegenstaande haar versleten manteltje, vond men haar
overal te veel dame, en vond zij het salaris te weinig voor een
heelen dag arbeid. En toen zij voelde, dat zij het niet in haar bloed
had te werken voor haar brood, trots al hare ideeën, al hare logiek,
trots hare brochure en haar vrije-vrouwschap, voelde zij zich
radeloos tot wanhoop toe, en terwijl zij naar huis ging, moê,
afgebeuld door trappenklimmen en nuttelooze gesprekken van
sollicitatie, kwam de oude klacht op hare lippen:
—O God, zèg mij, wat ik doen moet...!!
XLIII.
Urania schreef zij geregeld, naar Zwitserland, naar Ostende, en
Urania schreef altijd zoo lief terug en bood hare hulp aan. Maar
Cornélie weerde steeds af, bang nu Duco er meê te kwetsen. Zij,
voor zich, voelde grootere gemakkelijkheid, vooral nu het tot haar
kwam, dat zij toch niet werken kon. Maar zij begreep het in Duco en
eerbiedigde het. Voor zich had zij echter aangenomen, nu hare
fierheid toch wankelde, nu hare ideeën in-een stortten, te zwak voor
den stadigen druk van het steenharde leven. Het was als een groote
vinger, die even langs huisjes van kaarten ging: met zorg en trots
opgebouwd, viel alles plat neêr bij de minste beroering. Alleen vast
bleef staan hare liefde en haar geluk, onwankelbaar te midden der
ruïne. O, wat had zij hem lief, hoe eenvoudig waar was hun geluk!
Wat was hij haar dierbaar, om zijn zachtheid, om zijne kalmte, zijn
gemis aan drift, of zijne zenuwen zich alleen maar gespannen
hadden tot het fijner voelen van kunst. Zij voelde zoo heerlijk, dat
het onverstoorbaar was, gevonden voor altijd. Zonder dat geluk
hadden zij ook nooit van dag tot dag hun moeilijke leven kunnen
sleepen. Nu voelden zij die zwaarte niet dagelijks, als trokken zij
samen den last, van den eenen dag op den anderen, voort. Nu
voelden zij die zwaarte maar soms, als de volgende dag geheel
duister was en zij niet wisten waar zij hun levenslast sleepten, in het
donkere van die toekomst. Maar zij overwonnen altijd weêr: zij
hadden elkaâr te lief om bij den last in-een te zinken. Zij vonden
altijd weêr wat moed: glimlachend steunden zij elkanders kracht.
Het werd September, Oktober, en Urania schreef, dat zij
terugkwamen te San Stefano en er een paar maanden blijven
zouden, voor zij dien winter naar Nice gingen. En op een morgen,
onverwachts, kwam Urania in het atelier. Zij vond Cornélie alleen:
Duco was naar een kunstkooper. Zij begroetten elkander heel innig.
—Ik ben zoo blij je terug te zien! babbelde Urania vroolijk. Ik ben blij
weêr in Italië te zijn en nog een tijd te San Stefano te blijven. En
hier is alles als het was, in jullie gezellig atelier? Je bent gelukkig? O,
ik behoef het niet te vragen...!
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!
textbookfull.com

More Related Content

PDF
Modern Web Development On The Jamstack Mathias Biilmann Phil Hawksworth
PPSX
Netwerken 6 4-diensten-op-het-internet
PDF
Starting Out with C++: Early Objects 9th Edition by Tony Gaddis (eBook PDF)
PPT
Third Generation Internet Applications
PDF
Meetup ASP.NET 5 19/11/2015
PDF
C++20 for Programmers (Deitel Developer Series) 3rd Edition Paul Deitel
PPT
Presentatie Siptique
PDF
(eBook PDF) Starting Out with C++: From Control Structures through Objects 8t...
Modern Web Development On The Jamstack Mathias Biilmann Phil Hawksworth
Netwerken 6 4-diensten-op-het-internet
Starting Out with C++: Early Objects 9th Edition by Tony Gaddis (eBook PDF)
Third Generation Internet Applications
Meetup ASP.NET 5 19/11/2015
C++20 for Programmers (Deitel Developer Series) 3rd Edition Paul Deitel
Presentatie Siptique
(eBook PDF) Starting Out with C++: From Control Structures through Objects 8t...

Similar to Architecting ASP.NET Core Applications Carl-Hugo Marcotte (20)

PDF
Starting out with Visual C 2010 2nd Edition Edition Tony Gaddis
DOC
Factsheet/FAQ open source BIMserver
PDF
Test Bank for Network Guide to Networks 8th Edition by West
PDF
Webinar overstap van DevOps naar GitHub.pdf
PDF
Cloud Native Infrastructure With Azure Building And Managing Cloud Native App...
PDF
Instant Access to Windows Kernel Programming Second Edition Pavel Yosifovich ...
PDF
ADO ActiveX data objects 1st Edition Jason T. Roff
PPTX
Api kooien les 1
PPTX
PPTX
Excellent rest met de web api
PDF
Drupal intro 2010
PDF
Database Concepts 8th Edition (eBook PDF)
PDF
Sap leonardo vnsg developerdag 2017 - experis ciber
PPT
Vertaling Seo Concepten Naar Implementatie
PPT
BiMserver
PPTX
Alle voordelen van FlexPod en EMC VSPEX converged infrastructuren op een rij
PPTX
Presentatie Simon Besteman, ISP Connect over Microsoft ICT Academy, tijdens i...
PPTX
HTML 5 in een vogelvlucht (Dutch)
PDF
Cloud Computing: Concepts, Technology, Security, and Architecture, Second Edi...
PPTX
HTML 5, ASP.NET MVC & Windows Azure sessie voor Ivo Brugge
Starting out with Visual C 2010 2nd Edition Edition Tony Gaddis
Factsheet/FAQ open source BIMserver
Test Bank for Network Guide to Networks 8th Edition by West
Webinar overstap van DevOps naar GitHub.pdf
Cloud Native Infrastructure With Azure Building And Managing Cloud Native App...
Instant Access to Windows Kernel Programming Second Edition Pavel Yosifovich ...
ADO ActiveX data objects 1st Edition Jason T. Roff
Api kooien les 1
Excellent rest met de web api
Drupal intro 2010
Database Concepts 8th Edition (eBook PDF)
Sap leonardo vnsg developerdag 2017 - experis ciber
Vertaling Seo Concepten Naar Implementatie
BiMserver
Alle voordelen van FlexPod en EMC VSPEX converged infrastructuren op een rij
Presentatie Simon Besteman, ISP Connect over Microsoft ICT Academy, tijdens i...
HTML 5 in een vogelvlucht (Dutch)
Cloud Computing: Concepts, Technology, Security, and Architecture, Second Edi...
HTML 5, ASP.NET MVC & Windows Azure sessie voor Ivo Brugge
Ad

Architecting ASP.NET Core Applications Carl-Hugo Marcotte

  • 1. Architecting ASP.NET Core Applications Carl-Hugo Marcotte download https://textbookfull.com/product/architecting-asp-net-core- applications-carl-hugo-marcotte/ Download more ebook from https://textbookfull.com
  • 2. We believe these products will be a great fit for you. Click the link to download now, or visit textbookfull.com to discover even more! Architecting ASP.NET Core Applications: An atypical design patterns guide for .NET 8, C# 12, and beyond 3rd Edition (Early Access) Carl-Hugo Marcotte https://textbookfull.com/product/architecting-asp-net-core- applications-an-atypical-design-patterns-guide-for- net-8-c-12-and-beyond-3rd-edition-early-access-carl-hugo- marcotte/ Pro ASP.NET Core MVC 2: Develop cloud-ready web applications using Microsoft’s latest framework, ASP.NET Core MVC 2 — Seventh Edition Adam Freeman https://textbookfull.com/product/pro-asp-net-core-mvc-2-develop- cloud-ready-web-applications-using-microsofts-latest-framework- asp-net-core-mvc-2-seventh-edition-adam-freeman/ Pro Entity Framework Core 2 for ASP.NET Core MVC Adam Freeman https://textbookfull.com/product/pro-entity-framework-core-2-for- asp-net-core-mvc-adam-freeman/ Essential Angular for ASP.NET Core MVC 3 Adam Freeman https://textbookfull.com/product/essential-angular-for-asp-net- core-mvc-3-adam-freeman/
  • 3. Creating ASP.NET Core Web Applications: Proven Approaches to Application Design and Development 1st Edition Dirk Strauss https://textbookfull.com/product/creating-asp-net-core-web- applications-proven-approaches-to-application-design-and- development-1st-edition-dirk-strauss-2/ Essential Docker for ASP.NET Core MVC 1st Edition Adam Freeman https://textbookfull.com/product/essential-docker-for-asp-net- core-mvc-1st-edition-adam-freeman/ ASP.NET Core in Action - MEAP Version 5 2nd Edition Andrew Lock https://textbookfull.com/product/asp-net-core-in-action-meap- version-5-2nd-edition-andrew-lock/ Pro ASP.NET Core 3: Develop Cloud-Ready Web Applications Using MVC, Blazor, and Razor Pages — Eighth Edition Adam Freeman https://textbookfull.com/product/pro-asp-net-core-3-develop- cloud-ready-web-applications-using-mvc-blazor-and-razor-pages- eighth-edition-adam-freeman/ The Complete ASP.NET Core 3 API Tutorial: Hands-On Building, Testing, and Deploying 1st Edition Les Jackson https://textbookfull.com/product/the-complete-asp-net-core-3-api- tutorial-hands-on-building-testing-and-deploying-1st-edition-les- jackson/
  • 6. Architecting ASP.NET Core Applications Copyright © 2023 Packt Publishing All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews. Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book. Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information. Early Access Publication: Architecting ASP.NET Core Applications Early Access Production Reference: B19826 Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK
  • 8. Table of Contents 1. Architecting ASP.NET Core Applications, Third Edition: An atypical design patterns guide for .NET 8, C# 12, and beyond 2. 1 Introduction I. Before you begin: Join our book community on Discord II. What is a design pattern? III. Anti-patterns and code smells i. Anti-patterns ii. Code smells IV. Understanding the web – request/response V. Getting started with .NET i. .NET SDK versus runtime ii. .NET 5+ versus .NET Standard iii. Visual Studio Code versus Visual Studio versus the command-line interface iv. Technical requirements VI. Summary VII. Questions VIII. Further reading 3. 2 Automated Testing I. Before you begin: Join our book community on Discord II. Introduction to automated testing i. Unit testing ii. Integration testing iii. End-to-end testing iv. Other types of tests v. Picking the right test style III. Testing approaches i. TDD ii. ATDD iii. BDD iv. Refactoring v. Technical debt IV. Testing techniques i. White-box testing
  • 9. ii. Black-box testing iii. Grey-box testing iv. White-box vs. Black-box vs. Grey-box testing v. Conclusion V. Test case creation i. Equivalence Partitioning ii. Boundary Value Analysis iii. Decision Table Testing iv. State Transition Testing v. Use Case Testing VI. How to create an xUnit test project VII. Key xUnit features i. Facts ii. Assertions iii. Theories iv. Closing words VIII. Arrange, Act, Assert IX. Organizing your tests i. Unit tests ii. Integration tests X. Writing ASP.NET Core integration tests i. Classic web application ii. Minimal hosting XI. Important testing principles XII. Summary XIII. Questions XIV. Further reading 4. 3 Architectural Principles I. Before you begin: Join our book community on Discord II. Separation of concerns (SoC) III. Don’t repeat yourself (DRY) IV. Keep it simple, stupid (KISS) V. The SOLID principles i. Single responsibility principle (SRP) ii. Open/Closed principle (OCP) iii. Liskov substitution principle (LSP) iv. Interface segregation principle (ISP) v. Dependency inversion principle (DIP) VI. Summary
  • 10. VII. Questions VIII. Further reading 5. 4 REST APIs I. Before you begin: Join our book community on Discord II. REST & HTTP i. HTTP methods ii. HTTP Status code iii. HTTP headers iv. Versioning v. Wrapping up III. Data Transfer Object (DTO) i. Goal ii. Design iii. Conceptual examples iv. Conclusion IV. API contracts i. Code-first API Contract ii. Wrapping up V. Summary VI. Questions VII. Further reading VIII. Answers 6. 5 Minimal API I. Before you begin: Join our book community on Discord II. Top-level statements III. Minimal Hosting IV. Minimal APIs i. Map route-to-delegate ii. Configuring endpoints iii. Leveraging endpoint filters iv. Leveraging the endpoint filter factory v. Organizing endpoints V. Using Minimal APIs with Data Transfer Objects i. Goal ii. Design iii. Project – Minimal API iv. Conclusion VI. Summary VII. Questions
  • 11. VIII. Further reading IX. Answers 7. 6 Model-View-Controller I. Before you begin: Join our book community on Discord II. The Model View Controller design pattern i. Goal ii. Design iii. Anatomy of ASP.NET Core web APIs iv. Conclusion III. Using MVC with DTOs i. Goal ii. Design iii. Project – MVC API iv. Conclusion IV. Summary V. Questions VI. Further reading VII. Answers 8. 7 Strategy, Abstract Factory, and Singleton Design Patterns I. Before you begin: Join our book community on Discord II. The Strategy design pattern i. Goal ii. Design iii. Project – Strategy iv. Conclusion III. The Abstract Factory design pattern i. Goal ii. Design iii. Project – Abstract Factory iv. Project – The mid-range vehicle factory v. Impacts of the Abstract Factory vi. Conclusion IV. The Singleton design pattern i. Goal ii. Design iii. An alternate (better) way iv. Code smell – Ambient Context v. Conclusion V. Summary
  • 12. VI. Questions VII. Answers 9. 8 Dependency Injection I. Before you begin: Join our book community on Discord II. What is dependency injection? i. The composition root ii. Striving for adaptability iii. Understanding the use of the IoC container iv. The role of an IoC container v. Code smell – Control Freak vi. Object lifetime vii. Registering our dependencies viii. Registering your features elegantly ix. Using external IoC containers III. Revisiting the Strategy pattern i. Constructor injection ii. Property injection iii. Method injection iv. Project – Strategy v. Conclusion IV. Understanding guard clauses V. Revisiting the Singleton pattern i. Project – Application state ii. Project – Wishlist iii. Conclusion VI. Understanding the Service Locator pattern i. Project – ServiceLocator ii. Conclusion VII. Revisiting the Factory pattern i. Project – Factory VIII. Summary IX. Questions X. Further reading XI. Answers 10. 9 Options, Settings, and Configuration I. Before you begin: Join our book community on Discord II. Loading the configuration III. Learning the building blocks i. IOptionsMonitor<TOptions>
  • 13. ii. IOptionsFactory<TOptions> iii. IOptionsSnapshot<TOptions> iv. IOptions<TOptions> IV. Project – CommonScenarios i. Manual configuration ii. Using the settings file iii. Injecting options iv. Named options v. Reloading options at runtime V. Project – OptionsConfiguration i. Creating the program ii. Configuring the options iii. Implementing a configurator object iv. Adding post-configuration v. Using multiple configurator objects vi. Exploring other configuration possibilities VI. Project – OptionsValidation i. Eager validation ii. Data annotations iii. Validation types VII. Project – OptionsValidationFluentValidation VIII. Workaround – Injecting options directly IX. Project – Centralizing the configuration X. Using the configuration-binding source generator i. Project – ConfigurationGenerators: Part 1 XI. Using the options validation source generator i. Project – ConfigurationGenerators: Part 2 XII. Using the ValidateOptionsResultBuilder class i. Project - ValidateOptionsResultBuilder XIII. Summary XIV. Questions XV. Further reading XVI. Answers 11. 10 Logging patterns I. Before you begin: Join our book community on Discord II. About logging III. Writing logs IV. Log levels V. Logging providers
  • 14. VI. Configuring logging VII. Structured logging VIII. Summary IX. Questions X. Further reading XI. Answers 12. 11 Structural Patterns I. Before you begin: Join our book community on Discord II. Implementing the Decorator design pattern i. Goal ii. Design iii. Project – Adding behaviors iv. Project – Decorator using Scrutor v. Conclusion III. Implementing the Composite design pattern i. Goal ii. Design iii. Project – BookStore iv. Conclusion IV. Implementing the Adapter design pattern i. Goal ii. Design iii. Project – Greeter iv. Conclusion V. Implementing the Façade design pattern i. Goal ii. Design iii. Project – The façades iv. Conclusion VI. Summary VII. Questions VIII. Further reading IX. Answers 13. 12 Behavioral Patterns I. Before you begin: Join our book community on Discord II. Implementing the Template Method pattern i. Goal ii. Design iii. Project – Building a search machine
  • 15. iv. Conclusion III. Implementing the Chain of Responsibility pattern i. Goal ii. Design iii. Project – Message interpreter iv. Conclusion IV. Mixing the Template Method and Chain of Responsibility patterns i. Project – Improved message interpreter ii. Project – A final, finer-grained design iii. Conclusion V. Summary VI. Questions VII. Answers 14. 13 Understanding the Operation Result Design Pattern I. Before you begin: Join our book community on Discord II. The Operation Result pattern i. Goal ii. Design iii. Project – Implementing different Operation Result patterns iv. Advantages and disadvantages III. Summary IV. Questions V. Further reading VI. Answers 15. 14 Layering and Clean Architecture I. Before you begin: Join our book community on Discord II. Introducing layering i. Classic layering model ii. Splitting the layers iii. Layers versus tiers versus assemblies III. Responsibilities of the common layers i. Presentation ii. Domain iii. Data IV. Abstract layers V. Sharing the model VI. Clean Architecture
  • 16. VII. Implementing layering in real life i. To be or not to be a purist? ii. Building a façade over a database VIII. Summary IX. Questions X. Further reading XI. Answers 16. 15 Object Mappers, Aggregate Services, and Façade I. Before you begin: Join our book community on Discord II. Object mapper i. Goal ii. Design iii. Project – Mapper iv. Conclusion III. Code smell – Too many dependencies IV. Pattern – Aggregate Services V. Pattern – Mapping Façade VI. Project – Mapping service VII. Project – AutoMapper VIII. Project – Mapperly IX. Summary X. Questions XI. Further reading XII. Answers 17. 16 Mediator and CQRS Design Patterns I. Before you begin: Join our book community on Discord II. A high-level overview of Vertical Slice Architecture III. Implementing the Mediator pattern i. Goal ii. Design iii. Project – Mediator (IMediator) iv. Project – Mediator (IChatRoom) v. Conclusion IV. Implementing the CQS pattern i. Goal ii. Design iii. Project – CQS iv. Conclusion V. Code smell – Marker Interfaces
  • 17. i. Metadata ii. Dependency identifier VI. Using MediatR as a mediator i. Project – Clean Architecture with MediatR ii. Conclusion VII. Summary VIII. Questions IX. Further reading X. Answers 18. 17 Getting Started with Vertical Slice Architecture I. Before you begin: Join our book community on Discord II. Anti-pattern – Big Ball of Mud III. Vertical Slice Architecture i. What are the advantages and disadvantages? ii. Project – Vertical Slice Architecture iii. Conclusion IV. Continuing your journey: A few tips and tricks V. Summary VI. Questions VII. Further reading VIII. Answers 19. 18 Request-EndPoint-Response (REPR) and Minimal APIs I. Before you begin: Join our book community on Discord II. Request-EndPoint-Response (REPR) pattern i. Goal ii. Design iii. Project – SimpleEndpoint iv. Conclusion III. Project – REPR—A slice of the real-world i. Assembling our stack ii. Dissecting the code structure iii. Exploring the shopping basket iv. Managing exception handling v. Grey-box testing IV. Summary V. Questions VI. Further reading VII. Answers 20. 19 Introduction to Microservices Architecture
  • 18. I. Before you begin: Join our book community on Discord II. What are microservices? i. Cohesive unit of business ii. Ownership of data iii. Microservice independence III. An introduction to event-driven architecture i. Domain events ii. Integration events iii. Application events iv. Enterprise events v. Conclusion IV. Getting started with message queues i. Conclusion V. Implementing the Publish-Subscribe pattern i. Message brokers ii. The event sourcing pattern iii. Example iv. Conclusion VI. Introducing Gateway patterns i. Gateway Routing pattern ii. Gateway Aggregation pattern iii. Backend for Frontend pattern iv. Mixing and matching gateways v. Conclusion VII. Project – REPR.BFF i. Layering APIs ii. Running the microservices iii. Creating typed HTTP clients using Refit iv. Creating a service that serves the current customer v. Features vi. Conclusion VIII. Revisiting the CQRS pattern i. Advantages and potential risks ii. Conclusion IX. Exploring the Microservice Adapter pattern i. Adapting an existing system to another ii. Decommissioning a legacy application iii. Adapting an event broker to another iv. Conclusion
  • 19. X. Summary XI. Questions XII. Further reading XIII. Answers 21. 20 Modular Monolith I. Before you begin: Join our book community on Discord II. What is a Modular Monolith? i. What are traditional Monoliths? ii. What are microservices? III. Advantages of Modular Monoliths IV. Key Components of a Modular Monolith V. Implementing a Modular Monolith i. Planning the project ii. Defining our stack VI. Project—Modular Monolith i. Sending events from the catalog module ii. Consuming the events from the basket module iii. Inside the aggregator iv. Exploring the REST API HttpClient v. Sending HTTP requests to the API vi. Validating the existence of a product VII. Transitioning to Microservices VIII. Challenges and Pitfalls IX. Conclusion X. Questions XI. Further reading XII. An end is simply a new beginning XIII. Answers
  • 20. Architecting ASP.NET Core Applications, Third Edition: An atypical design patterns guide for .NET 8, C# 12, and beyond Welcome to Packt Early Access. We’re giving you an exclusive preview of this book before it goes on sale. It can take many months to write a book, but our authors have cutting-edge information to share with you today. Early Access gives you an insight into the latest developments by making chapter drafts available. The chapters may be a little rough around the edges right now, but our authors will update them over time.You can dip in and out ofthis bookorfollow alongfrom start to finish; Early Access is designed to be flexible. We hope you enjoy getting to know more about the process of writing a Packt book. 1. Chapter 1: Introduction 2. Chapter 2: Automated Testing 3. Chapter 3: Architectural Principles 4. Chapter 4: REST APIs 5. Chapter 5: Minimal API 6. Chapter 6: Model-View-Controller 7. Chapter 7: Strategy, Abstract Factory, and Singleton Design Patterns 8. Chapter 8: Dependency Injection 9. Chapter 9: Options, Settings, and Configuration 10. Chapter 10: Logging patterns 11. Chapter 11: Structural Patterns 12. Chapter 12: Behavioral Patterns 13. Chapter 13: Understanding the Operation Result Design Pattern 14. Chapter 14: Layering and Clean Architecture 15. Chapter 15: Object Mappers, Aggregate Services, and Façade 16. Chapter 16: Mediator and CQRS Design Patterns
  • 21. 17. Chapter 17: Getting Started with Vertical Slice Architecture 18. Chapter 18: Request-EndPoint-Response (REPR) and Minimal APIs 19. Chapter19: Introduction to Microservices Architecture 20. Chapter20: Modular Monolith
  • 23. Before you begin: Join our book community on Discord Give your feedback straight to the author himself and chat to other early readers on our Discord server (find the "architecting-aspnet-core-apps-3e" channel under EARLY ACCESS SUBSCRIPTION). https://packt.link/EarlyAccess The goal of this book is not to create yet another design pattern book; instead, the chapters are organized according to scale and topic, allowing you to start small with a solid foundation and build slowly upon it, just like you would build a program.Instead of a guide covering a few ways of applying a design pattern, we will explore the thought processes behind the systems we are designing from a software engineer’s point of view.This is not a magic recipe book; from experience, there is no magical recipe when designing software; there are only your logic, knowledge, experience, and analytical skills. Let’s define “experience” as your past successes and failures. And don’t worry, you will fail during your career, but don’t get discouraged by it. The faster you fail, the faster you can recover and learn, leading to successful products. Many techniques covered in this book should help you achieve success. Everyone has failed and made mistakes; you aren’t the first and certainly won’t be the last. To paraphrase a well-known saying by Roosevelt: the people that never fail are the ones who never do anything.At a high level: This book explores basic patterns, unit testing, architectural principles, and some ASP.NET Core mechanisms. Then, we move up to the component scale, exploring patterns oriented toward small chunks of software and individual units. After that, we move to application-scale patterns and techniques, exploring ways to structure an application. Some subjects covered throughout the book could have a book of their own, so after this book, you should have plenty of ideas about where to continue your journey into software architecture. Here are a few pointers about this book that are worth mentioning: The chapters are organized to start with small-scale patterns and then progress to higher-level ones, making the learning curve easier. Instead of giving you a recipe, the book focuses on the thinking behind things and shows the evolution of some techniques to help you understand why the shift happened. Many use cases combine more than one design pattern to illustrate alternate usage so you can understand and use the patterns efficiently. This also shows that design patterns are not beasts to tame but tools to use, manipulate, and bend to your will. As in real life, no textbook solution can solve all our problems; real problems are always more complicated than what’s explained in textbooks. In this book, I aim to show you how to mix and match patterns to think “architecture” instead of giving you step-by-step instructions to reproduce.
  • 24. The rest of the introduction chapter introduces the concepts we explore throughout the book, including refreshers on a few notions. We also touch on .NET, its tooling, and some technical requirements.In this chapter, we cover the following topics: What is a design pattern? Anti-patterns and code smell. Understanding the web – request/response. Getting started with .NET. What is a design pattern? Since you just purchased a book about design patterns, I guess you have some idea of what design patterns are, but let’s make sure that we are on the same page.Abstract definition: A design pattern is a proven technique that we can use to solve a specific problem.In this book, we apply different patterns to solve various problems and leverage some open-source tools to go further, faster! Abstract definitions make people sound smart, but understanding concepts requires more practice, and there is no better way to learn than by experimenting with something, and design patterns are no different.If that definition does not make sense to you yet, don’t worry. You should have enough information by the end of the book to correlate the multiple practical examples and explanations with that definition, making it crystal clear.I like to compare programming to playing with LEGO® because what you have to do is very similar: put small pieces together to create something bigger. Therefore, if you lack imagination or skills, possibly because you are too young, your castle might not look as good as someone with more experience. With that analogy in mind, a design pattern is a plan to assemble a solution that fits one or more scenarios, like the tower of a castle. Once you designed a single tower, you can build multiple by following the same steps. Design patterns act as that tower plan and give you the tools to assemble reliable pieces to improve your masterpiece (program).However, instead of snapping LEGO® blocks together, you nest code blocks and interweave objects in a virtual environment!Before going into more detail, well-thought-out applications of design patterns should improve your application designs. That is true whether designing a small component or a whole system. However, be careful: throwing patterns into the mix just to use them can lead to the opposite result: over-engineering. Instead, aim to write the least amount of readable code that solves your issue or automates your process.As we have briefly mentioned, design patterns apply to different software engineering levels, and in this book, we start small and grow to a cloud-scale! We follow a smooth learning curve, starting with simpler patterns and code samples that bend good practices to focus on the patterns—finally ending with more advanced topics and good practices.Of course, some subjects are overviews more than deep dives, like automated testing, because no one can fit it all in a single book. Nonetheless, I’ve done my best to give you as much information about architecture-related subjects as possible to ensure the proper foundations are in place for you to get as much as possible out of the more advanced topics, and I sincerely hope you’ll find this book a helpful and enjoyable read.Let’s start with the opposite of design patterns because it is essential to identify wrong ways of doing things to avoid making those mistakes or to correct them when you see them. Of course, knowing the right way to overcome specific problems using design patterns is also crucial. Anti-patterns and code smells Anti-patterns and code smells are bad architectural practices or tips about possible bad design. Learning about best practices is as important as learning about bad ones, which is where we start. The book highlights multiple anti-patterns and code smells to help you get started. Next, we briefly explore the first few. Anti-patterns An anti-pattern is the opposite of a design pattern: it is a proven flawed technique that will most likely cause you trouble and cost you time and money (and probably give you headaches).An anti-
  • 25. pattern is a pattern that seems a good idea and seems to be the solution you were looking for, but it causes more harm than good. Some anti-patterns started as legitimate design patterns and were labelled anti-patterns later. Sometimes, it is a matter of opinion, and sometimes the classification can be influenced by the programming language or technologies.Let’s look at an example next. We will explore some other anti-patterns throughout the book. Anti-pattern – God Class A God class is a class that handles too many things. Typically, this class serves as a central entity which many other classes inherit or use within the application it is the class that knows and manages everything in the system; it is the class. On the other hand, it is also the class that nobody wants to update, which breaks the application every time somebody touches it: it is an evil class!The best way to fix this is to segregate responsibilities and allocate them to multiple classes rather than concentrating them in a single class. We look at how to split responsibilities throughout the book, which helps create more robust software.If you have a personal project with a God class at its core, start by reading the book and then try to apply the principles and patterns you learn to divide that class into multiple smaller classes that interact together. Try to organize those new classes into cohesive units, modules, or assemblies.To help fix God classes, we dive into architectural principles in Chapter 3, Architectural Principles, opening the way to concepts such as responsibility segregation. Code smells A code smell is an indicator of a possible problem. It points to areas of your design that could benefit from a redesign. By “code smell,” we mean “code that stinks” or “code that does not smell right.”It is important to note that a code smell only indicates the possibility of a problem; it does not mean a problem exists. Code smells are usually good indicators, so it is worth analyzing your software’s “smelly” parts.An excellent example is when a method requires many comments to explain its logic. That often means that the code could be split into smaller methods with proper names, leading to more readable code and allowing you to get rid of those pesky comments.Another note about comments is that they don’t evolve, so what often happens is that the code described by a comment changes, but the comment remains the same. That leaves a false or obsolete description of a block of code that can lead a developer astray.The same is also true with method names. Sometimes, the method’s name and body tell a different story, leading to the same issues. Nevertheless, this happens less often than orphan or obsolete comments since programmers tend to read and write code better than spoken language comments. Nonetheless, keep that in mind when reading, writing, or reviewing code. Code smell – Control Freak An excellent example of a code smell is using the new keyword. This indicates a hardcoded dependency where the creator controls the new object and its lifetime. This is also known as the Control Freak anti-pattern, but I prefer to box it as a code smell instead of an anti-pattern since the new keyword is not intrinsically wrong.At this point, you may be wondering how it is possible not to use the new keyword in object-oriented programming, but rest assured, we will cover that and expand on the control freak code smell in Chapter 7, Deep Dive into Dependency Injection. Code smell – Long Methods The long methods code smell is when a method extends to more than 10 to 15 lines of code. That is a good indicator that you should think about that method differently. Having comments that separate multiple code blocks is a good indicator of a method that may be too long.Here are a few examples of what the case might be: The method contains complex logic intertwined in multiple conditional statements.
  • 26. The method contains a big switch block. The method does too many things. The method contains duplications of code. To fix this, you could do the following: Extract one or more private methods. Extract some code to new classes. Reuse the code from external classes. If you have a lot of conditional statements or a huge switch block, you could leverage a design pattern such as the Chain of Responsibility, or CQRS, which you will learn about in Chapter 10, Behavioral Patterns, and Chapter 14, Mediator and CQRS Design Patterns. Usually, each problem has one or more solutions; you need to spot the problem and then find, choose, and implement one of the solutions. Let’s be clear: a method containing 16 lines does not necessarily need refactoring; it could be OK. Remember that a code smell indicates that there might be a problem, not that there necessarily is one—apply common sense. Understanding the web – request/response Before going any further, it is imperative to understand the basic concept of the web. The idea behind HTTP 1.X is that a client sends an HTTP request to a server, and then the server responds to that client. That can sound trivial if you have web development experience. However, it is one of the most important web programming concepts, irrespective of whether you are building web APIs, websites, or complex cloud applications.Let’s reduce an HTTP request lifetime to the following: 1. The communication starts. 2. The client sends a request to the server. 3. The server receives the request. 4. The server does something with the request, like executing code/logic. 5. The server responds to the client. 6. The communication ends. After that cycle, the server is no longer aware of the client. Moreover, if the client sends another request, the server is unaware that it responded to a request earlier for that same client because HTTP is stateless.There are mechanisms for creating a sense of persistence between requests for the server to be “aware” of its clients. The most well-known of these is cookies.If we dig deeper, an HTTP request comprises a header and an optional body. Then, requests are sent using a specific method. The most common HTTP methods are GET and POST . On top of those, extensively used by web APIs, we can add PUT , DELETE , and PATCH to that list.Although not every HTTP method accepts a body, can respond with a body, or should be idempotent, here is a quick reference table: Method Request has body Response has body Idempotent GET No* Yes Yes POST Yes Yes No PUT Yes No Yes PATCH Yes Yes No DELETE May May Yes * Sending a body with a GET request is not forbidden by the HTTP specifications, but the semantics of such a request are not defined either. It is best to avoid sending GET requests with a body. An idempotent request is a request that always yields the same result, whether it is sent once or multiple times. For example, sending the same POST request multiple times should create multiple
  • 27. similar entities, while sending the same DELETE request multiple times should delete a single entity. The status code of an idempotent request may vary, but the server state should remain the same. We explore those concepts in more depth in Chapter 4, Model-View-Controller.Here is an example of a GET request: GET http: //www.forevolve.com/ HTTP/1.1 Host: www.forevolve.com Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9,fr-CA;q=0.8,fr;q=0.7 Cookie: ... The HTTP header comprises a list of key/value pairs representing metadata that a client wants to send to the server. In this case, I queried my blog using the GET method and Google Chrome attached some additional information to the request. I replaced the Cookie header’s value with ... because it can be pretty large and that information is irrelevant to this sample. Nonetheless, cookies are passed back and forth like any other HTTP header. Important note about cookies The client sends cookies, and the server returns them for every request-response cycle. This could kill your bandwidth or slow down your application if you pass too much information back and forth (cookies or otherwise). One good example would be a serialized identity cookie that is very large. Another example, unrelated to cookies but that created such a back-and-forth, was the good old Web Forms ViewState . This was a hidden field sent with every request. That field could become very large when left unchecked. Nowadays, with high-speed internet, it is easy to forget about those issues, but they can significantly impact the user experience of someone on a slow network. When the server decides to respond to the request, it returns a header and an optional body, following the same principles as the request. The first line indicates the request’s status: whether it was successful. In our case, the status code was 200 , which indicates success. Each server can add more or less information to its response. You can also customize the response with code.Here is the response to the previous request: HTTP/1.1 200 OK Server: GitHub.com Content-Type: text/html; charset=utf-8 Last-Modified: Wed, 03 Oct 2018 21:35:40 GMT ETag: W/"5bb5362c-f677" Access-Control-Allow-Origin: * Expires: Fri, 07 Dec 2018 02:11:07 GMT Cache-Control: max-age=600 Content-Encoding: gzip X-GitHub-Request-Id: 32CE:1953:F1022C:1350142:5C09D460 Content-Length: 10055 Accept-Ranges: bytes Date: Fri, 07 Dec 2018 02:42:05 GMT Via: 1.1 varnish Age: 35 Connection: keep-alive X-Served-By: cache-ord1737-ORD X-Cache: HIT X-Cache-Hits: 2 X-Timer: S1544150525.288285,VS0,VE0
  • 28. Vary: Accept-Encoding X-Fastly-Request-ID: 98a36fb1b5642c8041b88ceace73f25caaf07746 <Response body truncated for brevity> Now that the browser has received the server’s response, it renders the HTML webpage. Then, for each resource, it sends another HTTP call to its URI and loads it. A resource is an external asset, such as an image, a JavaScript file, a CSS file, or a font.After the response, the server is no longer aware of the client; the communication has ended. It is essential to understand that to create a pseudo-state between each request, we need to use an external mechanism. That mechanism could be the session-state leveraging cookies, simply using cookies, or some other ASP.NET Core mechanisms, or we could create a stateless application. I recommend going stateless whenever possible. We write primarily stateless applications in the book. Note If you want to learn more about session and state management, I left a link in the Further reading section at the end of the chapter. As you can imagine, the backbone of the internet is its networking stack. The Hypertext Transfer Protocol (HTTP) is the highest layer of that stack (layer 7). HTTP is an application layer built on the Transmission Control Protocol (TCP). TCP (layer 4) is the transport layer, which defines how data is moved over the network (for instance, the transmission of data, the amount of transmitted data, and error checking). TCP uses the Internet Protocol (IP) layer to reach the computer it tries to talk to. IP (layer 3) represents the network layer, which handles packet IP addressing.A packet is a chunk of data that is transmitted over the wire. We could send a large file directly from a source to a destination machine, but that is not practical, so the network stack breaks down large items into smaller packets. For example, the source machine breaks a file into multiple packets, sends them to the target machine, and then the target reassembles them back into the source file. This process allows numerous senders to use the same wire instead of waiting for the first transmission to be done. If a packet gets lost in transit, the source machine can also send only that packet back to the target machine.Rest assured, you don’t need to understand every detail behind networking to program web applications, but it is always good to know that HTTP uses TCP/IP and chunks big payloads into smaller packets. Moreover, HTTP/1 limits the number of parallel requests a browser can open simultaneously. This knowledge can help you optimize your apps. For example, a high number of assets to load, their size, and the order in which they are sent to the browser can increase the page load time, the perceived page load time, or the paint time.To conclude this subject and not dig too deep into networking, HTTP/1 is older but foundational. HTTP/2 is more efficient and supports streaming multiple assets using the same TCP connection. It also allows the server to send assets to the client before it requests the resources, called a server push.If you find HTTP interesting, HTTP/2 is an excellent place to start digging deeper, as well as the HTTP/3 proposed standard that uses the QUIC transport protocol instead of HTTP (RFC 9114). ASP.NET Core 7.0+ supports HTTP/3, which is enabled by default in ASP.NET Core 8.0.Next, let’s quickly explore .NET. Getting started with .NET A bit of history: .NET Framework 1.0 was first released in 2002. .NET is a managed framework that compiles your code into an Intermediate Language (IL) named Microsoft Intermediate Language (MSIL). That IL code is then compiled into native code and executed by the Common Language Runtime (CLR). The CLR is now known simply as the .NET runtime. After releasing several versions of .NET Framework, Microsoft never delivered on the promise of an interoperable stack. Moreover, many flaws were built into the core of .NET Framework, tying it to Windows.Mono, an open-source project, was developed by the community to enable .NET code to run on non- Windows OSes. Mono was used and supported by Xamarin, acquired by Microsoft in 2016. Mono enabled .NET code to run on other OSes like Android and iOS. Later, Microsoft started to develop an official cross-platform .NET SDK and runtime they named .NET Core.The .NET team did a magnificent job building ASP.NET Core from the ground up, cutting out compatibility with the older .NET Framework versions. That brought its share of problems at first, but .NET Standard alleviated
  • 29. the interoperability issues between the old .NET and the new .NET.After years of improvements and two major versions in parallel (Core and Framework), Microsoft reunified most .NET technologies into .NET 5+ and the promise of a shared Base Class Library (BCL). With .NET 5, .NET Core simply became .NET while ASP.NET Core remained ASP.NET Core. There is no .NET “Core” 4, to avoid any potential confusion with .NET Framework 4.X.New major versions of .NET release every year now. Even-number releases are Long-Term Support (LTS) releases with free support for 3 years, and odd-number releases (Current) have free support for only 18 months.The good thing behind this book is that the architectural principles and design patterns covered should remain relevant in the future and are not tightly coupled with the versions of .NET you are using. Minor changes to the code samples should be enough to migrate your knowledge and code to new versions.Next, let’s cover some key information about the .NET ecosystem. .NET SDK versus runtime You can install different binaries grouped under SDKs and runtimes. The SDK allows you to build and run .NET programs, while the runtime only allows you to run .NET programs.As a developer, you want to install the SDK on your deployment environment. On the server, you want to install the runtime. The runtime is lighter, while the SDK contains more tools, including the runtime. .NET 5+ versus .NET Standard When building .NET projects, there are multiple types of projects, but basically, we can separate them into two categories: Applications Libraries Applications target a version of .NET, such as net5.0 and net6.0 . Examples of that would be an ASP.NET application or a console application.Libraries are bundles of code compiled together, often distributed as a NuGet package. .NET Standard class library projects allow sharing code between .NET 5+, and .NET Framework projects. .NET Standard came into play to bridge the compatibility gap between .NET Core and .NET Framework, which eased the transition. Things were not easy when .NET Core 1.0 first came out.With .NET 5 unifying all the platforms and becoming the future of the unified .NET ecosystem, .NET Standard is no longer needed. Moreover, app and library authors should target the base Target Framework Moniker (TFM), for example, net8.0 . You can also target netstandard2.0 or netstandard2.1 when needed, for example, to share code with .NET Framework. Microsoft also introduced OS-specific TFMs with .NET 5+, allowing code to use OS- specific APIs like net8.0-android and net8.0-tvos . You can also target multiple TFMs when needed. Note I’m sure we will see .NET Standard libraries stick around for a while. All projects will not just migrate from .NET Framework to .NET 5+ magically, and people will want to continue sharing code between the two. The next versions of .NET are built over .NET 5+, while .NET Framework 4.X will stay where it is today, receiving only security patches and minor updates. For example, .NET 8 is built over .NET 7, iterating over .NET 6 and 5.Next, let’s look at some tools and code editors. Visual Studio Code versus Visual Studio versus the command-line interface How can one of these projects be created? .NET Core comes with the dotnet command-line interface (CLI), which exposes multiple commands, including new . Running the dotnet new command in a terminal generates a new project.To create an empty class library, we can run the following commands:
  • 30. md MyProject cd MyProject dotnet new classlib That would generate an empty class library in the newly created MyProject directory.The -h option helps discover available commands and their options. For example, you can use dotnet -h to find the available SDK commands or dotnet new -h to find out about options and available templates.It is fantastic that .NET now has the dotnet CLI. The CLI enables us to automate our workflows in continuous integration (CI) pipelines while developing locally or through any other process.The CLI also makes it easier to write documentation that anyone can follow; writing a few commands in a terminal is way easier and faster than installing programs like Visual Studio and emulators.Visual Studio Code is my favourite text editor. I don’t use it much for .NET coding, but I still do to reorganize projects, when it’s CLI time, or for any other task that is easier to complete using a text editor, such as writing documentation using Markdown, writing JavaScript or TypeScript, or managing JSON, YAML, or XML files. To create a C# project, a Visual Studio solution, or to add a NuGet package using Visual Studio Code, open a terminal and use the CLI.As for Visual Studio, my favourite C# IDE, it uses the CLI under the hood to create the same projects, making it consistent between tools and just adding a user interface on top of the dotnet new CLI command.You can create and install additional dotnet new project templates in the CLI or even create global tools. You can also use another code editor or IDE if you prefer. Those topics are beyond the scope of this book. An overview of project templates Here is an example of the templates that are installed ( dotnet new --list ): Figure 1.1: Project templates A study of all the templates is beyond the scope of this book, but I’d like to visit the few that are worth mentioning, some of which we will use later: dotnet new console creates a console application dotnet new classlib creates a class library dotnet new xunit creates an xUnit test project dotnet new web creates an empty web project dotnet new mvc scaffolds an MVC application dotnet new webapi scaffolds a web API application Running and building your program
  • 31. If you are using Visual Studio, you can always hit the play button, or F5, and run your app. If you are using the CLI, you can use one of the following commands (and more). Each of them also offers different options to control their behaviour. Add the -h flag with any command to get help on that command, such as dotnet build -h : Command Description dotnet restore Restore the dependencies (a.k.a. NuGet packages) based on the .csproj or .sln file present in the current dictionary. dotnet build Build the application based on the .csproj or .sln file present in the current dictionary. It implicitly runs the restore command first. dotnet run Run the current application based on the .csproj file present in the current dictionary. It implicitly runs the build and restore commands first. dotnet watch run Watch for file changes. When a file has changed, the CLI updates the code from that file using the hot-reload feature. When that is impossible, it rebuilds the application and then reruns it (equivalent to executing the run command again). If it is a web application, the page should refresh automatically. dotnet test Run the tests based on the .csproj or .sln file present in the current directory. It implicitly runs the build and restore commands first. We cover testing in the next chapter. dotnet watch test Watch for file changes. When a file has changed, the CLI reruns the tests (equivalent to executing the test command again). dotnet publish Publish the current application, based on the .csproj or .sln file present in the current directory, to a directory or remote location, such as a hosting provider. It implicitly runs the build and restore commands first. dotnet pack Create a NuGet package based on the .csproj or .sln file present in the current directory. It implicitly runs the build and restore commands first. You don’t need a .nuspec file. dotnet clean Clean the build(s) output of a project or solution based on the .csproj or .sln file present in the current directory. Technical requirements Throughout the book, we will explore and write code. I recommend installing Visual Studio, Visual Studio Code, or both to help with that. I use Visual Studio and Visual Studio Code. Other alternatives are Visual Studio for Mac, Riders, or any other text editor you choose.Unless you install Visual Studio, which comes with the .NET SDK, you may need to install it. The SDK comes with the CLI we explored earlier and the build tools for running and testing your programs. Look at the README.md file in the GitHub repository for more information and links to those resources.The source code of all chapters is available for download on GitHub at the following address: https://adpg.link/net6. Summary This chapter looked at design patterns, anti-patterns, and code smells. We also explored a few of them. We then moved on to a recap of a typical web application’s request/response cycle.We continued by exploring .NET essentials, such as SDK versus runtime and app targets versus .NET Standard. We then dug a little more into the .NET CLI, where I laid down a list of essential commands, including dotnet build and dotnet watch run . We also covered how to create new projects. This has set us up to explore the different possibilities we have when building our .NET applications.In the next two chapters, we explore automated testing and architectural principles. These are foundational chapters for building robust, flexible, and maintainable applications. Questions
  • 32. Let’s take a look at a few practice questions: 1. Can we add a body to a GET request? 2. Why are long methods a code smell? 3. Is it true that .NET Standard should be your default target when creating libraries? 4. What is a code smell? Further reading Here are some links to consolidate what has been learned in the chapter: Overview of how .NET is versioned: https://adpg.link/n52L .NET CLI overview: https://adpg.link/Lzx3 Custom templates for dotnet new : https://adpg.link/74i2 Session and state management in ASP.NET Core: https://adpg.link/Xzgf
  • 33. Random documents with unrelated content Scribd suggests to you:
  • 34. —Poor man! zeide zij, toen Giuseppe vertrokken was. Ja, ik heb hem maar van tante overgenomen. Hij had het zoo druk in het palazzo Belloni. Hij heeft hier heel weinig te doen, en hij heeft een jongen hofmeester onder zich. Het personeel moest toch worden uitgebreid. Hij heeft hier een prettigen ouden dag: poor old dear Giuseppe ... Bob, nu heb je je niet verkleed! —Goed kind! dacht Cornélie, terwijl zij allen opstonden en Urania haar broêr als een bedorven jongen heel zachtjes verweet, dat hij met zijn kuiten aan tafel kwam. XXXV. Zij waren in de groote sombere eetzaal, met de bijna zwarte arazzi, met het bijna zwarte plafond in caissons, met al het bijna zwarte eiken beeldhouwwerk; met de zwarte monumentale schouw; er boven, in zwart marmer, het familiewapen. Het kaarsenlicht van twee groote zilveren luchters op tafel gaf alleen wat schijn over het damast en kristal, maar verder bleef de te groote zaal in een sombere duisternis van schaduw, in de hoeken opgehoopt met massa's dikke schaduw, dunnere schaduw van het plafond wazende af, als eene vervluchtiging van donker fluweel, dat boven den kaarsenschijn in atomen rondzweefde. De antieke oudheid van San Stefano drukte hier zwaar neêr als een ontzag, tegelijk met een melancholie van zwart zwijgen en zwarten hoogmoed. Hier klonken de woorden gedempt. Dit was nog geheel gebleven als het altijd geweest was, dit was als iets heiligs van hunne voorname traditie, en waaraan Urania niets zoû durven veranderen, als dorst zij er bijna niet spreken en eten. Men wachtte een oogenblik, toen een dubbele deur werd geopend. En als een schim trad binnen een groote oude grijze man, die zijn arm gestoken had door den arm van den geestelijke naast hem. De oude prins Ercole kwam heel langzaam en waardig nader, terwijl de kapelaan zijn tred regelde naar die
  • 35. langzame waardigheid. Hij droeg een lange zwarte jas van een ouden ruimen snit, die in plooien om hem hing met iets van een tabbaard, en op zijn glinsterend grijze haren, even golvend in den nek, een zwart fluweelen kalot. En men naderde hem met heel veel eerbied. De marchesa eerst, toen Urania, die hij heel langzaam—als wijdde hij haar—een kus gaf op het voorhoofd; toen naderde hem Gilio en kuste zijn vader onderdanig de hand. De grijsaard knikte den jongen Hope toe, die boog en wendde zijn blik naar Cornélie. Urania stelde haar voor. En als verleende hij een audientie, sprak de oude prins haar enkele minzame woorden toe en vroeg haar of Italië haar beviel. Toen Cornélie geantwoord had, ging prins Ercole zitten en gaf zijn kalot aan Giuseppe, die haar diep buigend aannam. Daarop zetten zich allen: de marchesa met den kapelaan over prins Ercole, die tusschen Cornélie en Urania zat, Gilio naast Cornélie, Bob Hope naast zijne zuster. —Mijn kuiten zijn niet te zien, fluisterde hij zijn zuster toe. —Cht! zeide Urania. Giuseppe, herlevende in zijn oude waardigheid, vulde aan een dressoir, plechtstatig, de borden met soep. Hij vond zich hier in zijn element terug; hij was zichtbaar Urania dankbaar; hij had een trek van voornamen zielevrede en zag er in zijn rok uit als een oude diplomaat. Hij amuzeerde Cornélie, die dacht aan Belloni, als hij ongeduldig werd, omdat de gasten niet kwamen, als hij uitvaarde tegen de jonge blanc-becs van kellners, die de marchesa voor de goedkoopte in dienst nam. Toen twee lakeien de soep hadden rondgediend, stond de kapelaan op, en zei het Benedicite. Er werd nog geen woord gesproken. Men at de soep in stilte, terwijl de drie bedienden onbewegelijk stonden. De lepels tikkelden tegen het porcelein en de marchesa smakte. De luchters trillerden nu en dan en van het plafond viel drukkender de schaduw, als vervluchtiging van fluweel Toen wendde prins Ercole zich tot de marchesa. En beurtelings wendde hij zich tot iedereen met een vriendelijk neêrbuigende waardigheid, in het Fransch, in het Italiaansch. Het gesprek werd iets algemeener, maar de oude prins bleef het leiden.
  • 36. En hij was heel vriendelijk tegen Urania, merkte Cornélie op.... Maar Cornélie herinnerde zich Gilio's woorden: papa heeft bijna een beroerte gehad, omdat de oude Hope op Urania's bruidschat beknibbelde. Tien millioen? Vijf millioen? Geen drie millioen! Dollars? Lires!! En de oude prins scheen haar eensklaps toe als het vergrijsd egoïsme van San Stefano's glorie en adelhoogmoed, scheen haar toe de levende schim dier opschaduwing van verleden, zooals zij het dien middag gevoeld had, starende met Urania in het diepe, blauwe meer: de veel eischende schim; de millioenen eischende schim, de nieuwe levensvatbaarheid eischende schim; spectrale paraziet, die zijn gedeprecieerde symbolen verkocht had aan de ijdelheid van een nieuw koopmanshuis, maar in zijn voornaamheid niet had opgekund tegen de slimheid van den koopman. Hun prinsesse- en hertoginnetitel voor nog geen drie millioen lire's! Papa had bijna een beroerte gehad ... had Gilio gezegd. En Cornélie, in de afgemeten minzame stijfte van het door prins Ercole geleide gesprek, zag van den ouden prins-hertog,—zeventig jaar—, naar den jongen frisschen Far-Wester—achttien, en zag van hem naar prins Gilio: de hoop van het oude geslacht, hun eenige hoop. Hier, in de somberheid van die eetzaal, waar hij zich verveelde, bovendien nog uit zijn humeur, zag zij hem klein, nietig, dunnetjes, een schraal, gedistingeerd viveurtje; zijn karbonkeloogen, die vroolijk, pervers geestig schitteren konden, zagen nu mat onder de vallende oogleden uit op zijn bord, waarin hij lusteloos pikte. Zij kreeg medelijden met hem, en zij dacht aan de gouden bruidskamer.... Zij minachtte hem een beetje. Zij beschouwde hem niet als een man, hij kon niet wat hij wilde: zij beschouwde hem meer als een stouten jongen. En hij moest jaloersch zijn van Bob, dacht zij: van zijn frisch bloed, dat tintelde onder zijn wangen, van zijn breede schouders en zijn breede borst. Maar toch, hij amuzeerde haar. Aardig kon hij zijn, vroolijk en geestig, en vlug, als hij was opgewekt, vlug in zijn woorden, in zijn geest. Zij hield wel van hem. En dan zijn goed hart. De armband en vooral de duizend lire. Zij dacht er steeds aan met aandoening; hoe was zij aangedaan geweest, tijdens die wandeling, voorbij de post heen en weêr;
  • 37. aangedaan om zijn brief en om zijn royale hulp. Hij had geen fond, hij was haar geen man: maar hij was geestig en had een zeer goed hart. Zij hield van hem, als van een vriend en prettig kameraad. Wat was hij neêrgeslagen en uit zijn humeur. Maar waarom waagde hij zich dan ook aan die dwaze attaques...! Zij richtte nu en dan het woord tot hem, maar zij vermocht hem niet op te wekken. Trouwens, het gesprek sleepte stijf en minzaam voort, steeds geleid door prins Ercole. Het diner liep ten einde en prins Ercole rees op. Uit de handen van Giuseppe ontving hij zijn kalot, allen namen afscheid van hem, de deuren werden geopend en, aan den arm van zijn kapelaan, trok prins Ercole zich terug. Gilio, boos, verdween. De marchesa, nog rillende voor Cornélie, verdween en wees, in haar japon, de gettatura naar haar toe. En Urania nam Cornélie en Bob meê terug naar haar salon. Zij herademden alle drie. Zij spraken vrij uit, in het Engelsch nu: de jongen zei wanhopig, dat hij niet genoeg at, dat hij niet dorst eten tot zijn honger gestild was, en Cornélie lachte, hem prettig vindend, om zijn gezondheid, terwijl Urania beschuitjes voor hem zocht en een stuk cake, van de tea nog over, en hem brood en vleesch beloofde, voor zij naar bed zouden gaan. En zij ontspanden hun gemoed na het plechtstatige middagmaal. Urania zei, dat zij den ouden prins anders nooit zagen, dan aan het diner, maar zij zocht hem 's morgens altijd op, bleef een uurtje met hem spreken of speelde met hem schaak. Anders speelde hij schaak met den kapelaan. Zij had het druk, Urania. De reorganizatie der huishouding, indertijd overgelaten aan een arme bloedverwante, die nu in Rome van een pensioen leefde, kostte haar veel tijd: zij besprak in de morgenuren van détails met prins Ercole, die, niettegenstaande zijne afzondering, van alles op de hoogte was. Dan had zij de beraadslagingen met haar Romeinschen architect over de restauraties van het kasteel: zij hadden soms plaats in het kabinet van den ouden prins. Dan liet zij in de stad een groot gesticht bouwen, een Albergo dei Poveri, waarvoor de oude Hope haar afzonderlijk doteerde: gesticht voor oude mannen en vrouwen. Toen zij voor het eerst te San Stefano kwam, hadden haar getroffen de vervallen, in elkaâr stortende huizen en huisjes der arme wijken,
  • 38. melaatsch en schurftig van vuil, opgegeten door hun eigen gebrek, waar een geheele bevolking planteleefde als paddestoelen. Zij liet nu bouwen het gesticht voor de ouden, zij bezorgde op het domein werk aan de gezonden en jongen, zij bemoeide zich met de verwaarloosde kinderen, zij had een nieuwe school opgericht. Zij sprak over dit alles doodeenvoudig, de cake snijdende voor haar broêr Bob, die zich te goed deed na de etiquette van het diner. Zij noodigde Cornélie 's morgens eens meê te gaan naar het werk van de Albergo, naar de nieuwe school, onder twee geestelijken van Rome, haar door de monsignori aanbevolen.— Door de spitsboogramen schemerde in de diepte de stad, en onder den zoelen, met starren bezaaiden, zomernacht, rees de silhouet van den Dom omhoog. En Cornélie dacht: het is niet alleen voor schim en schaduw, dat zij hier is gekomen, de rijke Amerikaansche, die adel zoo lief vond—"so nice"—het kind, dat staaltjes verzamelde van de baljaponnen der koningin—album, dat zij nu als "zwarte" prinses verborg—het meisje, dat met haar licht laken tailorpak trippelde door het Forum, en niet begreep noch oud Rome, noch nieuw dagende toekomst.... En nu Cornélie door de stille zware nacht van het kasteel van San Stefano ging naar haar eigen kamer, dacht zij: ik schrijf, maar zij doet. Ik droom en ik denk, maar zij, zij leert de kinderen, al is het met een priester; zij voedt en huisvest oude mannen en vrouwen. Toen, in haar kamer, uitziende naar het meer onder den zomernacht, bepoeierd met sterren, dacht zij na, dat zij ook gaarne rijk zoû willen zijn en een groot arbeidsveld zoû willen hebben. Want nu had zij geen veld, nu had zij geen geld, en nu ... nu verlangde zij alleen naar Duco, en moest hij haar niet te lang alleen laten, op dit kasteel, in al deze sombere grootheid, die op haar drukte als met eeuwen. XXXVI.
  • 39. Den volgenden morgen leidde Urania's kamenier Cornélie door een warreling van galerijen naar buiten, waar men ontbijten zoû, toen zij op de trap Gilio ontmoette. De kamenier keerde terug. —Ik heb nog altijd geleide noodig om mijn weg te vinden, lachte Cornélie. Hij bromde wat. —Hoe heeft u geslapen, prins? Hij bromde iets. —Zeg eens, prins, dat booze humeur moet veranderen. Hoort u? Het moet. Ik wil het. Ik wil vandaag geen bouderie meer zien, en hoop, dat u zoo spoedig mogelijk uw vroolijken, geestigen toon van gesprek weêr aanneemt, dien ik in u apprecieer. Hij mopperde iets. —Adieu, prins, zei Cornélie kort. En zij keerde op haar weg terug. —Waar gaat u heen? vroeg hij. —Naar mijn kamer. Ik zal op mijn kamer ontbijten. —Maar waarom? —Omdat u me niet bevalt als gastheer. —Ik niet? —Neen, u niet. Gisteren beleedigt u me, ik verdedig mij, u blijft grof, ik ben dadelijk weêr lief als altijd, geef u een hand en zelfs een zoen. Aan het diner boudeert u me op een alleronbeleefdste manier. U gaat naar uw kamer zonder me goeden nacht te wenschen. U komt me van morgen tegen zonder me te begroeten. U bromt, boudeert en moppert als een stout kind. Uw oogen staan nijdig, u ziet geel van galligheid. Bepaald, u ziet er slecht uit. Het flatteert u niets. U is alleronaangenaamst, grof, onbeleefd, en klein. Ik heb geen lust met u te ontbijten in zoo een stemming.... En ik ga naar mijn kamer.
  • 40. —Neen, smeekte hij. —Jawel. —Neen, neen. —Nu wees dan anders. Doe u geweld aan, denk niet meer aan uw nederlaag, en wees lief tegen me. U doet maar als de beleedigde partij, terwijl ik de beleedigde ben. Maar ik kan niet boudeeren, en ik ben niet klein. Ik kan niet klein doen. Ik vergeef u, vergeef mij ook. Zeg iets liefs, zeg iets aardigs. —Ik ben dol op u. —Ik merk er niets van. Als u dol op me is, wees dan vriendelijk, beleefd, vroolijk en geestig. Ik eisch het van u als van mijn gastheer. —Ik zal niet meer boudeeren ... maar ik hoû zooveel van u! En u heeft me geslagen. —Vergeeft u nooit die zelfverdediging? —Neen, nooit! —Adieu, dan. Zij keerde zich om. —Neen, neen, ga niet terug. Ga meê naar de pergola, waar wij ontbijten. Ik vraag u vergiffenis. Ik maak u mijn excuzes. Ik zal niet grof meer zijn en niet klein. U, u is niet klein. U is de bizonderste vrouw, die ik ken. Ik aanbid u. —Aanbid dan in stilte, en amuzeer me. Zijn oogen, zijn zwarte karbonkeloogen, begonnen weêr op te leven, op te lachen; zijn gelaat ontrimpelde en klaarde op. —Ik ben te verdrietig om amuzant te zijn. —Ik geloof er niets van. —Heusch, ik heb verdriet, ik lijd.... —Arme prins!
  • 41. —U gelooft mij maar niet. U neemt me nooit in ernst aan. Ik moet maar uw clown, uw paljas zijn. En ik heb u lief, en mag niets hopen? Zeg, mag ik nooit iets hopen? —Niet veel. —U is onverbiddelijk, en zoo streng. —Ik moet wel streng tegen u zijn, u is net een stoute jongen.... O, daar zie ik de pergola. Dus, u belooft me beterschap? —Ik zal zoet zijn. —En amuzant. Hij zuchtte. —Povero Gilio! zuchtte hij. Arme paljas! Zij lachte. In de pergola waren Urania en Bob Hope. De pergola, begroeid met wijngaard en een roze bruidstraan, die met roze bloementrossen neêrhing, verhief een rij van marmeren karyatiden en hermen—nimfen, saters en faunen—wier bovenlijven eindigden in slank voetstuk van sculptuur en die met opgeheven handen het vlakke blad- en bloemdak steunden; terwijl in het midden een open rotonde was als een open tempel, de cirkelbalustrade ook door karyatiden verheven en waar een antieke sarkofaag tot cisterna was vermetseld. In de pergola was een tafel gedekt voor het ontbijt; men ontbeet hier zonder den ouden prins Ercole, ook de marchesa ontbeet op haar kamer. Het was acht uur, een morgenfrischheid ademde nog op uit het meer, een waas van blauw fluweel donsde over de heuvelen, waartusschen als in zacht gebogen cannelures het meer verzonk als een ovalen beker. —O, wat is het hier mooi! riep Cornélie verrukt. Het ontbijt was een zonnig en vroolijk maal, na het zwartsombere diner van gisteren. Urania was vol levendigheid over haar Albergo, die zij straks met Cornélie zoû bezoeken, Gilio vond zijne beminnelijkheid terug en Bob at goed. En toen Bob daarna ging fietsen, ging Gilio zelfs met de dames meê naar de stad. Zij reden
  • 42. stapvoets in een landauer den slotweg af. De zon werd warmer en het oude stadje blankte op, roomwit en witgrijs van huizen als steenen spiegels, waarin de zon kaatste; de pleintjes als putten, waarin de zon gloed goot. Voor het werk van de albergo hield de koetsier stil, stegen zij uit en de aannemer kwam plichtplegerig nader, de zweetende metselaars zagen uit naar den prins en de prinses. Het was smoorheet. Gilio veegde zich telkens het voorhoofd af, en school achter de parasol van Cornélie. Maar Urania was éen levendigheid en belangstelling, vlug en energisch in haar wit piqué pakje, met haar witten matelot onder haar witte parasol, tripte zij over balken langs stapelingen van baksteen en cement en kalkbakken met haar aannemer voort, liet zich verklaren en gaf raad, was het niet altijd eens, en trok een wijs gezicht; zeide, dat die en die afmetingen haar tegenvielen, geloofde niet wat de aannemer haar verzekerde, dat naarmate het gebouw vorderde, de afmetingen haar zouden meêvallen, schudde haar hoofd, drukte dìt op het hart, drukte dàt op het hart, alles in een vlug, niet geheel correct, en hakkelig Italiaansch, dat zij kauwde tusschen hare tanden. Maar Cornélie vond haar lief, vond haar aardig, Cornélie vond haar de prinses di Forte-Braccio. Er was geen twijfel aan. Terwijl Gilio, bang zijn licht flanellen pak en gele schoenen te bezoedelen aan de kalk, in de schaduw van haar parasol bleef, puffende van de warmte, zonder belang, was zijn vrouw onvermoeid, dacht zij niet, dat haar witte rok een vuilen rand kreeg, en sprak zij met den aannemer met een zekerheid, levendig maar waardig, om eerbied voor te hebben. Waar had dat kind dat geleerd? Waar had zij haar assimilatie- vermogen vandaan? Waar vandaan had zij die liefde voor San Stefano, die liefde voor zijn armen? Hoe had dat Amerikaansche meisje dat talent verkregen om hare hooge en nieuwe pozitie zoo goed te bekleeden? Admirabile!—vond Gilio haar en fluisterde het Cornélie in. Hij was niet blind voor hare kwaliteiten. Hij vond Urania prachtig, uitstekend; ze verbaasde hem altijd. Geen Italiaansche vrouw van zijn kringen zoû zoo geweest zijn. En ze hielden van haar. De bedienden van het kasteel hielden van haar, Giuseppe zoû voor haar door het vuur gaan, die aannemer bewonderde haar, de metselaars keken haar met eerbied na, omdat zij zoo knap was, en
  • 43. er zooveel van wist en zoo goed was voor hen en hun misère. Admirabile! zei Gilio. Maar hij pufte. Hij wist niets van steenen, balken en afmetingen en begreep niet, waar Urania dien technischen blik vandaan had. Zij was onvermoeid. Zij liep het heele werk door, terwijl hij smeekend naar Cornélie opzag. En eindelijk, in het Engelsch, bad hij zijn vrouw er nu in godsnaam meê uit te scheiden. Zij stegen in, de aannemer groette, de werklui groetten met iets van dankbaarheid en aanhankelijkheid. En ze reden naar den Dom, dien Cornélie wilde bezichtigen, en waar Gilio, terwijl Urania haar vriendelijk rondleidde, genade vroeg aan zijn dames, en op de trappen van het altaar ging zitten, de armen hangende over de knieën, om te bekoelen. XXXII. Er waren zeven dagen verloopen en Duco was aangekomen. Het was na het plechtige diner in de sombere eetzaal, waar Duco was voorgesteld aan prins Ercole, en het was een zomeravond als een droom, toen Cornélie en Duco naar buiten gingen. Het kasteel lag al in zware rust, maar Cornélie had zich door Giuseppe een sleutel laten geven. En zij gingen naar buiten, naar de pergola. De starren poeierden als een blond licht over den nachthemel heen, en aan de toppen der heuvels kroonde de maan en trilde even terug in de mystieke diepte van het meer. Een adem van slapende rozen walmde uit den bloementuin aan de andere zijde der pergola, en beneden, in de dakvlakkende stad, stond aan zijn maanbelicht plein de Dom zijn reuzensilhouet uit tegen de starren. En een slapen was overal, over het meer, over de stad en achter de vensters van het kasteel; de karyatiden en hermen—de saters en nimfen—torsten slapend het looverdak van de pergola, als in een betooverde houding van dienaren der Slaapster. Een krekel knerpte, maar zweeg stil zoodra zij naderden, Duco en Cornélie. En zij zetten zich op een antieke
  • 44. bank, en zij sloeg om zijn lichaam haar armen en drukte zich tegen hem aan. —Een week! fluisterde zij. Een volle week, dat ik je niet gezien heb, Duco, mijn lieveling! Ik kan niet zoo lang zonder je. Bij alles wat ik dacht en zag, en bewonderde, dacht ik aan jou, hoe mooi je het hier zoû vinden. Je bent hier wel eens geweest, als toerist. O, dat is niet het zelfde. Het is hier juist zoo mooi om te blijven, om niet door te loopen, maar om te blijven. Dat meer, die Dom, die heuvels! Die zalen binnen. Verwaarloosd maar zoo mooi. De drie hoven zijn vervallen, de fonteinen brokkelen in elkaâr Maar de stijl van de atrio, de somberheid van de eetzaal, de poëzie van deze pergola ... Duco, is die pergola niet als een antieke ode? We hebben samen wel eens Horatius gelezen, jij vertaalde me de verzen zoo mooi, je improvizeerde zoo heerlijk! Wat ben je toch knap, je weet zoo veel, je voelt zoo mooi. Ik hoû van je oogen, van je stem, en van je heelemaal, van allemaal wat jou is ... ik kan het niet zeggen, Duco. Ik heb mij langzamerhand gewonnen gegeven aan elk woord van je, aan ieder gevoel van je, aan je liefde voor Rome, aan je liefde voor muzea, aan de manier, waarop je die luchten ziet, die je op je aquarellen wascht. Je bent zoo heerlijk kalm, bijna als dit meer. O, lach niet, weer me niet af: ik heb je in geen week gezien, ik heb behoefte zoo eens tegen je te spreken. Is het overdreven? Ik voel hier ook niet gewoon, er is iets in die lucht, in dat licht, dat me zoo laat spreken. Het is zoo mooi, dat ik bijna niet gelooven kan, dat het gewoon leven, gewone realiteit is.... Herinner je te Sorrento op het terras van het hôtel, toen we over de zee uitkeken, over die parelen zee, met Napels zoo wit ver af, toen heb ik zoo gevoeld, maar toen dorst ik zoo niet spreken: het was 's morgens, er waren menschen om ons heen, die wij wel niet zagen, maar die ons zagen en die ik om mij heen vermoedde: maar nu zijn wij alleen, en nu wil ik het je zeggen, in je armen, aan je borst: ik ben zoo gelukkig! Ik hoû zoo van jou! Ik voel mijn ziel, al mijn mooiste voor jou! Je lacht, maar je gelooft me niet. Toch? Geloof je me? —Ja, ik geloof je, ik lach niet om je, ik lach zoo maar.... Ja, het is hier mooi.... Ik ook, ik voel mij zoo gelukkig. Ik ben zoo gelukkig om
  • 45. jou en om mijn kunst. Je hebt me werken geleerd, je hebt mij opgewekt uit mijn droomen! Ik ben zoo gelukkig om de Banieren: ik heb brieven uit Londen: ik zal je ze morgen laten lezen. Ik heb alles aan jou te danken. Het is bijna niet te gelooven, dat dit gewoon leven is. Ik heb het ook zoo stil gehad in Rome. Ik zag niemand, ik werkte maar wat—maar niet veel; en ik at in de osteria alleen. De twee Italianen, je weet wel, hadden, geloof ik, medelijden met me. O, het was een vreeslijke week. Ik kan niet meer buiten je. Herinner je je onze eerste wandelingen en gesprekken in Borghese, en op den Palatijn? Wat waren we toen nog vreemd aan elkaâr, zoo niet samengevoegd. Maar ik voelde het, geloof ik, dadelijk, dat het mooi zoû worden tusschen ons.... Zij zweeg, en bleef aan zijn borst. De krekel knerpte weêr als met een langen triller. Maar verder sliep alles.... —Tusschen ons.... herhaalde ze als in koorts, en ze omhelsde hem geheel. De geheele nacht sliep, en terwijl zij hun leven ademden in elkanders armen, torsten boven hunne hoofden de betooverde karyatiden—faunen en nimfen—slapende het bladerdak der pergola, tusschen hen en de met starren bepoeierde lucht. XXXVIII. Gilio vond de villegiatura op San Stefano verschrikkelijk. Hij moest iederen morgen om zes uur reeds klaar zijn om met prins Ercole, Urania en de marchesa de mis bij te wonen, die de kapelaan in de slotkapel bediende. Daarna wist hij met zijn tijd geen raad. Hij was een paar malen gaan fietsen met Bob Hope, maar de jonge Far Wester was hem te energisch, even als zijne zuster, Urania. Hij flirtte en redetwistte wat met Cornélie, maar in stilte was hij nog steeds beleedigd, en boos op zichzelven en op haar. Hij herinnerde zich
  • 46. haar eerste komst op dien avond, in het Palazzo Ruspoli; toen zij zijn rendez-vous met Urania was komen storen. En in de gouden camera dei sposi was zij hem voor de tweede maal te sterk geweest! Hij ziedde als hij er aan dacht, en hij haatte haar, en hij zwoer zijn groote goden wraak te zullen nemen. Hij vloekte zijn eigen weifelmoedigheid. Hij was te zwak om woest te dwingen en hij had nooit behoeven te dwingen: hij was gewoon, dat men hem toegaf. En van haar, die Hollandsche, moest hij hooren over zijn temperament, dat niet beantwoordde aan het hare! Wat zat er in die vrouw? Wat meende zij er meê? Hij was zoo weinig gewoon te denken, hij was zoo een gedachteloos kind van de gemakkelijke natuur van Italië, zoo gewoon zich te laten leven naar zijn gril en impulsie, dat hij haar nauwlijks begreep,—ofschoon hij den zin van haar woorden vermoedde,— nauwlijks begreep die terughoudendheid. Waarom zoo tegenover hem, de vreemde vrouw met hare nieuwe ideeën van den duivel; die zich niet stoorde aan de wereld, die niets van huwelijk weten wilde, die met een schilder leefde, als zijn maîtresse! Zij had geen godsdienst, en geen moraal— hij wist van godsdienst en van moraal—zij was des duivels; demonisch was zij: wist zij niet alles van de manoeuvres van tante Lucia Belloni, en had tante Lucia hem niet dezer dagen gewaarschuwd, dat zij gevaarlijk was, demonisch, des duivels! Zij was een heks! Waarom wilde zij niet? Had hij niet gisteren nacht door den cour haar silhouet zien gaan in den maneschijn, duidelijk naast de figuur van Van der Staal, en had hij hen niet zien openen de deur van het terras der pergola? En had hij niet éen uur, twee uur, slapeloos gewacht, tot hij ze had zien keeren, sluitende de deur weêr achter zich? En waarom had zij lief alleen hèm, dien schilder? O, hij haatte hem met al de gloeiende haat van zijn ijverzucht, hij haatte haar, om hare uitsluitendheid, om hare minachting, om al hun scherts en flirt, als was hij een paljas, een clown! Wat vroeg hij? Een gunst van liefde zooals zij aan haar minnaar toestond! Hij vroeg niets ernstigs; geen eeden, geen levenslange banden: hij vroeg zoo weinig: een enkel uur van liefde. Het was van geen belang: hij had dat nooit van veel belang beschouwd. En zij, ze weigerde het hem. Neen, hij begreep haar niet, maar wel begreep hij, dat zij hem
  • 47. minachtte, en hij, hij haatte haar en hem. En toch was hij verliefd op haar met al de woede van zijn weêrstreefde passie. In de verveling dier villigiatura, waartoe zijn vrouw hem drong in haar nieuwe liefde voor hun vervallen uilennest, was hem zijn haat en de gedachte aan zijn wraak een bezigheid voor zijn leêge hersenen. Uiterlijk was hij de zelfde weêr als vroeger, en flirtte hij met Cornélie, en zelfs meer dan vroeger, om Van der Staal te plagen. En toen zijne nicht, de gravin di Rosavilla, zijn "witte" nicht—hofdame der koningin—hen voor enkele dagen kwam bezoeken, flirtte hij ook met haar, en poogde hij de ijverzucht van Cornélie te wekken, wat hem maar niet best gelukte, en troostte hij zich met de gravin. Zij stelde hem schadeloos voor zijn teleurstelling. Zij was geen jonge vrouw meer, maar zij had het koude, sculpturale Juno-type, een beetje dom: zij had de Juno-oogen, die puilden: zij was een der toongeefsters aan het Quirinaal en in de "witte" wereld, en haar galante reputatie was algemeen bekend. Zij had met Gilio nooit een liaison gehad, die langer duurde dan een uur. Zij had over de liefde eenvoudige ideeën, met weinig nuance. Vroolijk pervers amuzeerde zij Gilio. En flirtende in hoekjes, zijn voet op den hare, onder haar japon, vertelde Gilio haar van Cornélie, van Duco en van het avontuur in hunne camera dei sposi, en hij vroeg zijn nicht, of zij begreep? Neen, de gravin di Rosavilla begreep ook niet zoo heel goed. Temperament? Ach ja, misschien hield zij—questa Cornelia,—meer van blond of bruin: er waren vrouwen, die deden keuze.... En Gilio lachte.... Het was zoo eenvoudig, l'amore, er was niet veel over te praten. Cornélie was blij, dat Gilio de gravin had. Zij interesseerde zich met Duco, voor haar, Urania's, plannen; hij voerde gesprekken met den architekt. En Duco was verontwaardigd, en gaf den raad niet zooveel te verbouwen in die stijllooze restauratie-manier: het kostte hoopen met geld, en het bedierf alles. Urania was uit het veld geslagen, maar Duco ging voort, brak den architect af, gaf den raad alleen bij te bouwen wat waarlijk stortte in elkaâr, maar zooveel mogelijk te stutten, te steunen en te behouden. En op een morgen verwaardigde zich prins Ercole met Duco, Urania en Cornélie de lange zalen af te loopen. Met alleen te onderhouden
  • 48. en geregeld—meende Duco—, met artistiek te schikken wat nu zonder gedachte op elkaâr stond gepakt, was al zoo veel te doen. De gordijnen? vroeg Urania. Laten, meende Duco: hoogstens nieuwe venstergordijnen, maar het oude roode Venetiaansche damast.... O laten, laten: het was zoo mooi: hier en daar, met veel zorg, kon het worden versteld. Hij schrikte van Urania's idee: nieuwe gordijnen! En de oude prins was verrukt, omdat de restauratie van San Stefano, op die manier, duizenden minder zoû kosten en artistieker zoû zijn: hij beschouwde het geld van zijne schoondochter als het zijne en had het nog liever dan haarzelve. Hij was verrukt: hij nam Duco meê naar zijn bibliotheek: hij toonde hem de oude missalen: de oude familieboeken en documenten, charters en schenkingen: hij toonde hem zijn munten en medailles. Het was alles verrommeld, verwaarloosd, eerst uit geldgebrek en toen uit onverschilligheid gekleinacht, maar nu wilde Urania, met geleerden uit Rome, Florence, Bologna, het familie-muzeum reorganizeeren. De oude prins voelde er wel voor, nu er weêr geld was. En de geleerden kwamen, verbleven op het kasteel, en heele morgens was Duco met hen bezig. Hij genoot. Hij leefde in zijne betoovering van verleden, niet meer in antieken tijd, maar in de middeneeuwen en Renaissance. De dagen waren te kort. En zijn liefde voor San Stefano werd zóó, dat eens een archivaris hem aanzag voor den jongen prins: den prins Virgilio. Aan het diner vertelde prins Ercole de anecdote. En allen lachten, maar Gilio vond de grap eenvoudig onbetaalbaar terwijl de archivaris, die meê aan tafel zat, niet wist hoe hij zich klein zoû maken in verontschuldiging. XXXIX. Gilio had den raad van zijne nicht, de gravin di Rosavilla, opgevolgd. Hij was dadelijk na den eten naar buiten geslopen, en hij liep de pergola af tot de rotonde, waarin het maanlicht viel, als in een witte schaal. Maar er was schaduw achter een paar karyatiden, en daar
  • 49. verborg hij zich. Hij wachtte een uur lang. Maar de nacht sliep, de karyatiden sliepen, roerloos staande en beurende het bladerdak. Hij vloekte en sloop naar binnen. Hij liep op de teenen de corridors af en luisterde aan de deur van Van der Staal. Hij hoorde niets, maar misschien sliep hij...? Maar Gilio sloop verder een anderen corridor door, en luisterde aan de deur van Cornélie. Hij hield den adem in.... Jawel, er klonken stemmen. Zij waren samen! Samen!! Hij krampte de vuisten ineen en liep terug. Maar waarom wond hij zich op! Hij wist immers hunne verhouding. Waarom zouden zij hier niet samen komen. En hij klopte aan bij de gravin.... Den volgenden avond wachtte hij weêr bij de rotonde. Maar zij kwamen niet. Maar na enkele avonden, terwijl hij zat te wachten, zich verbijtend van ergernis, zag hij ze komen. Hij zag Duco de terraspoort achter zich sluiten: het slot knarste van verre, roestig. Langzaam zag hij ze aanloopen en naderen in het licht, vervagen in de schaduw, weêr uit komen in den maneschijn. Zij zetten zich op de marmeren bank.... Wat schenen zij gelukkig! Hij was jaloersch van hun geluk; jaloersch vooral van hem. En wat was zij zacht en teeder, zij, die hem, Gilio, maar goed genoeg vond voor amuzement, voor haar flirt: een clown: zij, de demonische vrouw, was engelachtig met wie zij lief had! Zij boog zich tot haar minnaar met een glimlachende liefkoozing, met een ombuiging van haren arm, met een naderen van hare lippen, met iets innig omstrikkends, met zoo een fluweelen loomte van liefde, als hij niet vermoed had in haar, met haar kouden flirtscherts tegen hem, Gilio. Zij leunde nu tegen Duco's arm, aan zijn borst, haar gezicht tegen het zijne.... O, haar zoen, nu, hoe zette hij Gilio in woede en vlam! Dat was niet meer hare ijskoude zinnen-onverschilligheid tegenover hem, Gilio, in de camera dei sposi! En hij kon zich niet langer inhouden: hij zoû hun dit oogenblik van hun geluk ten minste verstoren. En trillend in zijn zenuwen, kwam hij te voorschijn van achter de karyatide, en liep door de rotonde hen tegemoet. Zij zagen hem niet dadelijk, verloren in elkanders oogen.... Maar eensklaps schrikten zij, beiden tegelijk; de omhelzing van hunne armen viel plotseling, zij stonden in éene
  • 50. beweging op, zij zagen hem aankomen, hem klaarblijkelijk niet dadelijk herkennende. Pas toen hij vlak bij was, herkenden zij hem, en zagen, opgeschrikt, hem zwijgende aan, wat hij zeggen zoû. Hij boog ironisch. —Een heerlijke avond, niet waar? Het uitzicht is mooi, zoo in den nacht, van de pergola af. U heeft gelijk hier eens te komen profiteeren. Ik hoop, dat ik u niet stoor met mijn onverwacht gezelschap! Zijn trillende stem was zoo kwaadaardig twistzoekend, dat zij niet konden twijfelen aan zijn hevige ontstemming. —Zeker niet, prins! antwoordde Cornélie, zich herstellende. Hoewel het mij verbaast, wat u hier doet, op dit uur. —En wat doet u hier, op dit uur? —Wat ik hier doe? Ik zit hier met Van der Staal.... —Op dit uur? —Op dit uur! Wat meent u, prins, wat bedoelt u? —Wat ik bedoel? Dat 's nachts de pergola gesloten is. —Prins, zeide Duco; uw toon bevalt mij niet. —En u bevalt mij heelemaal niet.... —Als u niet mijn gastheer was, gaf ik u een klap in uw gezicht.... Cornélie hield Duco's arm tegen: de prins vloekte en balde de vuisten. —Prins, sprak zij. Het is klaarblijkelijk, dat u een scène met ons zoekt. Waarom? Wat heeft u er tegen, dat ik Van der Staal 's avonds hier ontmoet. Ten eerste is onze verhouding geen geheim voor u. En dan dunkt het mij onwaardig voor u ons hier te komen bespieden. —Onwaardig? Onwaardig?—Hij was onmachtig zich meer te beheerschen.—Onwaardig ben ik, en klein, en grof, en geen man, en ik heb geen temperament, dat je aanstaat? Zijn temperament staat je wel aan, niet waar! Ik heb je zoen hooren klinken. Duivelin!
  • 51. Duivelin! Demon! Niemand heeft me zoo beleedigd als jij. Van niemand heb ik mij al zooveel laten welgevallen. Ik laat het mij niet langer! Jij, je hebt me geslagen, demon, duivelin! Hij, hij dreigt me met een slag. Mijn geduld is ten einde. Ik kan het niet verdragen, in mijn eigen huis, dat je mij weigert, wat je hem geeft.... Hij is niet je man! Hij is niet je man! Ik kan evenveel recht hebben als hij, en rekent hij uit, dat hij meer recht heeft dan ik, dan haàt ik hem!... En hij vloog Duco aan, naar de keel, blind van woede. De aanval was zoo onverwacht, dat Duco struikelde. Zij worstelden samen, beiden razend. Al hunne verborgen antipathie sloeg uit als razernij. Zij hoorden niet Cornélie's smeeken, zij sloegen elkaâr met de vuist, zij omstrengelden elkanders beenen en armen, borst geperst aan borst. Toen zag Cornélie iets flikkeren. In het licht zag zij, dat de prins een mes trok. Maar zijn beweging zelve was een voordeel voor Duco, die zijn pols als in ijzer vastgreep en hem dwong op den grond, de knie stijf drukte op Gilio's borst en met de andere hand hem zijn keel omklemde. —Laat los! krijschte de prins. —Laat dat mes los! krijschte Duco. De prins, onwillig, hield vol. —Laat los! krijschte hij nog eens. —Laat dat mes los.... Het mes viel uit zijn vingers. Duco greep het en stond op. —Sta op! zeide hij. Wij kunnen, wanneer u wil, dit gevecht op minder primitieve manier morgen vervolgen. Niet meer met een mes, maar met degen of pistool. De prins was opgestaan. Hij hijgde, blauw.... Hij kwam tot zichzelven. —Neen, zei hij, langzaam. Ik wil niet duelleeren. Tenzij jij het wilt. Maar ik wil niet. Ik ben overwonnen.... Er is in haar een demonische kracht, die je altijd zoû laten winnen, welk spel wij ook speelden. Wij
  • 52. hebben al geduelleerd. Deze strijd zegt mij meer dan een geregeld duel. Alleen als jij het wenscht, heb ik er niets op tegen. Maar ik weet nu zeker, dat je me zoû dooden. Zij beschermt je.... —Ik wensch geen duel, zei Duco. —Laat ons dan dezen strijd als een duel beschouwen, en geef mij nu een hand.... Duco strekte de hand. Gilio drukte die. —Vergeef mij, zeide hij, neêrbuigend tot Cornélie; ik heb u beleedigd.... —Neen, zeide zij. Ik vergeef u niet. —Wij hebben elkaâr te vergeven. Ik vergeef u uw slag. —Ik vergeef u niets. Ik vergeef u dezen avond nooit, niet uw spionneeren, niet uw gebrek aan zelfbeheersching, niet uw recht, dat u op mij, ongetrouwde vrouw, meent te kunnen laten gelden, terwijl ik u geen recht geef, niet uw aanval, en niet uw mes. —Wij zijn dus vijanden, voor altijd? —Ja, voor altijd. Ik verlaat morgen uw huis.... —Ik heb verkeerd gehandeld, bekende hij nederig. Vergeef mij. Mijn bloed is hevig. —Ik heb u totnogtoe gekend als een heer.... —Ik ben ook nog een Italiaan. —Ik vergeef u niet. —Ik heb u wel eens bewezen, dat ik een goed vriend kon zijn. —Het is geen oogenblik het mij te herinneren. —Ik herinner u alles, wat u zachter voor mij zoû kunnen stemmen. —Dat is alles te vergeefs. —Dus vijanden?
  • 53. —Ja. Laat ons naar binnen gaan. Ik verlaat morgen uw huis.... —Ik wil alle boete doen, die u mij oplegt. —Ik leg niets op. Ik wil dit gesprek eindigen en ik wil naar huis. —Ik zal u voorgaan.... Hij deed zoo. Zij liepen de pergola af. Hij opende zelve de terraspoort en liet hen het eerst binnen. Zij begaven zich zwijgend naar hunne kamers. Het kasteel sliep in duister. De prins lichtte bij met een lucifer. Duco was het eerst bij zijn vertrek. —Ik zal u verder bijlichten, sprak de prins nederig. Hij vergezelde nog, met een tweede lucifer, Cornélie tot haar deur. Daar viel hij op zijn knieën. —Vergeef mij, fluisterde hij met een snik in zijn keel. —Neen, zeide zij. En zonder meer sloot zij de deur achter zich. Hij bleef nog een oogenblik zoo geknield. Toen stond hij langzaam op. Zijn hals deed hem pijn. Zijn schouder voelde als ontwricht. —Het is uit, mompelde hij. Ik ben overwonnen. Zij is nu sterker dan ik, maar niet omdat zij een duivel is. Ik heb ze samen gezien.... Ik heb hun omhelzing gezien. Ze is sterker, hij is sterker dan ik ... om hun geluk ... Ik voel, dat zij, om hun geluk, altijd sterker zullen zijn, dan ik.... Hij ging naar zijn kamer, die grensde aan Urania's slaapkamer. Een snikken golfde op in zijn borst. Hij wierp zich, gekleed, snikkend op zijn bed, zijn snikken inslikkend in den sluimerenden nacht, die door het kasteel heen donsde. Toen stond hij op, en zag uit het raam. Hij zag het meer. Hij zag de pergola, waar zij zoo even hadden gevochten. De nacht sliep er, de karyatiden blankten er, slapende, uit de schaduw op. En met den blik zocht hij de juiste plek van hun
  • 54. strijd en zijn nederlaag. En bijgeloovig, aan hun geluk, meende hij, dat er niet tegen te strijden zoû zijn, nooit. Toen haalde hij de schouders op, als wierp hij zich een pak van den rug. —Fa niente! troostte hij zich. Domani megliore.... Hij meende er meê, dat hij morgen, zoo niet déze, overwinning, wel een andere behalen zoû. En zijn oogen nog nat, sliep hij in als een kind. XL. Urania snikte zenuwachtig in Cornélie's armen, toen zij de jonge prinses zeide, dat zij dien morgen vertrok. Zij waren met Duco alleen in Urania's eigen salon. —Wat is er gebeurd? vroeg zij snikkende. Cornélie vertelde haar den vorigen avond. —Urania, zeide zij ernstig; ik weet het, ik ben coquet. Ik vond het prettig met Gilio te praten; noem het flirten, als je wilt. Ik heb er nooit een geheim van gemaakt, noch voor Duco, noch voor jou. Ik beschouwde het als amuzement en niet meer. Misschien heb ik verkeerd gedaan; ik heb je er vroeger al meê geërgerd. Ik heb je beloofd het niet meer te doen, maar het schijnt sterker dan ik. Het ligt in mijn natuur, en ik zal me er niet om verdedigen. Ik beschouwde het als zoo weinig, als aardigheid en amuzement. Maar misschien is het slecht. Vergeef je het mij? Ik ben zooveel van je gaan houden: het zoû me leed doen, als je me niet vergaf.... —Verzoen je met Gilio en blijf nog.... —Onmogelijk, mijn lieve meid. Gilio heeft mij beleedigd, Gilio heeft tegen Duco zijn mes getrokken, en ik vergeef hem die dubbele
  • 55. beleediging nooit. Het is dus onmogelijk langer te blijven. —Ik blijf zoo alleen! snikte zij. Ik ook, ik hoû veel van je, ik hoû van jullie beiden. Is er geen middel.... Bob verlaat mij ook morgen. Ik blijf heelemaal alleen. Wat heb ik hier. Niemand, die van mij houdt.... —Je houdt heel veel over, Urania. Je hebt een doel om voor te leven; je kunt veel goed doen in je omgeving.... Je stelt belang in dit kasteel, dat je eigen nu is. —Het is alles zoo hol! snikte zij. Het geeft me niets. Ik heb behoefte aan sympathie. Wie is er die van mij houdt? Ik heb geprobeerd van Gilio te houden, en ik hoû ook wel van hem, maar hij, hij geeft niets om mij. Niemand geeft hier om mij.... —Ik geloof, dat je armen van je houden. Je hebt een edel doel. —Ik ben daar ook blij om, maar ik ben te jong, om alleen voor een doel te leven. Ik heb verder niets. Niemand geeft iets om mij hier. —Prins Ercole toch.... —Neen, hij minacht me. Wil ik je wat vertellen? Ik heb je vroeger eens verteld, dat Gilio mij gezegd had ... dat er geen familie- juweelen waren, dat alles was verkocht? Herinner je je wel? Nu, er zijn familie-juweelen. Ik heb dat begrepen uit een gezegde van de gravin di Rosavilla. Er zijn familie-juweelen. Maar prins Ercole bewaart ze in de Banca di Roma. Zij minachten mij en ik ben eenvoudig onwaardig ze te dragen. En voor mij doen ze alsof er niets meer is. En het ergste is!... dat al hun kennissen, geheel hun côterie weet, dat ze er zijn en bewaard worden in de Bank, en dat ze allen prins Ercole gelijk geven. Mijn geld is hunner wel waardig, maar ik niet hun oude juweelen, de juweelen van hun grootmoeders! —Het is een schande! zei Cornélie. —Het is de waarheid! snikte zij. O, leg het bij; blijf hier nog, om mij.... —Oordeel zelf, Urania: het is ons heusch niet mogelijk.
  • 56. —Het is waar, gaf zij zuchtende toe. —Het is alles mijn schuld. —Neen, neen; Gilio is soms zoo hevig ... —Maar zijn hevigheid, zijn drift en zijn jaloezie zijn mijn schuld. Ik heb er spijt van, Urania, om jou. Vergeef mij. Kom mij in Rome opzoeken, als je er komt. Vergeet mij niet, en schrijf, niet waar. Nu moet ik mijn koffer pakken. Hoe laat gaat de trein? —Tien uur vijf-en-twintig, zei Duco. Wij gaan samen. —Kan ik afscheid nemen van prins Ercole? Laat belet voor mij vragen. —Wat zal je hem zeggen? —Het allereerste, dat mij in den geest komt: dat een vriendin in Rome erg ziek is, dat ik er heen ga en dat Van der Staal mij begeleidt, omdat ik zenuwachtig ben. Het kan me niets schelen wat prins Ercole denkt. —Cornélie.... —Lieveling, ik heb heusch geen tijd meer. Omhels me, vergeef me. En vergeet mij niet. Adieu, we hebben een lieven tijd samen gehad: ik ben veel van je gaan houden.... Zij wrong zich van Urania los, ook Duco nam afscheid. Zij lieten de prinses snikkende alleen. Op den corridor ontmoetten zij Gilio. —Waar gaat u heen? vroeg hij met zijn nederige stem. —Wij gaan met den trein van tien uur vijf-en-twintig. —Het doet mij veel leed.... Maar zij gingen door en lieten hem staan, terwijl in het salon Urania snikte.
  • 57. XLI. In den trein, in den brandenden morgen, waren zij stil, en zij vonden Rome als barstende uit zijne huizen, van zonnebrand. In het atelier was het echter koel, eenzaam en rustig. —Cornélie, zeide Duco. Vertel mij wat er gebeurd is tusschen jou en den prins. Waarom heb je hem geslagen? Zij trok hem op den divan, wierp zich aan zijn hals en vertelde de scène van de camera dei sposi. Zij vertelde hem van de duizend lire en van den armband. Zij verklaarde hem, dat zij hierover gezwegen had, om hem niet over geldzorgen te spreken, terwijl hij zijn aquarel voor de tentoonstelling in Londen voltooide. —Duco, ging zij voort. Ik ben gisteren zoo geschrikt, toen ik Gilio dat mes zag trekken. Ik voelde mij flauw vallen, maar ik heb het niet gedaan. Ik had hem nog nooit zoo gezien, zoo hevig, zoo tot alles in staat.... Ik voelde toen pas, hoeveel ik van je hield.... Ik had hem vermoord, als hij je verwond had.... —Je hadt niet met hem moeten spelen, zeide hij streng. Hij heeft je lief ... Maar ondanks zijn strengen toon, trok hij haar vaster naar zich toe. Zij legde met iets als schuldbewustzijn haar hoofd vleiend tegen hem aan. —Hij is alleen wat verliefd ... verdedigde zij zich, zwakjes. —Hij is heel gepassionneerd verliefd ... Je hadt niet met hem mogen spelen.... Zij antwoordde niet meer, hem met de hand vleiende zijn gezicht. Zij vond hem heel lief, dat hij haar zoo berispte: zij hield van dien strengen, ernstigen toon, dien hij bijna nooit tegen haar aannam. Zij wist, dat zij die behoefte tot flirt in zich had, gehad had van heel jong meisje: zij telde het niet, het was onschuldig amuzement. Zij was het niet met Duco eens, maar zij vond het onnoodig er over
  • 58. door te gaan: het was als het was, zij dacht er niet over, zij streed er niet tegen: het was als een verschil van opinie, bijna van smaak, dat niet telde. Zij lag te gemakkelijk tegen hem aan, na de agitatie van gisteren avond, na een slapeloozen nacht, na een overhaast vertrek, na drie uur sporens in de brandende warmte, om er veel tegen in te praten. Zij vond de stille koelte van het atelier lief, de eenzaamheid met hen beiden, na de drie weken op San Stefano. Er was hier een rust, een komen tot zichzelve, die zalig was. Het hooge raam was opgetrokken en de warme lucht vloot weldadig in en temperde zich in de natuurlijke kilte van het noordelijke vertrek. Duco's ezel, leêg, stond in afwachting. Het was er hun thuis, tusschen al die kleur en vorm van kunst rondom haar heen. Zij begreep nu die kleur en vorm: zij leerde Rome. Zij leerde dat alles in den droom van haar geluk. Zij dacht weinig over de Vrouwenkwestie en de kritieken over haar brochure keek zij nauwlijks in en interesseerden haar weinig. Zij vond den engel van Lippo mooi, en zij vond mooi het tryptiekblad van Gentile da Fabriano en de flonkerkleuren der oude kazuifels. Het was wel heel weinig na de schatten van San Stefano, maar het was het hunne en hun home. Zij sprak niet meer, zij voelde zich tevreden, zij rustte uit aan Duco's borst, en hare vingers streelden zijn gezicht. —De Banieren zijn zoo goed als verkocht, zeide hij: voor negentig pond. Ik zal van middag telegrafeeren naar Londen ... En dan kunnen we gauw den prins die duizend lire teruggeven. —Het is het geld van Urania, zeide zij zwakjes. —Maar ik wil die schuld niet langer hebben ... Zij voelde, dat hij een beetje boos was, maar zij was in geen stemming om over geldzaken te praten, en een zalige loomte doorvloeide haar aan zijn borst.... Ben je boos, Duco? —Neen ... maar je hadt het niet moeten doen.... Hij nam haar vaster tegen zich aan, om haar te laten voelen, dat hij niet op haar brommen wilde, al vond hij, dat zij verkeerd had
  • 59. gehandeld. Zij vond, dat zij goed had gehandeld om hem niet te spreken over de duizend lire, maar zij verdedigde zich niet. Het zouden nuttelooze woorden zijn en zij voelde zich te tevreden, om over geld te praten. —Cornélie, zeide hij; laten wij trouwen.... Zij zag hem aan, verschrikt, opgeschrikt uit hare zaligheid. —Waarom? —Niet om onszelven. Wij zijn even gelukkig, niet getrouwd. Maar om de wereld, de menschen. —Om de wereld, de menschen? —Ja; wij zullen ons hoe langer hoe meer geizoleerd gaan voelen. Ik heb er wel eens met Urania over gesproken. Zij had er veel verdriet over, maar zij tolereerde ons.... Zij vond het een onmogelijke verhouding. Zij heeft misschien gelijk. Wij kunnen nergens komen. Op San Stefano deed men nog of men niet wist, dat wij samen woonden. Dat is nu uit.... —Wat kan je schelen de opinie van "kleine onverschillige menschen, die bij toeval je pad kruisen", zooals je zegt.... —Dat is nu niet meer zoo: aan den prins zijn wij geld schuldig en Urania is de eenige vriendin, die je hebt.... —Ik heb jou: ik heb niemand noodig. Hij kuste haar. —Heusch, Cornélie, het is beter, dat wij trouwen. Dan zal niemand je meer beleedigen kunnen als de prins je heeft durven doen. —Hij heeft bekrompen ideeën: hoe kan je willen trouwen om wereld en menschen als San Stefano en den prins. —De geheele wereld is zoo en wij zijn in de wereld. Wij leven te midden van andere menschen. Het is onmogelijk zich geheel te izoleeren en izolement straft zichzelve later. Wij moeten ons
  • 60. aansluiten bij andere menschen: het is onmogelijk altijd op je eigen te bestaan, zonder eenig gemeenschapsgevoel. —Duco, ik herken je niet meer: het zijn zulke maatschappelijke ideeën. —Ik heb meer nagedacht in den laatsten tijd. —Ik verleer juist na te denken.... Mijn lieveling, wat ben je ernstig van morgen. En dat terwijl ik zoo heerlijk tegen je aanlig, om uit te rusten van al die emotie, en die warme reis. —Heusch Cornélie, laten wij trouwen.... Zij schuurde een weinig nerveus tegen hem aan, ontevreden, dat hij doorging en met geweld haar zalige stemming vernielde.... —Je bent een akelige jongen. Waarom moeten wij trouwen. Het zoû niets aan onzen toestand veranderen. Wij zouden ons toch niet met andere menschen bemoeien. Wij leven zoo heerlijk hier, in je kunst. Wij hebben niets anders noodig dan elkaâr, en je kunst en Rome. Ik hoû nu zoo veel van Rome: ik ben heelemaal veranderd. Er is hier iets wat mij telkens weêr aantrekt. Op San Stefano had ik heimwee naar Rome en ons atelier. Je moet weêr een ander motief zoeken— om aan het werk te gaan. Als je niets doet, dan denk je na ... in een maatschappelijke richting ... en dat is niets voor jou. Ik herken je zoo niet. En zoo klein maatschappelijk nog. Om te trouwen! In Godsnaam waarom, Duco? Je kent mijn ideeën over het huwelijk. Ik heb mijn ondervinding: het is beter van niet.... Zij was opgestaan en werktuigelijk zocht zij in een portefeuille tusschen half-affe schetsen. —Je, ondervinding ... herhaalde hij. Wij kennen elkaâr te goed om voor iets bang te zijn. Zij trok de schetsen uit de portefeuile: het waren de ideeën, die bij hem opgeschoten waren en die hij had aangeteekend, terwijl hij werkte aan de Banieren. Zij zag ze na en strooide ze uit.
  • 61. —Bang te zijn? herhaalde zij vaag. Neen, hernam zij plotseling vaster. Een mensch kent zich en een ander nooit. Ik ken je niet, ik ken mijzelf niet. Iets waarschuwde haar in het diepst van zich: trouw niet, geef hem niet toe. Het is beter van niet, het is beter van niet.... Het was nauwlijks een fluisterende zweeming van waarschuwend voorgevoel, het was onuitgedacht, onbewust en zielediep geheimzinnig. Want zij was het zich niet bewust, zij dacht het niet, zij hoorde het nauwlijks in zich. Het ging door haar heen en het was geen gevoel en het liet alleen achter een tegenwerkende onwil in haar, zeer duidelijk.... Pas jaren later zoû zij dien onwil begrijpen.... —Neen Duco, het is beter van niet.... —Denk er nu eens over na, Cornélie. —Het is beter van niet, herhaalde zij star. Toe, laat ons er niet meer over spreken. Het is beter van niet, maar ik vind het zoo akelig het je te weigeren, omdat jij het verlangt. Ik weiger je anders nooit iets. Ik zoû anders alles voor je willen doen. Maar dit voel ik zoo: het ... is beter ... van niet! Zij kwam als eéne liefkoozing naar hem toe en omhelsde hem. —Vraag het mij niet meer. Wat een wolk op je gezicht! Ik zie, dat je er nog altijd over denken zult. Zij streelde over zijn voorhoofd als om zijn rimpels weg te vegen. —Denk er niet meer over na. Ik hoû van je, ik hoû van je! Ik wil niets anders dan jou.... Ik ben gelukkig, zooals wij zijn. Waarom jij ook niet? Omdat Gilio grof is geweest en Urania "prim?" Kom je schetsen eens bezien. Ga je gauw aan het werk? Ik vind het heerlijk als je werkt. Dan ga ik weêr wat schrijven: een causerie over een oud Italiaansch kasteel. Mijn souvenirs van San Stefano. Misschien wel een novelle en de pergola als achtergrond. O, die mooie pergola.... Maar gisteren, dat mes! Zeg Duco, ga je weêr werken? Laten wij samen eens zien. Wat had je toen veel ideeën! Maar word niet te symbolistisch: ik meen, krijg niet die trucs, die repetities van
  • 62. je eigen.... Die vrouw hier, die is wel mooi.... Ze loopt zoo in onbewust-zijn die hellende lijn af en die duwende handen om haar heen, en die roode bloemen in den afgrond.... Zeg Duco, wat meende je er meê? —Ik weet niet: het was mezelf niet heel duidelijk.... —Ik vind het wel mooi, maar ik hoû niet van die schets. Ik weet niet waarom. Ik vind er iets akeligs in. Ik vind die vrouw dom. Ik hoû niet van die hellende lijnen: ik hoû van opgaande lijnen, als in de Banieren. Dat vloeide alles uit den nacht naar boven, naar de zon! Wat was dat mooi! Hoe jammer, dat wij het nu niet meer hebben, dat het verkocht wordt. Als ik schilder was, zoû ik nooit wat kunnen verkoopen. Ik zal de schetsen ervan bewaren, als souvenir. Vindt je het niet vreeslijk, dat wij het niet meer hebben...? Hij beaamde het: hij miste ook zijn Banieren: hij had ze lief. En hij zocht met haar tusschen de andere studiën en schetsen. Maar behalve de onbewuste vrouw was er niets onder, dat hem duidelijk genoeg was, om uit te werken. En Cornélie wilde niet, dat hij de onbewuste vrouw afmaakte: neen, ze hield niet van die hellende lijnen.... Maar toen vond hij nog schetsen van landschapsstudiën, van wolken en luchten, over de Campagna, Venetië en Napels. En hij zette zich aan het werk. XLII. Zij waren heel zuinig, zij hadden eenig geld en de maanden droomden voorbij, in den blakenden zomer van Rome. Zij leefden hun vereenzaamd geluksleven voort, zonder iemand anders te zien dan Urania, die een enkelen keer in Rome kwam, hen opzocht, bij hen déjeuneerde in het atelier en 's avonds weêr vertrok. Toen schreef Urania hen, dat Gilio het niet meer uithield te San Stefano, en dat zij op reis gingen, eerst naar Zwitserland, later naar Ostende.
  • 63. Zij kwam nog eenmaal om afscheid te nemen, en toen zagen zij niemand meer. Vroeger had Duco nog wel eens gekend een enkelen artist, een schilder-landgenoot in Rome: nu kende hij niemand meer, nu zag hij niemand. En hun leven in het koele atelier was als een eenzaam oaze-bestaan te midden van de zonwoestijn van Rome, in Augustus. Zij gingen niet de bergen in, naar een koelere plaats, voor de zuinigheid. Zij gaven niet meer uit dan het allerhoogst noodzakelijke en hunne bohême-armoede was toch geluk in hun decor van tryptiek- en kazuifelkleuren. Het geld echter bleef schaarsch. Duce verkocht eens een enkele aquarel, maar soms moesten zij wel eens hun toevlucht nemen tot het verkoopen van een bibelot. En het ging Duco altijd zeer aan het hart te scheiden van iets, dat hij verzameld had. Zij hadden weinig behoeften, maar soms moest de huur van het atelier worden betaald. Cornélie schreef soms een brief, een schets, en kocht ervan wat zij noodig had voor haar toilet. Zij had een zekeren chic van dragen, een talent er elegant uit te zien in een oude versleten blouse. Zij was coquet op haar haar, op haar huid, op haar tanden, op haar nagels. Met een nieuwe voile droeg zij een ouden hoed; met een oude wandeljapon, een paar frissche handschoenen, en zij droeg alles met coquetterie. Thuis, in haar rozen peignoir, die geen kleur meer had, had zij een lijn van zoo groote bevalligheid, dat Duco haar telkens schetste. Zij gingen bijna nooit meer naar een restauratie. Cornélie kookte thuis wat, verzon gemakkelijke recepten, haalde een fiasco wijn in de eerste de beste "Olio e vino" waar de koetsiers aan tafeltjes zaten te drinken, en zij aten thuis lekkerder en goedkooper dan in de osteria. En Duco, nu hij niet meer kocht bij de antiquaires aan den Tiber, gaf niets uit. Maar het geld bleef schaarsch. Toen zij eens een zilveren crucifix hadden verkocht, voor veel te weinig geld, was Cornélie zoo ontmoedigd, dat zij snikte aan Duco's borst. Hij troostte haar, streelde heur haar en verklaarde, dat hij niet veel om het crucifix gaf. Maar zij wist, dat het crucifix een heel mooi werk was van een onbekende uit de zestiende eeuw, en dat hij er veel leed van had het niet meer te bezitten. En ernstig
  • 64. zeide zij hem, dat het zoo niet langer kon gaan, dat zij hem, niet tot lastpost kon wezen, en dat zij maar scheiden moesten: dat zij iets zoeken zoû, naar Holland terug zoû gaan.... Hij schrikte van haar wanhoop, en zei, dat het niet hoefde, dat hij wel voor haar zorgen kon, als voor zijn vrouw, maar dat hij nu eenmaal zoo een onpractische jongen was, die niets anders kon dan een beetje kladderen, en niet eens genoeg om er van te leven. Maar zij zeide, dat hij zoo niet spreken mocht, dat hij een groot artist was, die niet had een geldmakende, gemakkelijke vruchtbaarheid, maar daarom des te hooger stond. Zij zeide, dat zij niet van zijn geld wilde leven, dat zij voor zichzelve wilde zorgen. En zij verzamelde de verwaaide resten van hare feministische ideeën. Nog eens vroeg hij haar toe te staan in een huwelijk: zij zouden zich verzoenen met zijn moeder en mevrouw Van der Staal zoû hem weêr geven wat zij hem vroeger gaf, toen hij nog met zijn moeder bij Belloni woonde. Maar zij wilde ten eerste van geen huwelijk weten en ten tweede van geen onderstand van zijn moeder, evenmin als hij geld van Urania wilde. Hoe dikwijls had Urania hun niet haar hulp geboden! Hij had nooit gewild: hij was zelfs boos geweest, toen Urania een blouse aan Cornélie had gegeven, en zij die met een zoen had aangenomen. Neen, het ging niet langer: zij moesten maar scheiden: zij zoû naar Holland terug, iets zoeken. Het was gemakkelijker in Holland dan in den vreemde.... Maar hij was zoo wanhopig, om hun geluk, dat wankelde voor zijn oogen, dat hij haar vasthield aan zijn borst, en ook zij snikte, de armen om zijn hals. Waarom scheiden? vroeg hij. Zij zouden sterker te zamen zijn. Hij kon niet meer buiten haar, zijn leven zoû zonder haar geen leven zijn. Hij leefde vroeger in zijn droom, hij leefde nu in de werkelijkheid van hun geluk. En het bleef er bij: zij konden niets veranderen, zij leefden zoo gierig mogelijk, om bij elkaâr te blijven. Hij werkte zijn landschappen af, die hij altijd verkocht, maar hij verkocht ze dadelijk, voor veel te weinig geld, om maar niet behoeven te wachten. Maar toen dreigde weêr het gebrek en zij dacht er over naar Holland te schrijven. Juist echter ontving zij een brief van hare moeder, daarna een brief van eene harer zusters. En zij vroegen haar in die brieven of het waar
  • 65. was, wat men vertelde in Den Haag, dat zij leefde met Van der Staal. Zij had zich altijd zoover beschouwd van Den Haag en de Haagsche menschen, dat zij er nooit over had gedacht, dat haar leven bekend kon worden. Zij sprak zoo niemand, zij kende zoo niemand met Hollandsche relaties.... Hoe dan ook, hare onafhankelijkheid was nu bekend. En zij beantwoordde die brieven in een feministischen toon: zeide hare antipathie tegen het huwelijk, bekende, dat zij leefde met Van der Staal. Zij schreef koel en zakelijk, om in Den Haag indruk te maken als vrije vrouw. Men kende er natuurlijk hare brochure. Maar zij begreep, dat zij nu aan Holland niet meer kon denken. Ze schreef hare familie af. Het scheurde toch nog iets in haar, het onbewuste van familieband. Maar de band was reeds zoo los, door te weinig sympathie, vooral in de dagen van haar scheiding. En zij voelde zich geheel alleen: zij had alleen haar geluk, hare liefde, Duco. O, het was genoeg, het was genoeg voor heel haar leven. Als zij alleen maar geld verdienen kon! Maar hoe? Zij ging naar den Hollandschen consul: zij vroeg hem raad: het gaf niets. Voor liefdezuster was zij ongeschikt: zij wilde dadelijk verdienen en studeeren kon zij niet. In een winkel staan, dat kon zij. En zij bood zich aan, zonder Duco er iets van te zeggen, maar niettegenstaande haar versleten manteltje, vond men haar overal te veel dame, en vond zij het salaris te weinig voor een heelen dag arbeid. En toen zij voelde, dat zij het niet in haar bloed had te werken voor haar brood, trots al hare ideeën, al hare logiek, trots hare brochure en haar vrije-vrouwschap, voelde zij zich radeloos tot wanhoop toe, en terwijl zij naar huis ging, moê, afgebeuld door trappenklimmen en nuttelooze gesprekken van sollicitatie, kwam de oude klacht op hare lippen: —O God, zèg mij, wat ik doen moet...!! XLIII.
  • 66. Urania schreef zij geregeld, naar Zwitserland, naar Ostende, en Urania schreef altijd zoo lief terug en bood hare hulp aan. Maar Cornélie weerde steeds af, bang nu Duco er meê te kwetsen. Zij, voor zich, voelde grootere gemakkelijkheid, vooral nu het tot haar kwam, dat zij toch niet werken kon. Maar zij begreep het in Duco en eerbiedigde het. Voor zich had zij echter aangenomen, nu hare fierheid toch wankelde, nu hare ideeën in-een stortten, te zwak voor den stadigen druk van het steenharde leven. Het was als een groote vinger, die even langs huisjes van kaarten ging: met zorg en trots opgebouwd, viel alles plat neêr bij de minste beroering. Alleen vast bleef staan hare liefde en haar geluk, onwankelbaar te midden der ruïne. O, wat had zij hem lief, hoe eenvoudig waar was hun geluk! Wat was hij haar dierbaar, om zijn zachtheid, om zijne kalmte, zijn gemis aan drift, of zijne zenuwen zich alleen maar gespannen hadden tot het fijner voelen van kunst. Zij voelde zoo heerlijk, dat het onverstoorbaar was, gevonden voor altijd. Zonder dat geluk hadden zij ook nooit van dag tot dag hun moeilijke leven kunnen sleepen. Nu voelden zij die zwaarte niet dagelijks, als trokken zij samen den last, van den eenen dag op den anderen, voort. Nu voelden zij die zwaarte maar soms, als de volgende dag geheel duister was en zij niet wisten waar zij hun levenslast sleepten, in het donkere van die toekomst. Maar zij overwonnen altijd weêr: zij hadden elkaâr te lief om bij den last in-een te zinken. Zij vonden altijd weêr wat moed: glimlachend steunden zij elkanders kracht. Het werd September, Oktober, en Urania schreef, dat zij terugkwamen te San Stefano en er een paar maanden blijven zouden, voor zij dien winter naar Nice gingen. En op een morgen, onverwachts, kwam Urania in het atelier. Zij vond Cornélie alleen: Duco was naar een kunstkooper. Zij begroetten elkander heel innig. —Ik ben zoo blij je terug te zien! babbelde Urania vroolijk. Ik ben blij weêr in Italië te zijn en nog een tijd te San Stefano te blijven. En hier is alles als het was, in jullie gezellig atelier? Je bent gelukkig? O, ik behoef het niet te vragen...!
  • 67. Welcome to our website – the ideal destination for book lovers and knowledge seekers. With a mission to inspire endlessly, we offer a vast collection of books, ranging from classic literary works to specialized publications, self-development books, and children's literature. Each book is a new journey of discovery, expanding knowledge and enriching the soul of the reade Our website is not just a platform for buying books, but a bridge connecting readers to the timeless values of culture and wisdom. With an elegant, user-friendly interface and an intelligent search system, we are committed to providing a quick and convenient shopping experience. Additionally, our special promotions and home delivery services ensure that you save time and fully enjoy the joy of reading. Let us accompany you on the journey of exploring knowledge and personal growth! textbookfull.com