Learning JavaScript Design Patterns Addy Osmani instant download
Learning JavaScript Design Patterns Addy Osmani instant download
download
https://ebookname.com/product/learning-javascript-design-
patterns-addy-osmani/
https://ebookname.com/product/learning-javascript-design-
patterns-a-javascript-and-react-developer-s-guide-2nd-edition-
adnan-osmani/
https://ebookname.com/product/pro-javascript-design-patterns-1st-
edition-ross-harmes/
https://ebookname.com/product/learning-python-design-
patterns-2nd-edition-chetan-giridhar/
https://ebookname.com/product/%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d1%8
f-%d1%86%d0%b8%d1%84%d1%80%d0%be%d0%b2%d0%be%d0%b9-
%d1%84%d0%be%d1%82%d0%be%d0%b3%d1%80%d0%b0%d1%84%d0%b8%d0%
Experiments with People Revelations From Social
Psychology Robert P. Abelson
https://ebookname.com/product/experiments-with-people-
revelations-from-social-psychology-robert-p-abelson/
https://ebookname.com/product/theory-and-applications-of-digital-
speech-processing-1st-edition-lawrence-r-rabiner/
https://ebookname.com/product/regents-english-power-pack-revised-
edition-carol-chaitkin-carol-chaitkin/
https://ebookname.com/product/imagined-diasporas-among-
manchester-muslims-the-public-performance-of-pakistanis-
transnational-identities-1st-edition-pnina-werbner/
https://ebookname.com/product/encyclopedia-of-gender-and-society-
first-edition-jodi-a-obrien/
Armenians Beyond Diaspora Making Lebanon their Own 1st
Edition Tsolin Nalbantian
https://ebookname.com/product/armenians-beyond-diaspora-making-
lebanon-their-own-1st-edition-tsolin-nalbantian/
Learning JavaScript Design
Patterns
Addy Osmani
ISBN: 978-1-449-33181-8
1335906805
Table of Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2. What is a Pattern? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
We already use patterns everyday 4
6. Anti-Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
iii
Modules 27
Object Literals 27
The Module Pattern 29
The Revealing Module Pattern 36
The Observer Pattern 37
Advantages 38
Disadvantages 39
Implementations 39
The Mediator Pattern 49
Advantages & Disadvantages 50
Mediator Vs. Observer 51
Mediator Vs. Facade 51
The Prototype Pattern 52
The Command Pattern 54
The Facade Pattern 56
The Factory Pattern 58
When To Use The Factory Pattern 59
When Not To Use The Factory Pattern 59
The Mixin Pattern 60
The Decorator Pattern 61
Subclassing 61
Decorators 63
Example 1: Basic decoration of existing object constructors with new
functionality 63
Example 2: Simply decorate objects with multiple decorators 64
Pseudo-classical decorators 65
Interfaces 65
This variation of decorators and abstract decorators 66
Implementing decorators with jQuery 69
Pros and cons of the pattern 70
10. Flyweight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Flyweight and the data layer 72
Converting code to use the Flyweight pattern 72
A Basic Factory 74
Managing the extrinsic states 74
The Flyweight pattern and the DOM 76
Example 1: Centralized event handling 76
Example 2: Using the Flyweight for Performance Gains 77
iv | Table of Contents
MVC For JavaScript Developers 80
Models 81
Views 82
Controllers 85
Controllers in another library (Spine.js) vs Backbone.js 86
What does MVC give us? 87
Delving deeper 88
Summary 88
MVP 88
Models, Views & Presenters 89
MVP or MVC? 90
MVC, MVP and Backbone.js 90
MVVM 92
History 92
Model 93
View 94
ViewModel 96
Recap: The View and the ViewModel 98
Recap: The ViewModel and the Model 98
Pros and Cons 98
Advantages 98
Disadvantages 98
MVVM With Looser Data-Bindings 99
MVC Vs. MVP Vs. MVVM 103
Backbone.js Vs. KnockoutJS 103
Namespacing Patterns 104
What is namespacing? 104
Advanced namespacing patterns 105
Automating nested namespacing 105
Dependency declaration pattern 107
Deep object extension 108
Namespacing Fundamentals 110
1.Single global variables 111
2. Prefix namespacing 111
3. Object literal notation 112
4. Nested namespacing 114
5. Immediately-invoked Function Expressions (IIFE)s 115
6. Namespace injection 117
Table of Contents | v
The Adapter Pattern 123
The Facade Pattern 124
The Observer Pattern 125
The Iterator Pattern 126
The Strategy Pattern 127
The Proxy Pattern 127
The Builder Pattern 128
The Prototype Pattern 128
vi | Table of Contents
Further Reading 161
Custom Events For Pub/Sub (With The Widget factory) 161
Further Reading 162
Prototypal Inheritance With The DOM-To-Object Bridge Pattern 162
Further Reading 164
jQuery UI Widget Factory Bridge 164
Further Reading 166
jQuery Mobile Widgets With The Widget factory 167
RequireJS And The jQuery UI Widget Factory 169
Further Reading 172
Globally And Per-Call Overridable Options (Best Options Pattern) 172
Further Reading 174
A Highly Configurable And Mutable Plugin 174
Further Reading 176
UMD: AMD And CommonJS-Compatible Modules For Plugins 176
Further Reading 179
What Makes A Good Plugin Beyond Patterns? 179
Target Audience
This book is targeted at professional developers wishing to improve their knowledge
of design patterns and how they can be applied to the JavaScript programming lan-
guage.
Some of the concepts covered (closures, prototypal inheritance) will assume a level of
basic prior knowledge and understanding. If you find yourself needing to read further
about these topics, a list of suggested titles is provided for convenience.
If you would like to learn how to write beautiful, structured and organized code, I
believe this is the book for you.
Acknowledgments
I will always be grateful for the talented technical reviewers who helped review and
improve this book, including those from the community at large. The knowledge and
enthusiasm they brought to the project was simply amazing. The official technical re-
ix
viewers tweets and blogs are also a regular source of both ideas and inspiration and I
wholeheartedly recommend checking them out.
• Luke Smith (http://lucassmith.name, @ls_n)
• Nicholas Zakas (http://nczonline.net, @slicknet)
• Andrée Hansson (http://andreehansson.se, @peolanha)
• Alex Sexton (http://alexsexton.com, @slexaxton)
I would also like to thank Rebecca Murphey (http://rebeccamurphey.com, @rmur-
phey) for providing the inspiration to write this book and more importantly, continue
to make it both available on GitHub and via O'Reilly.
Finally, I would like to thank my wonderful wife Ellie, for all of her support while I was
putting together this publication.
Credits
Whilst some of the patterns covered in this book were implemented based on personal
experience, many of them have been previously identified by the JavaScript community.
This work is as such the production of the combined experience of a number of devel-
opers. Similar to Stoyan Stefanov's logical approach to preventing interruption of the
narrative with credits (in JavaScript Patterns), I have listed credits and suggested reading
for any content covered in the references section.
If any articles or links have been missed in the list of references, please accept my
heartfelt apologies. If you contact me I'll be sure to update them to include you on the
list.
Reading
Whilst this book is targeted at both beginners and intermediate developers, a basic
understanding of JavaScript fundamentals is assumed. Should you wish to learn more
about the language, I am happy to recommend the following titles:
• JavaScript: The Definitive Guide by David Flanagan
• Eloquent JavaScript by Marijn Haverbeke
• JavaScript Patterns by Stoyan Stefanov
• Writing Maintainable JavaScript by Nicholas Zakas
• JavaScript: The Good Parts by Douglas Crockford
x | Preface
CHAPTER 1
Introduction
One of the most important aspects of writing maintainable code is being able to notice
the recurring themes in that code and optimize them. This is an area where knowledge
of design patterns can prove invaluable.
In the first part of this book, we will explore the history and importance of design
patterns which can really be applied to any programming language. If you're already
sold on or are familiar with this history, feel free to skip to the chapter 'What is a
Pattern?' to continue reading.
Design patterns can be traced back to the early work of a civil engineer named Chris-
topher Alexander. He would often write publications about his experience in solving
design issues and how they related to buildings and towns. One day, it occurred to
Alexander that when used time and time again, certain design constructs lead to a
desired optimal effect.
In collaboration with Sara Ishikawa and Murray Silverstein, Alexander produced a
pattern language that would help empower anyone wishing to design and build at any
scale. This was published back in 1977 in a paper titled 'A Pattern Language', which
was later released as a complete hardcover book.
Some 30 years ago, software engineers began to incorporate the principles Alexander
had written about into the first documentation about design patterns, which was to be
a guide for novice developers looking to improve their coding skills. It's important to
note that the concepts behind design patterns have actually been around in the pro-
gramming industry since its inception, albeit in a less formalized form.
One of the first and arguably most iconic formal works published on design patterns
in software engineering was a book in 1995 called Design Patterns: Elements Of Reusable
Object-Oriented Software. This was written by Erich Gamma,Richard Helm,Ralph
Johnson andJohn Vlissides - a group that became known as the Gang of Four (or GoF
for short).
The GoF's publication is considered quite instrumental to pushing the concept of de-
sign patterns further in our field as it describes a number of development techniques
1
and pitfalls as well as providing twenty-three core Object-Oriented design patterns
frequently used around the world today. We will be covering these patterns in more
detail in the section ‘Categories of Design Patterns’.
In this book, we will take a look at a number of popular JavaScript design patterns and
explore why certain patterns may be more suitable for your projects than others. Re-
member that patterns can be applied not just to vanilla JavaScript (i.e standard Java-
Script code), but also to abstracted libraries such as jQuery or dojo as well. Before we
begin, let’s look at the exact definition of a ‘pattern’ in software design.
2 | Chapter 1: Introduction
CHAPTER 2
What is a Pattern?
3
gramming language) you are working with, design patterns can be applied to im-
prove the structure of your code.
• Certain patterns can actually decrease the overall file-size footprint of your
code by avoiding repetition.By encouraging developers to look more closely at
their solutions for areas where instant reductions in repetition can be made, e.g.
reducing the number of functions performing similar processes in favor of a single
generalized function, the overall size of your codebase can be decreased.
• Patterns add to a developers vocabulary, which makes communication
faster.
• Patterns that are frequently used can be improved over time by harnessing
the collective experiences other developers using those patterns contribute
back to the design pattern community. In some cases this leads to the creation
of entirely new design patterns whilst in others it can lead to the provision of im-
proved guidelines on how specific patterns can be best used. This can ensure that
pattern-based solutions continue to become more robust than ad-hoc solutions
may be.
Remember that not every algorithm, best-practice or solution represents what might
be considered a complete pattern. There may be a few key ingredients here that are
missing and the pattern community is generally weary of something claiming to be one
unless it has been heavily vetted. Even if something is presented to us which appears
to meet the criteria for a pattern, it should not be considered one until it has undergone
suitable periods of scrutiny and testing by others.
Looking back upon the work by Alexander once more, he claims that a pattern should
both be a process and a ‘thing’. This definition is obtuse on purpose as he follows by
saying that it is the process should create the ‘thing’. This is a reason why patterns
generally focus on addressing a visually identifiable structure i.e you should be able to
visually depict (or draw) a picture representing the structure that placing the pattern
into practice results in.
In studying design patterns, you may come across the term ‘proto-pattern’ quite fre-
quently. What is this? Well, a pattern that has not yet been known to pass the ‘pattern’-
ity tests is usually referred to as a proto-pattern. Proto-patterns may result from the
work of someone that has established a particular solution that is worthy of sharing
with the community, but may not have yet had the opportunity to have been vetted
heavily due to its very young age.
Alternatively, the individual(s) sharing the pattern may not have the time or interest of
going through the ‘pattern’-ity process and might release a short description of their
proto-pattern instead. Brief descriptions or snippets of this type of pattern are known
as patlets.
The work involved in fully documenting a qualified pattern can be quite daunting.
Looking back at some of the earliest work in the field of design patterns, a pattern may
be considered ‘good’ if it does the following:
7
• Solves a particular problem: Patterns are not supposed to just capture principles
or strategies. They need to capture solutions. This is one of the most essential
ingredients for a good pattern.
• The solution to this problem cannot be obvious: You can often find that prob-
lem-solving techniques attempt to derive from well-known first principles. The
best design patterns usually provide solutions to problems indirectly - this is con-
sidered a necessary approach for the most challenging problems related to design.
• The concept described must have been proven: Design patterns require proof
that they function as described and without this proof the design cannot be seri-
ously considered. If a pattern is highly speculative in nature, only the brave may
attempt to use it.
• It must describe a relationship: In some cases it may appear that a pattern de-
scribes a type of module. Although an implementation may appear this way, the
official description of the pattern must describe much deeper system structures
and mechanisms that explain its relationship to code.
We would be forgiven for thinking that a proto-pattern which fails to meet guidelines
isn't worth learning from, however, this is far from the truth. Many proto-patterns are
actually quite good. I’m not saying that all proto-patterns are worth looking at, but
there are quite a few useful ones in the wild that could assist you with future projects.
Use best judgment with the above list in mind and you’ll be fine in your selection
process.
One of the additional requirements for a pattern to be valid is that they display some
recurring phenomenon. This is often something that can be qualified in at least three
key areas, referred to as the rule of three. To show recurrence using this rule, one must
demonstrate:
1. Fitness of purpose - how is the pattern considered successful?
2. Usefulness- why is the pattern considered successful?
3. Applicability - is the design worthy of being a pattern because it has wider ap-
plicability? If so, this needs to be explained.When reviewing or defining a pattern,
it is important to keep the above in mind.
You may be curious about how a pattern author might approach outlining structure,
implementation and purpose of a new pattern. Traditionally, a pattern is initially be
presented in the form of a rule that establishes a relationship between:
• A context
• A system of forces that arises in that context and
• A configuration that allows these forces to resolve themselves in context
With this in mind, lets now take a look at a summary of the component elements for
a design pattern. A design pattern should have a:
• Pattern name and a description
• Context outline – the contexts in which the pattern is effective in responding to
the users needs.
• Problem statement – a statement of the problem being addressed so we can un-
derstand the intent of the pattern.
• Solution – a description of how the user’s problem is being solved in an under-
standable list of steps and perceptions.
• Design – a description of the pattern’s design and in particular, the user’s behavior
in interacting with it
• Implementation– a guide to how the pattern would be implemented
• Illustrations – a visual representation of classes in the pattern (e.g. a diagram))
• Examples – an implementation of the pattern in a minimal form
• Co-requisites – what other patterns may be needed to support use of the pattern
being described?
• Relations – what patterns does this pattern resemble? does it closely mimic any
others?
• Known usage – is the pattern being used in the ‘wild’?. If so, where and how?
• Discussions – the team or author’s thoughts on the exciting benefits of the pattern
9
Design patterns are quite a powerful approach to getting all of the developers in an
organization or team on the same page when creating or maintaining solutions. If you
or your company ever consider working on your own pattern, remember that although
they may have a heavy initial cost in the planning and write-up phases, the value re-
turned from that investment can be quite worth it. Always research thoroughly before
working on new patterns however, as you may find it more beneficial to use or build
on top of existing proven patterns than starting afresh.
Although this book is aimed at those new to design patterns, a fundamental under-
standing of how a design pattern is written can offer you a number of useful benefits.
For starters, you can gain a deeper appreciation for the reasoning behind a pattern being
needed. You can also learn how to tell if a pattern (or proto-pattern) is up to scratch
when reviewing it for your own needs.
Writing good patterns is a challenging task. Patterns not only need to provide a sub-
stantial quantity of reference material for end-users (such as the items found in the
structure section above), but they also need to be able to defend why they are necessary.
If you’ve already read the previous section on ‘what’ a pattern is, you may think that
this in itself should help you identify patterns when you see them in the wild. This is
actually quite the opposite - you can’t always tell if a piece of code you’re inspecting
follows a pattern.
When looking at a body of code that you think may be using a pattern, you might write
down some of the aspects of the code that you believe falls under a particular existing
pattern.In many cases of pattern-analysis you’ll find that you’re just looking at code
that follows good principles and design practices that could happen to overlap with the
rules for a pattern by accident. Remember - solutions in which neither interactions nor
defined rules appear are not patterns.
If you’re interested in venturing down the path of writing your own design patterns I
recommend learning from others who have already been through the process and done
it well. Spend time absorbing the information from a number of different design pattern
descriptions and books and take in what’s meaningful to you - this will help you ac-
complish the goals you have laid out for yours. Explore structure and semantics - this
can be done by examining the interactions and context of the patterns you are interested
in so you can identify the principles that assist in organizing those patterns together in
useful configurations.
Once you’ve exposed yourself to a wealth of information on pattern literature, you may
wish to begin your pattern using an existing format and see if you can brainstorm new
ideas for improving it or integrating your ideas in there. An example of someone that
11
did this is in recent years is Christian Heilmann, who took the existing module pattern
and made some fundamentally useful changes to it to create the revealing module pat-
tern (this is one of the patterns covered later in this book).
If you would like to try your hand at writing a design pattern (even if just for the learning
experience of going through the process), the tips I have for doing so would be as
follows:
• Bear in mind practicability: Ensure that your pattern describes proven solutions
to recurring problems rather than just speculative solutions which haven’t been
qualified.
• Ensure that you draw upon best practices: The design decisions you make
should be based on principles you derive from an understanding of best-practices.
• Your design patterns should be transparent to the user: Design patterns should
be entirely transparent to any type of user-experience. They are primarily there to
serve the developers using them and should not force changes to behavior in the
user-experience that would not be incurred without the use of a pattern.
• Remember that originality is not key in pattern design: When writing a pattern,
you do not need to be the original discoverer of the solutions being documented
nor do you have to worry about your design overlapping with minor pieces of other
patterns.If your design is strong enough to have broad useful applicability, it has
a chance of being recognized as a proper pattern
• Know the differences between patterns and design: A design pattern generally
draws from proven best practice and serves as a model for a designer to create a
solution. The role of the pattern is to give designers guidance to make the best design
choices so they can cater to the needs of their users.
• Your pattern needs to have a strong set of examples: A good pattern description
needs to be followed by an equally strong set of examples demonstrating the suc-
cessful application of your pattern. To show broad usage, examples that exhibit
good design principles are ideal.
Pattern writing is a careful balance between creating a design that is general, specific
and above all, useful. Try to ensure that if writing a pattern you cover the widest possible
areas of application and you should be fine. I hope that this brief introduction to writing
patterns has given you some insights that will assist your learning process for the next
sections of this book.
13
is parallel to the way in which design patterns provide us with a way to recognize
common techniques that are useful.
To summarize, an anti-pattern is a bad design that is worthy of documenting. Examples
of anti-patterns in JavaScript are the following:
• Polluting the global namespace by defining a large number of variables in the global
context
• Passing strings rather than functions to either setTimeout or setInterval as this
triggers the use of eval() internally.
• Modifying the Object class prototype (this is a particularly bad anti-pattern)
• Using JavaScript in an inline form as this is inflexible
• The use of document.write where native DOM alternatives such as document.cre-
ateElement are more appropriate. document.write has been grossly misused over
the years and has quite a few disadvantages including that if it's executed after the
page has been loaded it can actually overwrite the page you're on, whilst docu-
ment.createElement does not. You can see here for a live example of this in action.
It also doesn't work with XHTML which is another reason opting for more DOM-
friendly methods such as document.createElement is favorable.
Knowledge of anti-patterns is critical for success. Once you are able to recognize such
anti-patterns, you will be able to refactor your code to negate them so that the overall
quality of your solutions improves instantly.
14 | Chapter 6: Anti-Patterns
Another Random Document on
Scribd Without Any Related Topics
semblait légitime d'opposer la ruse à la ruse, la trahison à la perfidie,
et on louait Baldzo comme le libérateur de la patrie.
Le roi Lodwig s'empressa de profiter du crime d'Arnulf. Rikhard, fils
de Wilhelm, était encore enfant. Le roi Lodwig se présenta à Rouen
comme le vengeur du martyr de Pecquigny. «Je veux, disait le roi de
France aux habitants de cette cité, détruire les remparts des
Flamands et enlever leurs biens à main armée. Quel que soit le lieu
où se trouve Arnulf, j'y conduirai mes fidèles, et si jamais je puis
l'atteindre je le punirai comme il le mérite.» Il obtint par ces
astucieux discours qu'on lui confiât le jeune héritier du duché de
Normandie. Cependant dès qu'il eut quitté les bords de la Seine, il
reçut des députés du comte de Flandre qui s'exprimèrent en ces
termes «On accuse notre seigneur d'avoir pris part à l'injuste mort
du duc Wilhelm, mais il est prêt à soutenir le contraire par l'épreuve
du feu. De plus, notre seigneur vous adresse ce conseil important:
Gardez à jamais Rikhard, fils de Wilhelm, afin d'assurer dans vos
mains le repos du royaume.»
Le roi de France agréa les protestations d'Arnulf et approuva son
conseil; mais il le suivit avec peu d'habileté. Le jeune Rikhard
s'échappa de sa prison. Lodwig trembla: il redoutait et la colère des
Normands et l'ambition du duc Hug, prêt à profiter de toutes les
dissensions. Dominé par ses craintes et ne sachant à quelle
résolution il devait s'arrêter, il appela près de lui, à Rhétel, le comte
de Flandre. «Je redoute, il est vrai, répondit Arnulf, que le duc Hug
ne s'allie aux Normands. Hâtez-vous donc, seigneur, de le combler
de présents et de bienfaits. Accordez-lui la haute Normandie, depuis
la Seine jusqu'à la mer, afin de pouvoir conserver paisiblement les
pays situés sur la rive septentrionale du fleuve. Diviser la
Normandie, c'est l'affaiblir et la rendre impuissante à nous
combattre.» Le roi Lodwig, docile à ces conseils, cherche à s'attacher
le duc Hug par les plus brillantes promesses; il parvient même à
réconcilier Arnulf et Herluin, et bientôt, accompagné d'une
nombreuse armée, il envahit la Normandie. Au combat d'Arques, le
comte de Flandre défait les Normands de Rikhard. Lodwig entre
bientôt à Rouen; mais, égaré par l'orgueil de son triomphe, il
méprise l'alliance du duc Hug et lui refuse les dépouilles qui lui
avaient été promises. Aussitôt une émeute, à laquelle Hug, sans
doute, n'était point étranger, éclate parmi les Normands. Herluin,
qui, après avoir été la première cause de la mort du duc Wilhelm,
était devenu l'allié d'Arnulf et le rival du duc de France, y périt.
Lodwig lui-même, retenu quelques jours prisonnier, ne recouvre sa
liberté qu'après avoir solennellement reconnu tous les droits
héréditaires du jeune duc de Normandie, qui épouse la fille du duc
Hug le Grand.
Les conseils du comte de Flandre ne manquèrent point au roi Lodwig
dans ses revers: «Avez-vous oublié, lui dit-il de nouveau, l'usurpation
du comte Robert? Son fils Hug, animé par une semblable ambition,
cherche à vous enlever le sceptre de ce royaume, et s'allie au duc
des Normands pour nous perdre complètement l'un et l'autre, vous,
seigneur, qui êtes roi, et moi qui suis votre fidèle.—Apprends-moi
donc, répliqua le roi Lodwig, à quels moyens je dois recourir pour
résister à l'orgueil du duc Hug et défendre ma personne et mon
royaume.» Arnulf continua en ces termes «Il faut céder la
Lotharingie à votre beau-frère, le roi Othon de Germanie, s'il consent
à s'avancer jusqu'à Paris pour ravager le domaine du duc Hug, et à
faire ensuite la conquête de Rouen; car la terre des Normands vous
est plus précieuse que la Lotharingie.—Il convient, repartit le roi,
qu'un comte aussi illustre, qu'un prince aussi habile et aussi
prévoyant que toi, exécute fidèlement le sage conseil qu'il a donné à
son seigneur. Or, puisque tu es le plus célèbre, le plus redoutable, le
plus digne de foi de tous mes vassaux, je te prie d'aller engager le
roi Othon à tenter cette expédition que ta prudence me fait désirer,
afin que, guidé par ta puissante intervention, il assemble toutes les
vaillantes armées de son royaume, ravage la terre du duc Hug
jusque sous les murs de Paris, et fasse éprouver aux Normands ce
que peut le courage de ses leudes.»
A une autre époque, la Lotharingie avait été promise au roi
d'Allemagne, Henrik l'Oiseleur, pour prix de sa coopération à la
guerre que termina la bataille de Soissons. Le comte de Flandre
l'offrit de nouveau à son fils. Le roi Othon, persuadé par ses
astucieux discours, réunit ses armées, chassa Hug de son duché et
se dirigea avec le roi Lodwig vers Rouen. Arnulf ne cessait de flatter
l'esprit d'Othon de l'espoir d'un triomphe facile. «Où sont les clefs de
Rouen?» demanda le roi de Germanie arrivé sur l'Epte. Enfin,
lorsque après un sanglant combat où périrent un grand nombre des
siens, le roi Othon apprit que la Seine empêchait de bloquer Rouen,
il regretta son expédition et convoqua les chefs de son armée:
«Voyez, leur dit-il, ce qu'il convient que nous fassions. Trompés par
les prières du roi Lodwig et les ruses du comte Arnulf, nous sommes
venus en ces lieux chercher la honte et les revers. Je veux, si tel est
votre avis, saisir Arnulf, ce perfide séducteur, et le remettre chargé
de chaînes au duc Rikhard, afin qu'il venge son père.»
Dès qu'Arnulf connut le projet du roi de Germanie, il ordonna à ses
leudes de replier leurs tentes, les fit charger sur ses chariots, et
s'éloigna pendant la nuit pour chercher un asile en Flandre. Le
départ des Flamands répandit une extrême confusion dans le camp
des Allemands: ils se retirèrent précipitamment et les Normands les
poursuivirent jusqu'auprès d'Amiens. Othon, de plus en plus irrité, ne
rentra dans ses Etats qu'après avoir semé la terreur dans ceux
d'Arnulf. On attribue à Othon la fondation d'un château situé près de
la Lys, aux limites de la France et de la Lotharingie, vis-à-vis du
château que les comtes de Flandre avaient élevé sur la Lieve. Il était
destiné à protéger la ville de Gand et l'abbaye de Saint-Bavon, qui se
trouvaient sur les terres de l'empire. Othon y établit pour châtelain
Wigman, issu de la famille des grafs frisons auxquels une charte de
Lodwig le Germanique avait accordé le gouvernement de la forêt de
Waes.
Il ne paraît point que le comte de Flandre se soit opposé à la
construction du château de Wigman. Une infirmité cruelle l'accablait,
et il avait fait appeler près de lui l'abbé de Brogne pour le supplier de
guérir ses douleurs; mais le pieux cénobite se contenta de lui
répondre: «Elève tes pensées vers le Seigneur, et puisque tu as
réuni des richesses si considérables, prends-en quelque chose pour
soulager les pauvres: c'est ainsi que tu pourras effacer l'énormité de
tes crimes.»
Depuis le siége de Rouen, et malgré la déplorable issue de
l'expédition dirigée contre les Normands, Arnulf restait le soutien de
la royauté de Lodwig. Hug le poursuivait avec toute la haine qu'il
portait au roi de France et se disposait même à envahir la Flandre,
mais il se retira bientôt après avoir inutilement tenté de mettre le
siége devant quelques forteresses. Arnulf profita de son absence
pour conquérir Montreuil et le château d'Amiens. En 949, il s'avança
avec le roi Lodwig jusqu'aux portes de Senlis.
Au milieu des ces guerres parut une invasion de Madgiars hongrois,
peuples d'origine asiatique accourus des bords du Tanaïs, qui
n'obéissaient qu'au fouet de leurs maîtres. Ils avaient obtenu la
permission de traverser la Lotharingie en s'engageant à ne point la
piller, et le 24 avril 953 ils campèrent aux bords de l'Escaut dans les
prairies qui entourent la cité de Cambray. Dès leur première attaque,
ils perdirent un de leurs principaux chefs. La soif de la vengeance
rendit leurs assauts plus terribles. L'évêque priait prosterné devant
les reliques des saints, puis parfois il montait sur les remparts et
disait aux combattants: «C'est la cause de Dieu que vous soutenez
contre ces barbares, c'est la cause de Dieu qui triomphera.» Les
Hongrois s'éloignaient, quand un clerc, placé au clocher du
monastère de Saint-Géry, qui était situé hors de l'enceinte de la ville,
lança une flèche au milieu d'eux; son imprudente audace réveilla la
colère des barbares; ils revinrent, s'emparèrent de l'église de Saint-
Géry, et la livrèrent aux flammes après avoir immolé tous ses
défenseurs. Ces hordes féroces, privées de ces recrues continuelles
qui avaient fait la force des Normands, ne tardèrent point à
disparaître complètement.
Arnulf le Grand gouvernait la monarchie flamande depuis près de
quarante années; son influence s'affaiblissait à mesure que sa
carrière penchait vers son déclin. Lorsque le roi Lodwig eut achevé,
le 8 septembre 954, au milieu des revers, sa triste et courte vie, son
fils Lother, instruit par son exemple, se hâta d'aller se placer sous la
protection du duc Hug, et la Flandre se trouva de nouveau isolée.
Cependant Arnulf avait abandonné toute l'autorité à son fils Baldwin.
La puissance militaire de la Flandre sembla se relever un moment.
En 957, Baldwin combat Rotger, fils d'Herluin, qui lui disputait le
château d'Amiens. En 961, lorsque le duc Rikhard s'avance de Rouen
vers Soissons, il conduit une armée au secours du roi Lother et
défait les Normands; mais, au retour de cette expédition, il meurt au
monastère de Saint-Bertin, laissant après lui un fils encore au
berceau, qui portait le nom de son aïeul.
Ainsi, le comte Arnulf se vit réduit à reprendre les soins du
gouvernement. Accablé par la décrépitude des ans, il cherchait le
repos et ne le trouvait point: c'était en vain qu'il restituait aux
monastères les biens que jadis il leur avait enlevés, qu'il fondait à
Bruges le chapitre de Saint-Donat et envoyait aux basiliques de
Reims de précieux reliquaires et des livres enrichis d'or et d'argent;
c'était en vain qu'il croyait apaiser la justice du ciel en écrivant dans
ses actes publics: «Moi, Arnulf, je me reconnais coupable et
pécheur:» le remords ramenait sans cesse autour de lui le trouble et
l'inquiétude. Dans sa maison, au sein de sa propre famille, un de ses
neveux conspirait. Arnulf, toujours impitoyable, lui fit trancher la
tête. Celui qui périt avait un frère qui voulut venger sa mort. Le
comte de Flandre allait peut-être répandre de nouveau le sang des
siens et ordonner un second supplice, lorsque le roi Lother intervint,
fit accepter une réconciliation et força le comte Arnulf à remettre sa
terre entre ses mains, en lui permettant de la posséder tant que sa
vie se prolongerait. Elle ne dura que deux années, et se termina le
27 mars 964; mais Arnulf le Grand se survécut à lui-même en
donnant pour tuteur à son petit-fils le confident et l'instrument de
ses vengeances, le comte de Cambray, Baldwin Baldzo.
Dès que le roi Lother apprit la mort du comte Arnulf, il réunit une
armée de Franks et de Bourguignons, s'empara d'Arras et s'avança
jusqu'à la Lys. Par son ordre, le comte Wilhelm de Ponthieu occupa
le pays de Térouane. Mais bientôt Baldwin Baldzo repoussa le roi de
France, et le força à restituer Arras et à recevoir l'hommage du
nouveau comte de Flandre. Wilhelm de Ponthieu ne conserva ses
possessions qu'en devenant le vassal d'Arnulf le Jeune.
Lorsque Arnulf le Jeune prit dans ses mains les rênes du
gouvernement de la Flandre, l'empereur Othon, sur les plaintes des
habitants du Hainaut, venait de déposer leur comte Reginher, et
avait placé leur pays sous la protection du compte Arnulf de Flandre
et de Godfried d'Ardenne, qui obtint plus tard la main de Mathilde de
Saxe, veuve de Baldwin, fils d'Arnulf le Grand. Cependant les fils de
Reginher rentrèrent en Hainaut: l'un avait épousé la fille du duc Karl
de Lotharingie, frère du roi Lother; l'autre, Hedwige, fille de Hug
Capet, fils et successeur de Hug le Grand. Soutenus par la France, ils
recouvrèrent leur patrimoine après un sanglant combat, où l'on vit,
si l'on peut ajouter foi au récit du continuateur de Frodoard, Arnulf
de Flandre se déshonorer par une fuite honteuse, tandis que le
comte d'Ardenne, percé d'un coup de lance, restait étendu à terre, et
privé de tout secours, jusqu'au coucher du soleil.
Le roi Lother mourut en 986. Son successeur Lodwig ne régna qu'un
an et ne laissa point de postérité. Le duc Karl de Lotharingie, frère
du roi Lother, devenait l'héritier de la couronne; mais, au lieu
d'accepter la tutelle des ducs de France, il s'allia aux comtes de
Vermandois et épousa la fille d'Herbert de Troyes, tandis que Hug
Capet se faisait proclamer roi à Noyon. Le comte Arnulf de Flandre
soutint le frère de Lother dans ses guerres, et bientôt après le roi
Karl vainquit l'armée du roi Hug. Il avait conquis le château de
Montaigu, occupait Reims et menaçait Soissons, lorsque la perfidie
de l'évêque de Laon le livra à ses ennemis. Pendant longtemps, chez
les hommes de race franke, on méprisa la royauté du duc de France,
en maudissant le nom des traîtres qui avaient assuré son triomphe.
«De quel droit, écrivait l'illustre Gerbert, l'héritier légitime du
royaume a-t-il été déshérité et dépouillé?» Malgré ces plaintes et ces
regrets qui ne s'effacèrent que lentement, la dynastie karlingienne
périssait: elle disparaît à Orléans dans les ténèbres d'une prison,
puis s'éteint, humble et ignorée, aux bords de la Meuse, non loin du
manoir paternel d'Héristal, où Peppin et Alpaïde virent naître Karl le
Martel, illustre aïeul de l'infortuné Karl de Lotharingie.
Arnulf le Jeune mourut vers le temps où le roi Karl fut conduit captif
à Orléans.
Depuis la Meuse jusqu'aux Pyrénées tout est tumulte et confusion.
L'Aquitaine, l'Anjou, la Normandie, la Champagne, la Bourgogne, le
Vermandois s'agitent et s'abandonnent à des luttes intestines: la
royauté, entre les mains de Hug Capet, n'est plus qu'un domaine
menacé par l'ambition germanique.
En Flandre, la même désorganisation existe. Les successeurs de
Sigfried et de Wilhelm de Ponthieu se partagent les comtés de
Guines, de Saint-Pol, de Boulogne. A peine le comte Arnulf a-t-il
fermé les yeux que le comte Eilbode se rend indépendant à Courtray.
Ainsi s'achève la période la plus triste et la plus stérile de notre
histoire. Le siècle d'Arnulf le Grand ne présente aux regards qu'une
sanglante arène, où les combats et les crimes se succèdent sans
relâche. La civilisation languit et refuse sa douce lumière au monde
féodal qui la méprise. Dans la patrie des Hincmar, des Milon, des
Hucbald, on ne trouve plus à cette époque un seul homme qui brille
par sa science ou son génie. Les priviléges des cités épiscopales et
des monastères ne sont plus respectés. De toutes parts, les comtes
et les hommes de guerre accourent pour s'arroger les abbayes, et
lorsqu'ils les abandonnent à quelque moine pauvre et obscur, il se
réservent, sous le nom d'avoués, la surveillance et l'administration
des biens ecclésiastiques qu'ils pillent impunément: ils dépouillent
les clercs de leurs anciennes libertés pour les soumettre à leurs
usages barbares. A Gand, le monastère de Saint-Pierre donne un fief
de sept mesures de terre à Hug de Schoye pour qu'il défende l'abbé
en duel. Otbert, abbé de Saint-Bertin, auquel un noble avait déféré
le combat judiciaire, ne connaissait personne qui voulût descendre
en champ clos pour soutenir sa querelle, lorsque l'apparition
merveilleuse de deux colombes lui fait trouver un champion.
Si dans l'ordre politique tout est ruine et décadence, les mêmes
symptômes de dissolution se reproduisent dans la vie intérieure de la
société et jusqu'au sein de la famille. L'an 1000 approchait. L'accord
unanime des superstitions populaires avait fixé à cette année la fin
du monde; mais les uns la comptaient depuis la Nativité du Sauveur,
d'autres, en plus grand nombre, du jour de la Passion. A mesure que
cette époque devenait moins éloignée, les terreurs augmentaient:
l'imagination du peuple se montrait de plus en plus vivement
frappée, et dans les malheurs qui l'accablèrent il crut apercevoir les
signes précurseurs de l'accomplissement des prophéties.
En 1007, une peste épouvantable désola la Flandre. Elle se déclara
de nouveau vers l'an 1012. Quelques boutons se formaient sur le
palais; si l'on ne prenait soin de les percer aussitôt, le mal était sans
remède. Ses ravages étaient prompts et affreux. Plus de la moitié
des populations succomba, et parmi ceux qui survécurent il n'y en
avait point, dit un hagiographe, qui, en rendant les derniers
honneurs à leurs parents et à leurs amis, ne s'attendissent à les
suivre bientôt dans le tombeau.
Aux ravages de la peste succédèrent ceux des inondations. «Une
chose digne de pitié et d'admiration, raconte l'annaliste de
Quedlinburg, arriva le 29 septembre 1014 dans le pays de Walcheren
et en Flandre. Pendant trois nuits, d'effroyables nuages, s'arrêtant
dans une merveilleuse immobilité, menacèrent tous ceux dont ils
frappèrent les regards; enfin le troisième jour, le tonnerre, éclatant
avec un bruit épouvantable, souleva les ondes furieuses de la mer
jusqu'au milieu des nuées. L'antique chaos semblait renaître. Les
habitants fuyaient en faisant entendre de longs gémissements; mais
l'invasion subite des flots fit périr beaucoup de milliers d'hommes,
qui ne purent se dérober à la colère du Seigneur.»
«On croyait, ajoute Rodulf Glaber, que la révolution des siècles
écoulés depuis le commencement des choses allait conduire l'ordre
des temps et de la nature au chaos éternel et à l'anéantissement du
genre humain. Cependant, au milieu de la stupeur profonde qui
régnait de toutes parts, il y avait peu d'hommes qui élevassent et
leurs cœurs et leurs mains vers le Seigneur. Une cruelle famine se
répandit sur toute la terre et menaça les hommes d'une destruction
presque complète. Les éléments semblaient se combattre les uns les
autres et punir nos crimes. Les tempêtes arrêtaient les semailles; les
inondations ruinaient les moissons. Pendant trois années, le sillon
resta stérile.»
Si la plupart des hommes étrangers aux sublimes sentiments de la
résignation, qui n'appartiennent qu'à la vertu, se livraient tour à tour
aux conseils de leur désespoir, ou aux caprices de leur imagination
en délire, il y en eut d'autres qui se montrèrent plus pieux et plus
sages. Plusieurs seigneurs, dans l'attente de la fin du monde,
affranchirent les colons de leurs domaines; dans toute la France les
guerres particulières furent suspendues par la trêve de Dieu, et
quelques pèlerins se dirigèrent vers Jérusalem.
La société croyait mourir: elle allait commencer à vivre.
LIVRE QUATRIÈME.
989-1119.
Ce nom leur resta par un jeu bizarre de la fortune, qui relevait la cité
de Turnus, minée sous le beau ciel des Rutules, chez les Morins, que
Virgile appelait les plus reculés des hommes. Ardres prospéra; la
fertilité de ses campagnes y appelait sans cesse de nouveaux
habitants. Herred voulut aussi aller, avec Athèle de Selvesse, y fixer
son séjour; mais ses parents et ses amis, hostiles à tout ce qui
rappelait l'union et la paix, l'exhortèrent à ne point quitter le sombre
donjon de sa forteresse.
Cependant le comte Rodulf de Guines essaya de réduire par la force
ces populations d'origine saxonne. Non-seulement il soumit les karls
à un impôt qui était d'un denier chaque année et de quatre deniers
le jour de leur mariage ou de leur mort, mais il ordonna aussi qu'ils
renonçassent à leurs couteaux pour ne garder que leurs massues.
Après le scharm-sax, l'arme nationale des races saxonnes, la massue
à laquelle elles donnaient le nom de colf était celle qu'elles
chérissaient le plus. Consacrée au dieu Thor, protecteur de leurs
colonies, que l'Edda nous montre portant une massue dans ses
combats contre les géants, elle était pour elles le symbole de la
conquête qui élevait leur gloire et de l'association qui faisait leur
force. Lambert d'Ardres attribue à la défense du comte Rodulf
l'origine du nom des colve-kerli, ou karls armés de massues, que
conservèrent les cultivateurs du pays de Guines.
En abordant le récit d'une période historique signalée par les
désastres des Saxons d'Angleterre, il ne paraîtra peut-être point
inutile que nous nous occupions un instant des autres colonies
saxonnes, sœurs et compagnes des populations flamandes, dont
elles avaient partagé les migrations et l'établissement sur le Littus
Saxonicum. Au nord de la Flandre, elles s'étaient fixées en grand
nombre dans les marais de la Frise, sur les rives de la Meuse et du
Rhin. A l'exemple des bourgeois de Bruges, celles qui occupaient la
ville de Thiel entretenaient un commerce important avec l'Angleterre
et jouissaient de la liberté la plus étendue. Leurs gildes se
réunissaient, à diverses époques de l'année, en de solennels
banquets qu'égayait leur grossière ivresse, et elles conservaient
l'usage de la contribution pécuniaire à laquelle elles devaient leur
nom. Cependant des pirates de races diverses ne cessaient
d'aborder sur le rivage de la mer, abandonné sans défense à leurs
fureurs. Arnulf de Gand, fils de Wigman, avait trouvé la mort en les
combattant, et sur l'instante prière de sa veuve Lietgarde de
Luxembourg, dont la sœur Kunegund avait épousé l'empereur Henrik
II, une flotte allemande avait été armée pour châtier leur audace.
Theodrik, fils d'Arnulf de Gand, qui avait succédé aux possessions de
son père en Frise, voulut soumettre à un impôt onéreux les
marchands de Thiel et les karls dont il usurpait les terres. Ceux-ci,
blessés dans leurs droits d'hommes libres, adressèrent leurs plaintes
à l'empereur qui les écouta; mais Arnulf refusait de se conformer à
sa décision, et on le vit, oubliant quelles mains avaient frappé son
père pour n'écouter que son ambition, s'allier aux pirates de la forêt
de Merweede et triompher avec eux à la sanglante journée de
Vlaerdingen. Theodrik, fils d'Arnulf de Gand, fut l'aïeul des comtes de
Hollande.
Au sud de la Flandre, vers les bords de la Seine, les vicomtes et les
seigneurs normands persécutaient les hommes de race saxonne. De
même que Theodrik en Frise, ils les chassaient de leurs champs et
entravaient leur commerce sur les rivières. Leurs gildes, jadis
opprimées par Karl le Chauve, se réunirent: «Quoi! s'écrièrent les
karls de Normandie, dont les plaintes répétèrent sans doute celles
de leurs frères de la Meuse, on nous charge d'impôts et de corvées!
Il n'y a nulle garantie pour nous contre les seigneurs et leurs
sergents; ils ne respectent aucun pacte. Et ne sommes-nous pas
libres comme eux? Lions-nous par des serments; jurons de nous
soutenir les uns les autres, et s'ils nous attaquent, nous avons nos
glaives et nos massues.»—Ils voulaient, d'après Guillaume de
Jumièges, rétablir l'autorité de leurs lois, et nommèrent des députés
qui devaient former une assemblée supérieure, le wittenagemot de
leur association; mais les Normands étouffèrent par la force ce
mouvement qui s'étendait dans les bois et dans les plaines, et les
karls se virent réduits à leurs charrues.
Le mouvement de rénovation qui caractérise le onzième siècle se fait
surtout sentir au milieu des populations chrétiennes, que l'approche
de l'an 1000 a remplies de terreur; dès qu'elles se croient épargnées
par la clémence du ciel, elles se hâtent de relever leurs églises, et
les cloîtres, longtemps profanés, redeviennent l'asile de la méditation
et de la piété. Lausus, qui avait accompagné saint Poppo dans son
voyage en Syrie, bâtit à son retour l'église de Saint-Jean de Gand,
depuis dédiée à saint Bavon. Déjà saint Gérard, abbé de Brogne,
avait réformé l'abbaye de Saint-Bertin et celle de Blandinium, où il
remplaça des moines qui n'écoutaient que la violence et la haine par
d'autres religieux, qui ranimèrent les études littéraires en copiant des
manuscrits qu'ils envoyaient au célèbre Gerbert, archevêque de
Reims: noble exemple que l'archevêque Dunstan de Canterbury,
alors exilé en Flandre, imita plus tard dans les monastères anglo-
saxons.
Tandis que la Flandre se relevait de ses ruines, les comtes de
Toulouse, de Blois et de Chartres voyaient leur influence s'accroître;
les Capétiens acceptaient la tutelle des ducs de Normandie, qui
soutenaient leur royauté pourvu qu'elle restât humble et faible.
Lorsqu'en 966 Hug Capet engage le roi Lother à envahir la Flandre,
le duc de Normandie intervient pour qu'il ne poursuive point sa
conquête. En 987, le duc de Normandie interpose de nouveau sa
médiation pour l'empêcher de combattre Arnulf le Jeune, qui,
comme descendant de Karl le Grand, refusait de reconnaître les
droits de son heureuse et récente usurpation.
Rotbert, successeur de Hug Capet, fut un prince pacifique et timide.
Il attendit et chercha à mériter par une patiente résignation qu'une
époque vînt où sa dynastie serait assez forte pour se suffire à elle-
même et secouer le joug. C'est ainsi qu'épousant tour à tour Berthe,
veuve d'Eudes de Blois, issue des comtes de Vermandois, et
Constance, fille des comtes de Toulouse et nièce des comtes
d'Anjou, il s'abaissa devant ses ennemis, rechercha leur alliance et
partagea avec eux l'autorité du gouvernement.
En France
...Dose pers... estoient
Qui la terre en douse partoient.
Chacun des douse un fié tenoit
Et roi appeler se faisoit.
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.
ebookname.com