0% нашли этот документ полезным (0 голосов)
8 просмотров

Software Architecture by Example: Using C# and .NET 1st Edition Paul Michaels 2024 scribd download

Документ представляет собой книгу 'Software Architecture by Example: Using C# and .NET' авторства Пола Майкла, которая включает в себя различные примеры архитектуры программного обеспечения с использованием C# и .NET. Книга охватывает множество тем, включая проектирование архитектуры для различных бизнес-проблем и применение принципов SOLID. Она также содержит ссылки на дополнительные материалы и код на GitHub для читателей.

Загружено:

husnachernk4
Авторское право
© © All Rights Reserved
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
8 просмотров

Software Architecture by Example: Using C# and .NET 1st Edition Paul Michaels 2024 scribd download

Документ представляет собой книгу 'Software Architecture by Example: Using C# and .NET' авторства Пола Майкла, которая включает в себя различные примеры архитектуры программного обеспечения с использованием C# и .NET. Книга охватывает множество тем, включая проектирование архитектуры для различных бизнес-проблем и применение принципов SOLID. Она также содержит ссылки на дополнительные материалы и код на GitHub для читателей.

Загружено:

husnachernk4
Авторское право
© © All Rights Reserved
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 37

Get the full ebook with Bonus Features for a Better Reading Experience on ebookmeta.

com

Software Architecture by Example: Using C# and


.NET 1st Edition Paul Michaels

https://ebookmeta.com/product/software-architecture-by-
example-using-c-and-net-1st-edition-paul-michaels/

OR CLICK HERE

DOWLOAD NOW

Download more ebook instantly today at https://ebookmeta.com


Software
Architecture
by Example
Using C# and .NET

Paul Michaels
Foreword by Mark Richards
Software Architecture by
Example
Using C# and .NET

Paul Michaels
Foreword by Mark Richards
Software Architecture by Example: Using C# and .NET
Paul Michaels
Derbyshire, UK

ISBN-13 (pbk): 978-1-4842-7989-2 ISBN-13 (electronic): 978-1-4842-7990-8


https://doi.org/10.1007/978-1-4842-7990-8

Copyright © 2022 by Paul Michaels


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Smriti Srivastava
Development Editor: Laura Berendson
Coordinating Editor: Shrikant Vishwakarma
Cover designed by eStudioCalamar
Cover image designed by Pexels
Distributed to the book trade worldwide by Springer Science+Business Media LLC, 1 New York Plaza, Suite
4600, New York, NY 10004. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer-sbm.
com, or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner)
is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware
corporation.
For information on translations, please e-mail [email protected]; for reprint, paperback,
or audio rights, please e-mail [email protected], or visit http://www.apress.com/
rights-permissions.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub via the book’s product page, located at https://link.springer.com/book/10.1007/
978-1-4842-7989-2.
Printed on acid-free paper
To my wife, Claire, who has always been on, and at, my side,
even when I have not.
And to my dad, who has understood and supported me in everything
that I’ve done from the minute I was born.
Table of Contents
About the Author����������������������������������������������������������������������������������������������������� xi

About the Technical Reviewer������������������������������������������������������������������������������� xiii


Acknowledgments���������������������������������������������������������������������������������������������������xv

Introduction�����������������������������������������������������������������������������������������������������������xvii

Foreword����������������������������������������������������������������������������������������������������������������xxi

Chapter 1: The Ticket Sales Problem������������������������������������������������������������������������ 1


