知识卡片

MailProxy案例:分层架构设计的优缺点

普通读书笔记卡

内容

运用[[分层架构的核心思想封装外部交互]]的原理,MailProxy邮件代发系统被设计成了一套分层架构,这套设计相比[[MailProxy案例粗粒度功能模块划分的优缺点]](第12章的功能模块划分方案)呈现出截然不同的优缺点组合。优点:层次结构清晰,技术关注点在一定程度上被分离;基于分层架构进行分工时,程序员会分属UI组、数据库组、集成组等,这种分工方式有利于团队成员的技能专业化提升——UI组的人可以持续深耕前端交互技术,数据库组的人可以持续深耕存储和查询优化,各自的技术积累不会因为频繁切换业务模块而被打断。缺点:没有划分出细粒度模块——分层架构解决的是”横向按技术关注点切分”的问题,但一层内部具体该怎么进一步细分模块,分层架构本身没有给出答案,好在书中也指出这个缺点相对容易弥补,后续在层内进行细粒度模块划分已经比较容易了,因为每一层内部的职责已经被限定在一个相对聚焦的技术关注点范围内。把这个结果和第12章的功能模块划分方案对照来看,两种粗粒度模块划分方式呈现出一种互补关系:功能模块划分擅长按业务紧密度纵向聚合、不容易遗漏功能,但缺乏模块间交互定义、容易导致重复代码;分层架构擅长按技术关注点横向切分、层次结构清晰、有利于团队分工的专业化,但缺乏细粒度模块划分。这正是第15章”模块划分的4步骤方法”要讲的核心问题:横切(分层)和竖割(功能模块)并不矛盾,两者应该综合运用,而不是二选一。

参考来源

- 位置:《软件架构设计:程序员向架构师转型必备》第13章《如何分层》"13.3.2 设计的优点、缺点"节(源文件:_epub-src/OEBPS/text00016.html) - 结论依据:原文列出"层次结构清晰,技术关注点在一定程度上被分离……基于分层架构进行分工,程序员将分属UI组、数据库组、集成组等,有利于技能的专业化提升"两条优点,以及"没有划分出细粒度模块"一条缺点,直接支撑本卡片结论。 - 原始内容:优点:层次结构清晰,技术关注点在一定程度上被分离。基于分层架构进行分工,程序员将分属UI组、数据库组、集成组等,有利于技能的专业化提升。缺点:没有划分出细粒度模块。