没有合适的资源?快使用搜索试试~ 我知道了~
首页《整洁架构》:软件设计原则与成功策略
"《整洁架构:软件结构设计》是一本由知名软件开发专家Uncle Bob Martin撰写的专业书籍,它深入探讨了软件架构设计中的关键原则和实践。这本书不仅提供了一种清晰的视角,而且基于作者超过半个世纪的丰富经验,为软件架构师们提供了实际问题的解决方案,确保项目成功与否。 在本书中,马丁强调了软件架构师的主要目标——实现业务需求并遵循核心设计纪律和实践。他指导读者掌握处理功能、组件分离和数据管理的基本软件设计原理,这些都是构建高质量系统的基础。他还揭示了编程范式如何通过限制开发者的行为来强制实施规范,帮助设计师理解哪些是至关重要的,哪些是细节层面的考虑。 书中的内容涵盖了多种应用场景,如Web、数据库、厚客户端、控制台和嵌入式应用的高级结构设计。马丁着重于定义合理的边界和层次,以及如何组织组件和服务,使设计保持清晰和可维护。他还分析了常见的设计和架构问题,并提供了预防和修复这些问题的方法。 此外,书中还特别提到了EPUB电子书格式,虽然它是行业标准,但在不同的阅读设备和应用上支持程度各异。读者可以根据自己的喜好调整字体、字号、单双列阅读模式,甚至图像大小。对于代码和配置示例,书中推荐在单列、横屏模式下查看,并保持最小字体大小以优化呈现。如果可流动文本格式影响了代码列表的清晰度,读者可以通过点击链接查看与印刷版一致的图片。 《整洁架构:软件结构设计》是一本实用的指南,不仅提供了理论知识,还结合了实战经验和具体案例,帮助读者提升软件架构设计的能力,确保项目顺利进行并避免常见陷阱。无论是初学者还是经验丰富的架构师,这本书都是提升软件工程实践水平的重要参考资料。"
资源详情
资源推荐
of structures—but its variety eclipses the range of physical structure found in
buildings. You can even argue quite convincingly that there is more design activity
and focus in software than in building architecture—in this sense, it’s not
unreasonable to consider software architecture more architectural than building
architecture!
But physical scale is something humans understand and look for in the world.
Although appealing and visually obvious, the boxes on a PowerPoint diagram are not
a software system’s architecture. There’s no doubt they represent a particular view of
an architecture, but to mistake boxes for the big picture—for the architecture—is to
miss the big picture and the architecture: Software architecture doesn’t look like
anything. A particular visualization is a choice, not a given. It is a choice founded on
a further set of choices: what to include; what to exclude; what to emphasize by
shape or color; what to de-emphasize through uniformity or omission. There is
nothing natural or intrinsic about one view over another.
Although it might not make sense to talk about physics and physical scale in
software architecture, we do appreciate and care about certain physical constraints.
Processor speed and network bandwidth can deliver a harsh verdict on a system’s
performance. Memory and storage can limit the ambitions of any code base.
Software may be such stuff as dreams are made on, but it runs in the physical world.
This is the monstrosity in love, lady, that the will is infinite, and the execution confined;
that the desire is boundless, and the act a slave to limit.
—William Shakespeare
The physical world is where we and our companies and our economies live. This
gives us another calibration we can understand software architecture by, other less
physical forces and quantities through which we can talk and reason.
Architecture represents the significant design decisions that shape a system, where
significant is measured by cost of change.
—Grady Booch
Time, money, and effort give us a sense of scale to sort between the large and the
small, to distinguish the architectural stuff from the rest. This measure also tells us
how we can determine whether an architecture is good or not: Not only does a good
architecture meet the needs of its users, developers, and owners at a given point in
time, but it also meets them over time.
If you think good architecture is expensive, try bad architecture.
—Brian Foote and Joseph Yoder
The kinds of changes a system’s development typically experiences should not be
the changes that are costly, that are hard to make, that take managed projects of their
own rather than being folded into the daily and weekly flow of work.
That point leads us to a not-so-small physics-related problem: time travel. How do
we know what those typical changes will be so that we can shape those significant
decisions around them? How do we reduce future development effort and cost
without crystal balls and time machines?
Architecture is the decisions that you wish you could get right early in a project, but that
you are not necessarily more likely to get them right than any other.
—Ralph Johnson
Understanding the past is hard enough as it is; our grasp of the present is slippery at
best; predicting the future is nontrivial.
This is where the road forks many ways.
Down the darkest path comes the idea that strong and stable architecture comes from
authority and rigidity. If change is expensive, change is eliminated—its causes
subdued or headed off into a bureaucratic ditch. The architect’s mandate is total and
totalitarian, with the architecture becoming a dystopia for its developers and a
constant source of frustration for all.
Down another path comes a strong smell of speculative generality. A route filled
with hard-coded guesswork, countless parameters, tombs of dead code, and more
accidental complexity than you can shake a maintenance budget at.
The path we are most interested is the cleanest one. It recognizes the softness of
software and aims to preserve it as a first-class property of the system. It recognizes
that we operate with incomplete knowledge, but it also understands that, as humans,
operating with incomplete knowledge is something we do, something we’re good at.
It plays more to our strengths than to our weaknesses. We create things and we
discover things. We ask questions and we run experiments. A good architecture
comes from understanding it more as a journey than as a destination, more as an
ongoing process of enquiry than as a frozen artifact.
Architecture is a hypothesis, that needs to be proven by implementation and measurement.
—Tom Gilb
To walk this path requires care and attention, thought and observation, practice and
principle. This might at first sound slow, but it’s all in the way that you walk.
The only way to go fast, is to go well.
—Robert C. Martin
Enjoy the journey.
—Kevlin Henney
May 2017
PREFACE
The title of this book is Clean Architecture. That’s an audacious name. Some would
even call it arrogant. So why did I choose that title, and why did I write this book?
I wrote my very first line of code in 1964, at the age of 12. The year is now 2016, so
I have been writing code for more than half a century. In that time, I have learned a
few things about how to structure software systems—things that I believe others
would likely find valuable.
I learned these things by building many systems, both large and small. I have built
small embedded systems and large batch processing systems. I have built real-time
systems and web systems. I have built console apps, GUI apps, process control apps,
games, accounting systems, telecommunications systems, design tools, drawing
apps, and many, many others.
I have built single-threaded apps, multithreaded apps, apps with few heavy-weight
processes, apps with many light-weight processes, multiprocessor apps, database
apps, mathematical apps, computational geometry apps, and many, many others.
I’ve built a lot of apps. I’ve built a lot of systems. And from them all, and by taking
them all into consideration, I’ve learned something startling.
The architecture rules are the same!
This is startling because the systems that I have built have all been so radically
different. Why should such different systems all share similar rules of architecture?
My conclusion is that the rules of software architecture are independent of every
other variable.
This is even more startling when you consider the change that has taken place in
hardware over the same half-century. I started programming on machines the size of
kitchen refrigerators that had half-megahertz cycle times, 4K of core memory, 32K
of disk memory, and a 10 character per second teletype interface. I am writing this
preface on a bus while touring in South Africa. I am using a MacBook with four i7
cores running at 2.8 gigahertz each. It has 16 gigabytes of RAM, a terabyte of SSD,
and a 2880×1800 retina display capable of showing extremely high-definition video.
The difference in computational power is staggering. Any reasonable analysis will
show that this MacBook is at least 10
22
more powerful than those early computers
that I started using half a century ago.
Twenty-two orders of magnitude is a very large number. It is the number of
angstroms from Earth to Alpha-Centuri. It is the number of electrons in the change in
your pocket or purse. And yet that number—that number at least—is the
computational power increase that I have experienced in my own lifetime.
And with all that vast change in computational power, what has been the effect on
the software I write? It’s gotten bigger certainly. I used to think 2000 lines was a big
program. After all, it was a full box of cards that weighed 10 pounds. Now, however,
a program isn’t really big until it exceeds 100,000 lines.
The software has also gotten much more performant. We can do things today that we
could scarcely dream about in the 1960s. The Forbin Project, The Moon Is a Harsh
Mistress, and 2001: A Space Odyssey all tried to imagine our current future, but
missed the mark rather significantly. They all imagined huge machines that gained
sentience. What we have instead are impossibly small machines that are still … just
machines.{xx}
And there is one thing more about the software we have now, compared to the
software from back then: It’s made of the same stuff. It’s made of if statements,
assignment statements, and while loops.
Oh, you might object and say that we’ve got much better languages and superior
paradigms. After all, we program in Java, or C#, or Ruby, and we use object-oriented
design. True—and yet the code is still just an assemblage of sequence, selection, and
iteration, just as it was back in the 1960s and 1950s.
When you really look closely at the practice of programming computers, you realize
that very little has changed in 50 years. The languages have gotten a little better. The
tools have gotten fantastically better. But the basic building blocks of a computer
program have not changed.
剩余428页未读,继续阅读
dywane333
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JDK 17 Linux版本压缩包解压与安装指南
- C++/Qt飞行模拟器教员控制台系统源码发布
- TensorFlow深度学习实践:CNN在MNIST数据集上的应用
- 鸿蒙驱动HCIA资料整理-培训教材与开发者指南
- 凯撒Java版SaaS OA协同办公软件v2.0特性解析
- AutoCAD二次开发中文指南下载 - C#编程深入解析
- C语言冒泡排序算法实现详解
- Pointofix截屏:轻松实现高效截图体验
- Matlab实现SVM数据分类与预测教程
- 基于JSP+SQL的网站流量统计管理系统设计与实现
- C语言实现删除字符中重复项的方法与技巧
- e-sqlcipher.dll动态链接库的作用与应用
- 浙江工业大学自考网站开发与继续教育官网模板设计
- STM32 103C8T6 OLED 显示程序实现指南
- 高效压缩技术:删除重复字符压缩包
- JSP+SQL智能交通管理系统:违章处理与交通效率提升
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功