Background����������������������������������������������������������������������������������������������������������������������������������� 2
Requirements�������������������������������������������������������������������������������������������������������������������������������� 3
Options������������������������������������������������������������������������������������������������������������������������������������ 4
Manual Process����������������������������������������������������������������������������������������������������������������������� 4
Existing System����������������������������������������������������������������������������������������������������������������������� 6
Existing System Considerations���������������������������������������������������������������������������������������������� 7
Minimum Viable Product��������������������������������������������������������������������������������������������������������� 8
Target Architecture������������������������������������������������������������������������������������������������������������������������ 8
How to Deal with High Throughput������������������������������������������������������������������������������������������ 9
Widening the Funnel�������������������������������������������������������������������������������������������������������������� 10
Multiple Funnels�������������������������������������������������������������������������������������������������������������������� 11
Message Queues������������������������������������������������������������������������������������������������������������������� 13
Message Brokers������������������������������������������������������������������������������������������������������������������� 14
Separation of Concerns��������������������������������������������������������������������������������������������������������� 16
Target Architecture Diagram�������������������������������������������������������������������������������������������������� 17
Proxy�������������������������������������������������������������������������������������������������������������������������������������� 18
A Note on Cloud Vendors������������������������������������������������������������������������������������������������������� 19
Why Cloud?���������������������������������������������������������������������������������������������������������������������������� 20

v
Table of Contents

Examples������������������������������������������������������������������������������������������������������������������������������������ 21
External APIs�������������������������������������������������������������������������������������������������������������������������� 21
Getting Ticket Availability������������������������������������������������������������������������������������������������������ 21
Ordering a Ticket������������������������������������������������������������������������������������������������������������������� 25
Summary������������������������������������������������������������������������������������������������������������������������������������ 29

Chapter 2: The Cash Desk Problem������������������������������������������������������������������������ 31


Background��������������������������������������������������������������������������������������������������������������������������������� 32
Requirements������������������������������������������������������������������������������������������������������������������������������ 32
Options���������������������������������������������������������������������������������������������������������������������������������� 32
Manual Process��������������������������������������������������������������������������������������������������������������������� 33
Target Architecture���������������������������������������������������������������������������������������������������������������������� 36
Audit�������������������������������������������������������������������������������������������������������������������������������������� 36
Event Sourcing���������������������������������������������������������������������������������������������������������������������� 40
CQRS�������������������������������������������������������������������������������������������������������������������������������������� 46
Target Architecture Diagram�������������������������������������������������������������������������������������������������� 47
Examples������������������������������������������������������������������������������������������������������������������������������������ 49
Persisting Events to Memory������������������������������������������������������������������������������������������������� 49
Persisting Events to Disk������������������������������������������������������������������������������������������������������� 52
Summary������������������������������������������������������������������������������������������������������������������������������������ 61

Chapter 3: The Travel Agent Problem��������������������������������������������������������������������� 63


Background��������������������������������������������������������������������������������������������������������������������������������� 64
Requirements������������������������������������������������������������������������������������������������������������������������������ 65
Options���������������������������������������������������������������������������������������������������������������������������������� 66
Manual Process��������������������������������������������������������������������������������������������������������������������� 66
Transactions�������������������������������������������������������������������������������������������������������������������������� 67
Distributed Transactions�������������������������������������������������������������������������������������������������������� 71
Distributed Transaction with Timeout������������������������������������������������������������������������������������ 74
Book and Cancel�������������������������������������������������������������������������������������������������������������������� 75
Hold a Booking���������������������������������������������������������������������������������������������������������������������� 76

vi
Table of Contents

Advanced Purchase��������������������������������������������������������������������������������������������������������������� 76
Business Decision����������������������������������������������������������������������������������������������������������������� 76
Target Architecture���������������������������������������������������������������������������������������������������������������������� 77
Stateful Service��������������������������������������������������������������������������������������������������������������������� 79
Distributed Service���������������������������������������������������������������������������������������������������������������� 79
Target Architecture Diagram�������������������������������������������������������������������������������������������������� 79
Examples������������������������������������������������������������������������������������������������������������������������������������ 80
Project Structure������������������������������������������������������������������������������������������������������������������� 80
Service Bus Configuration����������������������������������������������������������������������������������������������������� 82
Coordinator���������������������������������������������������������������������������������������������������������������������������� 85
Summary������������������������������������������������������������������������������������������������������������������������������������ 90

Chapter 4: The Social Media Problem�������������������������������������������������������������������� 93


