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/
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
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