分层的意义

Mirricle 2007-08-08 06:43:03
加精
平时做具体的项目,除了结构性的东西以外
业务逻辑的大量代码其实都是不能抽象的
而是根据具体的业务,来决定方法的返回值和参数
如果一个业务改变,也很大程度上都会对这两项进行修改

大部分分层例子都是,逻辑层一个函数,数据层对应一个函数
数据层进行SQL语句和参数的组装,逻辑层基本上就是简单的调用数据层
顶多就是把几个数据层的方法组合

这样来说,如果一个业务改变,进而需要修改返回类型和参数的话
两层的代码都需要改,对于维护不是更方便了,而是更复杂了
如果只有一层,改一个地方就可以了

从这个角度来说,分层的意义是什么?

大家讨论下
...全文
4548 209 打赏 收藏 转发到动态 举报
写回复
用AI写文章
209 条回复
切换为时间正序
请发表友善的回复…
发表回复
warmersen 2012-05-13
  • 打赏
  • 举报
回复
便于维护以及功能扩展
Breezexiang 2009-11-10
  • 打赏
  • 举报
回复
206楼挖坟啊
xcf512 2009-11-09
  • 打赏
  • 举报
回复
学习了 不错
lizhimin0310 2009-11-09
  • 打赏
  • 举报
回复
mark
goubingge 2009-01-07
  • 打赏
  • 举报
回复

学习
燕飞7 2009-01-06
  • 打赏
  • 举报
回复
学习了...
talenliao 2009-01-05
  • 打赏
  • 举报
回复
高深莫测
技术未到家!
peng_weida 2009-01-02
  • 打赏
  • 举报
回复
09年的第一个回复!
学习了!
IMAGSE 2008-12-05
  • 打赏
  • 举报
回复
mark 一下,回头继续看~
Lonfone 2008-10-26
  • 打赏
  • 举报
回复
要弄清楚是物理层,还是逻辑层

逻辑层次 只是逻辑上的划分, 比如定义了一些DLL,分别负责不同层面的逻辑处理, 但都部署在同一台服务器上, 这些DLL在同一个进程空运行, 那么逻辑上是三层的 或更多层, 但只是一个物理层. 逻辑层次间有数据传递,但在同一个进程空间内运行,只是调用层次的消耗,没有进程间通信,更没有跨域(机器)调用和数据传递

物理层次 是部署上的划分, 逻辑层上的组件 分别部署在不同的服务器上, 或同一服务器上用不同的进程实现.不同物理层次间需要跨进程通信,甚至跨域(机器/网络)通信,除了调用层次的消耗,还括了跨进程处理的消耗,跨物理连边界抽消耗(序列化/反序列化,网络协议打包/解包,网络通信等)


讨论的时候很容易混了.

其实 逻辑层次的话 , 细分起来 可能还不止三层, 我通常定义 :

部署在物理分布的 界面层的 逻辑层次有:[/b] 界面(显示)层, 界面控制层(即界面的后台代码,这是与业务层联系的通道), 远程代理层(如果物理三层分布的话,界面控制层需要通过该层与远程服务器交互,如果不是物理三层,则没有该逻辑层)

部署在物理分布的 业务层的 逻辑层次有: 远程服务层(物理分布时才会有,用于向远程公布业务对象), 业务对象层(这一层是真正的业务逻辑处理层), 数据访问连接层(负责业务对象与数据访问的通道, 有时候把这一层定义为逻辑上的数据访问层)

部署在物理分布的 数据层的 逻辑层次: 数据访问层(有时把这一层划到业务层去了,这里就没有了), 关系数据库系统及其中的数据存储和SP/FUNCTION等


物理三层的架构 除了在于其逻辑分层 后的 组件相对独立性带来的 可维护性 , 并不如楼上某些同事说的 都是在降低性能.

如果一个应用不大的项目的, 只有几十号几百号用户,一台两台服务器就解决问题了, 那么物理三层/多层 只有性能的降低没啥好处, 如果一个系统达到成千上万的用户了, 有很多复杂应用, 那就不是一两台服务器能撑得住的了. 三层分布在于可以让多台服务器分担系统负载. 每个物理层次上又可以用多台服务进行交叉配置, 可以灵活的根据负载情况进行部署. 或分担.比如业务层用三台服务器,既可以每台都处理相同的业务逻辑,三台平衡负载,也可以每一台分别负责不同类型的业务逻辑,各司其职共同完成 业务层的服务.


只有少时用户/系统规模小的时候, 三层物理部署会体现的慢于 两层结构, 随着系统规模的增大, 三层部署的性能不会由于规模扩大急速降低,而是缓缓降低, 而两层部署的性能则可能急速下降.

采用哪一种更多在于项目本身的特性,而不是片面追求技术的结构. 逻辑层次 更多是系统设计和维护层面的, 对性能牺牲换来逻辑的清晰和可维护性.
wayuILY 2008-09-29
  • 打赏
  • 举报
回复
我也来挖了,精贴(2007-8-8 ---2008-9-29),学习哈。

对于分层也很迷茫, 对于把一行代码分成十行写 真的感觉很烦,可能就是上面说的做的项目还是很小,没能体会的到好处,

哎, 再把Petshop再深入看下。

感觉 gui0605 的话很实在!
panthiechen 2008-07-29
  • 打赏
  • 举报
回复
讨论的很精彩,受益匪浅啊
ylwqhr 2008-07-23
  • 打赏
  • 举报
回复
维护方便,重用性好
最简单的理解,你分开项目来做,就知道怎么回事了
hnczljt 2008-07-20
  • 打赏
  • 举报
回复
学习
zhnzzy 2008-07-17
  • 打赏
  • 举报
回复
挖坟了又
INCpig 2008-07-17
  • 打赏
  • 举报
回复
新手來學習的
nopole 2008-07-12
  • 打赏
  • 举报
回复
可以是代码易读 程序结构清晰 增强安全 代码重用方便
Blizzard_ 2008-07-12
  • 打赏
  • 举报
回复
还不够资格,不敢妄下评论,学习了
Blizzard_ 2008-07-12
  • 打赏
  • 举报
回复
还不够资格,不敢妄下评论,学习了
xiangshou 2008-07-12
  • 打赏
  • 举报
回复
迷糊 还是有点迷糊
加载更多回复(188)

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