Background��������������������������������������������������������������������������������������������������������������������������������� 94
Requirements������������������������������������������������������������������������������������������������������������������������������ 94
Options���������������������������������������������������������������������������������������������������������������������������������� 95
Manual Process��������������������������������������������������������������������������������������������������������������������� 96
CQRS�������������������������������������������������������������������������������������������������������������������������������������� 97
Target Architecture�������������������������������������������������������������������������������������������������������������������� 102
Examples���������������������������������������������������������������������������������������������������������������������������������� 104
Schema Creation����������������������������������������������������������������������������������������������������������������� 104
Updating the Database�������������������������������������������������������������������������������������������������������� 105
Checking the Data��������������������������������������������������������������������������������������������������������������� 107
Web Service������������������������������������������������������������������������������������������������������������������������� 107
Accessing MongoDB������������������������������������������������������������������������������������������������������������ 110
The Client���������������������������������������������������������������������������������������������������������������������������� 114
Process Data Service���������������������������������������������������������������������������������������������������������� 118
Summary���������������������������������������������������������������������������������������������������������������������������������� 122

vii
Table of Contents

Chapter 5: The Admin Application Problem���������������������������������������������������������� 125


Background������������������������������������������������������������������������������������������������������������������������������� 126
Requirements���������������������������������������������������������������������������������������������������������������������������� 126
Options�������������������������������������������������������������������������������������������������������������������������������������� 127
Manual Process������������������������������������������������������������������������������������������������������������������������ 127
SOLID���������������������������������������������������������������������������������������������������������������������������������������� 129
Single Responsibility����������������������������������������������������������������������������������������������������������� 130
Open-Closed������������������������������������������������������������������������������������������������������������������������ 133
Liskov Substitution�������������������������������������������������������������������������������������������������������������� 136
Interface Segregation Principle������������������������������������������������������������������������������������������� 138
Dependency Inversion Principle������������������������������������������������������������������������������������������ 139
Methods of Extending Software������������������������������������������������������������������������������������������������ 141
Hooks����������������������������������������������������������������������������������������������������������������������������������� 141
Messages���������������������������������������������������������������������������������������������������������������������������� 142
Injection������������������������������������������������������������������������������������������������������������������������������� 145
Target Architecture�������������������������������������������������������������������������������������������������������������������� 148
Examples���������������������������������������������������������������������������������������������������������������������������������� 149
Basic Functionality�������������������������������������������������������������������������������������������������������������� 149
Extensibility������������������������������������������������������������������������������������������������������������������������� 154
Custom Functionality����������������������������������������������������������������������������������������������������������� 156
Summary���������������������������������������������������������������������������������������������������������������������������������� 157

Chapter 6: The Travel Rep Problem���������������������������������������������������������������������� 159


Background������������������������������������������������������������������������������������������������������������������������������� 160
Requirements���������������������������������������������������������������������������������������������������������������������������� 160
Options�������������������������������������������������������������������������������������������������������������������������������������� 161
Manual Process������������������������������������������������������������������������������������������������������������������� 161
Caching�������������������������������������������������������������������������������������������������������������������������������� 162
Sidecar Pattern�������������������������������������������������������������������������������������������������������������������� 163
Ambassador Pattern������������������������������������������������������������������������������������������������������������ 164

viii
Table of Contents

Target Architecture�������������������������������������������������������������������������������������������������������������������� 166


Containers��������������������������������������������������������������������������������������������������������������������������� 167
Examples���������������������������������������������������������������������������������������������������������������������������������� 168
Project Structure����������������������������������������������������������������������������������������������������������������� 169
TravelRep.CentralApi����������������������������������������������������������������������������������������������������������� 170
TravelRep.App���������������������������������������������������������������������������������������������������������������������� 173
TravelRep.Ambassador�������������������������������������������������������������������������������������������������������� 174
Containers��������������������������������������������������������������������������������������������������������������������������� 182
Summary���������������������������������������������������������������������������������������������������������������������������������� 196

Appendix A: Technical Appendix�������������������������������������������������������������������������� 199


C
 hapter 1���������������������������������������������������������������������������������������������������������������������������������� 199

Index��������������������������������������������������������������������������������������������������������������������� 205

ix
About the Author
Paul Michaels is the Head of Development at musicMagpie.
He started his career as a professional software engineer
in 1997. Paul is a regular speaker, published author, and
Microsoft MVP. He enjoys programming, playing with new
technology, and finding neat solutions to problems. When
he’s not working, you can find him cycling or walking around
the Peak District, playing table tennis, or trying to cook for
his wife and two children. You can follow him on Twitter at
@paul_michaels or find him on LinkedIn. He also writes a
blog at http://pmichaels.net.

xi
About the Technical Reviewer
Kasam Shaikh is an Azure AI enthusiast, published author,
global speaker, community MVP, and Microsoft Docs
contributor. He has more than 14 years of experience in
the IT industry and is a regular speaker at various meetups,
online communities, and international conferences on Azure
and AI. He is currently working as Senior Cloud Architect for
a multinational firm where he leads multiple programs in the
Practice for Microsoft Cloud Platform and Low Code. He is
also a founder of the community named Dear Azure-Azure
INDIA (az-India) and leads the community for learning
Microsoft Azure. He owns a YouTube channel and website
and shares his experiences over his website
(www.kasamshaikh.com).

xiii
Acknowledgments
For this book, I have an absolute phone book of people to thank for their help.
Firstly, I have to thank my daughter, Abi, for all the artwork in the book.
Special thanks to Ash Burgess and Kevin Smith for putting up with impromptu
requests for a discussion or a review of an idea, and for Kev’s painstaking and repeated
explanations of event sourcing.
Thanks to Ian Curtis for reviewing my architectural diagram, and to James Little for
making me think so hard about architecture that a book seemed a good idea.
The travel industry is very complex, and I don’t think I could have landed in a better
place, where I had the expertise and advice of both David Hilton and Jagdip Ajimal.
When it came to containers, I found that what I was trying to do kept throwing up
roadblocks until Rob Richardson generously offered his time and expertise.
The examples in this book are based on my time working across industries and trying
to solve problems. I’ve been fortunate in my career to work with a number of very clever
and talented people. There are probably too many of these to mention, and while they
may not have directly helped with this book, I’d like to acknowledge their contribution.
Finally, I’d like to thank the team at Apress – especially Shrikant for dealing with the
various twists and turns that the book, and my life, has taken during its creation, and
Smriti for bringing me onto Apress in the first place.

xv
Introduction
All the code in this book is available from the following GitHub repo:

https://github.com/Apress/software-­architecture-­by-­example

Should you choose to follow along and create the solution for each chapter, it may be
helpful to have a clone of the code available for reference.

Note As I’ll be working on a Windows machine, what I do will only be tested on


Windows; however, again, this is software architecture, not software architecture
for Windows, so everything should also work on MacOS, Linux, or any other
modern OS: .Net is a cross-platform framework.

T echnology
Let’s quickly discuss the specific technologies that we’re going to choose and why.
Firstly, I will use Visual Studio to write all of the code samples in this book. You can
download the community edition of this here:

https://visualstudio.microsoft.com/vs/community/

You may also wish to use VS Code, which can be found here:

https://code.visualstudio.com/download

All of the applications that we create will be in .Net and written in C#. This choice
I made simply because it’s the language that I’m most familiar with; however, I don’t
believe there’s anything in here that couldn’t be translated to any other modern OO
development language; after all, architecture should be language agnostic. Most of the
principles are broader than a specific language and could apply to any language capable
of making HTTP calls.

xvii
Introduction

S
 etup
In this section, we’ll cover the basic setup that you’ll need to follow along with the code
samples. However, since this is predominantly a book on architecture, you should be
able to translate the concepts to any language.
Let’s cover a basic setup for those readers that wish to follow along.

T erminal
If you choose to use VS Code, you have a terminal built in; however, there are other
options.
Since you’re likely to be using Git, you can easily use git bash for the terminal
commands; you can download git for windows here:

https://gitforwindows.org/

Another possibility if you’re on Windows is the new (at least at the time of writing)
Microsoft Terminal. This can be found here:

https://aka.ms/terminal

Note This is, in fact, an open source product; you can find the source code for
it here:
https://github.com/Microsoft/Terminal

E xamples
The title of this book is Software Architecture by Example, so it will not surprise you to
learn that there are examples in each chapter. The purpose is to propose a problem,
suggest one or more solutions, and provide an example of how that solution might work
in reality.
What this doesn’t mean is that contained within the pages of this book are full,
complete, solutions to each problem. To illustrate my point by example, for the first
chapter, we address the problem of a business that sells tickets for concerts and festivals.

xviii
Introduction

In that chapter, there are code samples that will compile and run, but those samples are
for illustration purposes; there’s no website there, but I’ve made sure that each element
of the system is there by proxy – so the website will be simulated by a console app.

How to Use This Book


There are a number of ways that you may choose to use this book. Each chapter has
an explanation of an architectural principle, driven by the typical requirement that it
satisfies; once this has been explained, there is an example in each chapter.
All of the code for every chapter can be found here:

https://github.com/Apress/software-­architecture-­by-­example

You can choose to follow along and recreate the examples, or you can clone the
repo and simply view the code, or you may decide that you’re not interested in a specific
implementation, in which case, you can simply skip the examples altogether.

xix
Another Random Document on
Scribd Without Any Related Topics
THE KISS REFUSED.

I would kiss you, lover true!


But I fear the moon may spy;
Little bright stars watch us too.
Little star might fall from sky
To the blue sea, telling all!
To the oars the sea will tell,
Oars, in turn, tell Fisher Eno—
Him whom Mary loveth well—
And, when Mary knows a thing,
All the neighbourhood will know,
How by moonlight, in the garden,
Where the fragrant flowers grow,
I caressed, and fondly kissed thee,
While the silver apple-tree
Shed its blooms on you and me!
THE SNOWDROP.

How pure and how sweet,


Little snowdrop, you blow!
While, by you peeped through,
Fade the last streaks of snow.
Thus our last tears stream
For a sorrow gone by,
While dawns the first dream
Of a joy drawing nigh.

A smile and a tear, the sun and the shower,


How sweet they flash and flow!
Like sunlight clear, through the sparkling tear
Shines thy soul, refreshed by woe.
FROM COUNT TOLSTOI.
BELIEVE IT NOT.

Believe it not, when in excess of sorrow


I murmur that my love for thee is o’er!
When ebbs the tide, think not the sea’s a traitor—
He will return and love the land once more.

I still am pining, full of former passion,


To thee, again, my freedom I’ll restore,
E’en as the waves, with homeward murmur flowing,
Roll back from far to the belovèd shore.
THE SCOLDING.

Do not scold me so, my dear,


Wrath with words so feebly matching!
Such a scolding soothes my ear;
I’m your words intent on catching;
As they issue suddenly,
Pouring forth in pretty prattling,
What marvel that they sound to me
Pearls on silver salver rattling!
FROM VLADIMIR VLADISLAVLEF.
REFLECTION.

Pressed cheek to cheek we stand before the glass,


Wherein our forms reflected shine,
Gloomy my glance; but thy alluring face
With warmth and light illumines mine!

So on the bosom of the sleeping wave


The moon smiles with reflected light,
Full of the peace that dawns beyond the grave,
Softening the darkness of the night.
THE WOULD-BE NUN.

No, no! I can’t believe you!


Cease, cease to prattle so
Of single bliss, monastic vows,
And prayerful life below!

No, no! I can’t believe you!


That stately form divine,
That breast, that neck, those breathing limbs
To convent cell confine!

Yourself you don’t believe it!


Your words your glance belies,
And, full of other fancies,
Protest those flashing eyes.
THE SCHOOLBOY’S DEVIL.

You knew, of course, my special devil?


His cunning and his boldness charmed;
Pressed to my breast this sprite of evil
I warmed.

At first he worried me with fear;


I timid was, and mild, and young.
My shoulders were too weak to bear
His tongue.

Holding some mild traditions yet,


I shook and trembled, oft, in awe,
Till, lo! in him the Muse’s pet
I saw.

He caught me, then, with flash of phrase,


With living fantasies entranced,
And wicked eyes from grave to gay
He glanced!

With fiery speech well fused together,


Our friendly union grew complete,
Although at times with wintry weather
We’d meet.

Designing once to cause his death,


My fingers in a cross I twirled,[11]
Out came his tongue; off in a breath
He whirled.
But scarcely dawns the Eastern light,
The nightly blackness scarce is o’er,
Ere back he comes, my foe, my sprite,
Once more.

How smart he’s grown! and well up, too,


In Darwin’s and Descartes’ style!
He knows the sex; nor strange to loo
Meanwhile.

And chess he also right well knows,


And often billiards is his fad—
At times about this game he grows
Quite mad.

You knew him well, of course, of yore,


He cunning was, and boldly charmed;
I pressed him to my bosom’s core,
And warmed.

Ah! have I tired my friendly sprite?


His friendship’s flame has colder grown;
He now forgets and leaves me quite
Alone.

FOOTNOTES:
[11] I.e. made with the two first fingers and thumb, the sign of
the Russian cross.
POPULAR SONG.
THE GIPSY MAID.

I love thee! And believe it true!


The while your gipsy maid avows
That unto death she’ll love but you,
While life’s blood in her bosom flows.

For you she’ll leave her home of old,


She’ll follow you the wide world o’er.
The gipsy’s love will ne’er grow cold
Until the gipsy breathes no more.

Black bread, while meal to meal succeeds,


Her passion ne’er will lull to sleep;
One burning kiss is all she needs,
Her gipsy blood its warmth will keep.

When time of trial draweth nigh,


No burning tears will she outpour;
Well skilled is she in misery—
’Twill only make her love thee more.

No change which doth our being move


A single pang to her can give;
But change in him her soul doth love
She hath no power to overlive.
FROM TYOUCHEF.

Scarce cooled from midday heat


Sparkles the summer night;
O’er sinful earth a threatening cloud
Trembles, with lightnings bright.
Heaven’s sleepy eyelids ope,
And through each distant gleam,
The threatening orbs of One above
O’er earth to kindle seem.
THE SPRING STORM.

I love the storm in early May,


When spring’s first maiden thunder peals,
And, laughing in its frolic play,
Across the blue sky softly steals.

The little rumblings roll and ring;


The rain-shower glistens; flies the dust;
The rain-drop pearls in clusters cling,
And golden gleams the fields encrust.

From hillside headlong speeds the rill,


In groves the birds keep twittering,
And chattering wood and murmuring hill
Echo with joy the thundering.
PRINCE VYAZEMSKI.
THE TROIKA.[12]

Speeds the troika, leaping, bounding,


’Neath the horsehoofs dust-clouds fly,
While the little bells keep tinkling,
Weeping, laughing merrily.

Chorus.

Speed I, speed I, speed I to her


Speed I to my well-beloved!

Down the road, with glad notes ringing,


Echoes wide the joyous peal;
Now afar they jingle clearly,
Nor in muffled notes they steal.

Chorus.

Sails the moon from out the cloudlets;


Full reveals her luminous ring;
And a rippling gleam of silver
O’er the traveller’s face doth fling.

Chorus.

Who and whence this nightly traveller?


Is his distant journey done?
For his own or other’s pleasure
Speeds he through the dark alone?

Chorus.
Who can tell! He still is far off;
Plunged in cloud the moonbeams sweep,
While afar on distant moorland
Little bells are lulled to sleep.

Chorus.

FOOTNOTES:
[12] Sledge or car with three horses harnessed abreast.
FROM LEBEDEF.
THEODORA.

“So thou art he who yesterday


Didst round the arena roam—
Thy rivals scourge? thy chariot smoked,
Reeking with bloody foam.

“Now thou art mine! Upon this couch


Recline and yield to me,
Until the morning’s rosy light
My palace windows see.”

“Ah, Theodora, ne’er before


Have I thy threshold passed;
Thy cups of gold amaze my sight,
Thy fretted ceilings vast.

“Yet I know all. Through our stern land


The talk of thee has sped;
How every night a new Elect
Appears beside this bed.

“How, till the dawn, with burning kiss


The lips of lovers sting;
While to the folds of Eastern stuffs
The Eastern odours cling.

“But I, a simple country clown,


A common clod, who sport
In games with Death, am all unused
To splendours of a Court.

Вам также может понравиться