社区
研发管理
帖子详情
界面层 与 业务逻辑层 分离 独特的看法
liuzhong001
2008-08-22 11:20:56
如何将 界面层 与 复杂的业务逻辑层 分离开来呢?或者是 分离开到一个什么样的程度算是不耦合?
请大家谈谈你们的看法~!
界面层与业务逻辑层的分离:
...全文
1063
26
打赏
收藏
界面层 与 业务逻辑层 分离 独特的看法
如何将 界面层 与 复杂的业务逻辑层 分离开来呢?或者是 分离开到一个什么样的程度算是不耦合? 请大家谈谈你们的看法~! 界面层与业务逻辑层的分离:
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Alan_Pisces
2008-09-08
打赏
举报
回复
其实所有的低耦合,都是建立在良好的层次和结构划分的基础上的.
在这个基础上,降低耦合的方法主要就是借助第三方,比如接口,抽象多态等.
liuzhong001
2008-09-08
打赏
举报
回复
很好!
up
xb_feng
2008-09-05
打赏
举报
回复
谈一下我的观点:
首先,对你的问题,我觉得是两个问题搅在一起了,还是分开来讲比较好。
一个问题是软件分层和耦合的问题。
另一个问题是如何划分业务逻辑和界面的问题。
首先,软件设计为什么要分层,这是为了应对软件需求的变化来考虑的,软件需求总是在变的,但变化是有规律的,不易变化的需求叫稳定需求,而易变的需求叫不稳定的需求。
而软件设计分层就是为了在不同的层次上应对这些稳定性不同的需求,在上层设计中响应不稳定的需求,而在下层设计中实现稳定的需求,而在分层后的设计中使得上层依赖下层,而不允许下层依赖上层,则可以使得应对大部分需求变化时对系统的修改最少,这就是软件分层的原理和原则。
在一般的MIS系统中,通常数据库结构是最稳定的,轻易不会修改,扩充是有可能的(除非在设计数据库时对用户的业务分析有重大误解),所以通常数据层放在最下层;而业务逻辑也相对稳定但会有变化,所以放在中间层;而最易变的则是表现层,今天说字太小看不清,明天又说字太大看不全,这个说灰底色难看,那个说白底色晃眼。所以放在最上层。
关于耦合,这个词在结构化设计中用得很多,在面向对象中,通常讲依赖关系。上层对下层的依赖(或者说强耦合)是理所当然的。比如说,通常应用程序是上层,而操作系统是下层,你能说你编一个应用程序不对操作系统耦合吗?但下层对上层则绝对不能有依赖(或者说零耦合)。没听说过谁为了自己的应用程序能运行而要求微软修改操作系统的。
做到这样,你的系统就达到目的了,而完全没有必要为上层对下层的依赖(或者说强耦合)而耿耿于怀。
但下层对上层依赖则是一定要避免的,对这要极其重视。
当然你可能会觉得有时会无法避免,如MVC模式(在RUP中叫Entity-Control-Interface模式)中,实体变化后,不是要调用界面层来改变显示吗,这不就是下层依赖上层了吗?
是的,对于这样的逆向依赖,在你设计用例实现过程中没有必要考虑,在进行完初步的设计以后,再统一进行逆向依赖的反转。在面向对象设计中有几个反转这种依赖的手段,在下层定义事件(或消息)由上层来订阅是一种手段,在下层定义接口或抽象类,上层来实现该接口或继承这个抽象类也是一种手段。只要你做到不存在下层对上层的依赖,那么你的系统分层设计的目的就达到了。
关于如何划分业务逻辑和界面的问题。
我觉得这是一个对客户需求的理解和分解的问题,以及对应这些分解后的需求放在哪一层实现的问题,也就是业务逻辑层的职责和界面层的职责划分问题,业务逻辑层的职责应该严格限制在对业务原语的实现上,而界面层的职责则是控制数据的展现形式和将用户的操作翻译或映射到业务原语上。但客户提出的直接需求往往会将这两方面一并提出,并且其中的业务原语往往是隐含的和不明确的,则需要我们在理解用户需求的情况下去分解出哪些是业务原语,哪些是界面操作。
呵呵,太抽象了,举个例吧,简单点,我们常见的用户管理问题,客户说:用户密码都用“*”显示,用户改密码时,输入一遍老密码,输入两遍新密码,当老密码正确且两个新密码相同则修改成功。
显然在这个需求中,用*显示密码是界面层的职责,但业务原语是什么呢?是判断老密码正确且新密码相同吗?不对,业务原语只是用户可以改密码,于是业务逻辑层只要开放一个方法认证当前用户并更改密码就可以了,至于输入两遍并校对相同则是界面层的事。
总之对需求要分析,从中提取出真正的业务原语,当然有时这条界限是很模糊的,是否能正确的识别出业务原语,就看每个人的分析能力和经验了。
prettyboy923
2008-09-02
打赏
举报
回复
mark
学习
a123lm
2008-09-02
打赏
举报
回复
[Quote=引用 4 楼 Fusuli 的回复:]
要做到低耦合,复杂的业务逻辑层要做到提供简单的调用接口,你可以参照一下设计模式里的“外观模式”,不管业务逻辑层多复杂,只提供简单的外观模式,界面层只和这个外观打交道
[/Quote]
liuzhong001
2008-09-01
打赏
举报
回复
[Quote=引用 20 楼 wmxj2008 的回复:]
cool 学习了
[/Quote]
wmxj2008
2008-08-28
打赏
举报
回复
cool 学习了
sorryworld
2008-08-27
打赏
举报
回复
希望你看一下MVC开发模式。在里面的介绍会非常清楚。
我以前业务和界面分离的最基本方针就是,页面里面除了数据简单验证以外,没有任何代码。所有的业务处理代码都放到业务控制层。
以前我做程序的时候,采用的方式是3层结构方式,借鉴的是EJB的架构体系。
页面只做信息交互,不做任何业务处理。
Servlet或者构建业务Bean处理每张View(页面)提出的请求,然后调用EntityBean进行数据存储和查询。业务逻辑层并不负责数据库的交互,所有的数据交互都通过实体层进行处理。
实体层主要负责数据的添加修改删除查询功能,其他的业务单据逻辑处理它并不负责。对于数据库级的错误由此层捕获,然后传递到业务逻辑层,最后传递到View层。
如果你用Java开发系统建议采用Struts和Hibernate。(Spring也可以)
如果你用C#建议你用VS.net开发。
他们都提供了业务和展现分离的基本框架。
liuzhong001
2008-08-26
打赏
举报
回复
[Quote=引用 15 楼 outh24 的回复:]
note,学习了。
[/Quote]
jdlsfl
2008-08-26
打赏
举报
回复
举例比较难,要在实际的项目中体会实践
tobylee999
2008-08-26
打赏
举报
回复
支持举例说明,不要搞空谈。
liuzhong001
2008-08-25
打赏
举报
回复
en ,太好了!
outh24
2008-08-25
打赏
举报
回复
note,学习了。
liuzhong001
2008-08-24
打赏
举报
回复
up,
go on!
csgdseed
2008-08-24
打赏
举报
回复
[Quote=引用 7 楼 elifefly 的回复:]
单纯泛泛而谈是不当的。
没有绝对的分层和完美的耦合的。
都是根据需求和实际。
[/Quote]
caimps
2008-08-24
打赏
举报
回复
[Quote=引用 3 楼 Fusuli 的回复:]
我们一直强调的是“低耦合”,不是“不耦合”,不耦合肯定没办法运行啊
[/Quote]
w102272
2008-08-24
打赏
举报
回复
数据库+应用服务器+C/S Client(实际上应该是Internet Client)
数据库+应用服务器+B/S WebServer(ASP or .NET or JSP...) + IE
w102272
2008-08-24
打赏
举报
回复
我的做法是:
开发应用服务器,将业务逻辑全部放到中间件上去。将数据库放在中间件的后面。
然后对业务逻辑抽象出一组公用业务对象API,
可以透过TCP,SOAP方式去调用。以便支持前端的 C/S客户端,或者WebServer的网页程序(通过SOAP调用WebService方式)。
然后把界面(C/S的Form界面,或者B/S的网页界面),作一个UI部分的整体。
实际上这里肯定包含部分预处理,尤其是C/S界面;B/S我认为只是手段比较烂(JS什么的),只方便做发布类的事情
前台的C/S或B/S界面,就不区分UI和UI界面内的逻辑了(有时候也很难区分)。
这样大概构成了3层。实际结构如下:
-------------------------------------------------------
数据库+应用服务器+C/S Client(实际上应该是Internet Client)
+B/S WebServer + IE
-------------------------------------------------------
DB 逻辑核心 UI和弱关联的逻辑
sword_88
2008-08-23
打赏
举报
回复
[Quote=引用 3 楼 Fusuli 的回复:]
我们一直强调的是“低耦合”,不是“不耦合”,不耦合肯定没办法运行啊
[/Quote]
pass by!
elifefly
2008-08-23
打赏
举报
回复
单纯泛泛而谈是不当的。
没有绝对的分层和完美的耦合的。
都是根据需求和实际。
加载更多回复(6)
reactant:用于构建React应用程序的框架
Reactant-受启发而构建React应用程序的框架。 动机 React是一个用于构建用户
界面
JavaScript库,但是当我们要基于React开发应用程序时,我们经常不得不做很多构建配置和许多其他库选择(选择和学习React状态库和路由器库等)。 )。 我们还需要考虑如何抽象和构建
业务逻辑
。 每个使用React的人都对React的构建方式有自己的
看法
,但是它不允许我们快速专注于
业务逻辑
本身。 随着应用程序业务规模的增长,我们迫切需要一个易于理解和维护的框架。 对于应用程序
业务逻辑
的结构化设计,关注点
分离
是个好主意。 当UI逻辑和
业务逻辑
混合在一起时,它需要明确的责任范围,以避免低的可维护
影音娱乐北雨影音系统 v1.0.1-bymov101.rar
北雨影音系统 v1.0.1_bymov101.rar 是一个用于影音娱乐的 Java 源码文件包,适用于毕业设计或课程设计。该系统采用 JSP 技术实现,为用户提供了丰富的功能和良好的用户体验。在这个版本中,开发者对系统进行了优化和改进,使其更加稳定、高效。北雨影音系统的主要功能包括:用户注册与登录、视频上传与管理、视频播放与分享、评论与点赞等。用户可以通过注册账号登录系统,在个人中心管理自己的信息和上传的视频。同时,系统提供了丰富的视频分类和搜索功能,方便用户快速找到感兴趣的内容。在视频播放方面,北雨影音系统支持多种格式的视频文件,并提供了流畅的播放体验。用户还可以将喜欢的视频分享给好友,增加互动性。此外,系统还设有评论区,用户可以发表自己的观点和
看法
,与其他用户进行交流。从技术
层
面来看,北雨影音系统采用了 MVC 架构,将
业务逻辑
、数据访问和
界面
展示
分离
,降低了系统的耦合度,提高了可维护性。同时,系统还采用了缓存技术和数据库优化策略,提高了系统的响应速度和性能。总之,北雨影音系统 v1.0.1_bymov101.rar 是一个功能完善、易于使用的 Java 源码文件包,适合作为毕业
Flutter 状态管理 |
业务逻辑
与构建逻辑
分离
theme: cyanosis 携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 7 天,点击查看活动详情 目前我的状态管理相关文章有: 《Flutter 状态管理 | 第一论 - 对状态管理的
看法
与理解》 《Flutter 桌面探索 | 自定义可拖拽导航栏》 《Flutter 状态管理 | 第二论 -
业务逻辑
与
界面
构建
分离
》 本文秒表的
界面
基...
细说
业务逻辑
(一)
目录 1、我把
业务逻辑
丢了!——找回丢失的
业务逻辑
2、细说
业务逻辑
2.1、
业务逻辑
到底是什么 1、我把
业务逻辑
丢了!——找回丢失的
业务逻辑
相信朋友们基本都是软件开发人员。不论身处什么职位,我们的工作都有一个共同的目标——制作软件产品。而所谓的软件产品,一定是在某个领域内去实现某些业务。如此看来,“
业务逻辑
”本应和“软件产品”是紧紧绑在一起的,没有
业务逻辑
,何来软件产品? 但是,我发现一个奇怪的现象,一说
业务逻辑
,很多人就无法形成清晰地印象。例如,经典的三
层
...
java web 中持久
层
、业务
层
、表现
层
、域模型
层
理解
许多设计良好的web应用,可以被按职责分为四
层
。这些
层
次是表现
层
、持久
层
、业务
层
、和域模型
层
。每一个
层
次都有其
独特
的职责,不能把各自的功能与其它
层
次相混合。每一个应用
层
都应该和其它
层
隔离开来,但允许使用接口在
层
间进行通信。我们开始来看看每个
层
,并讨论一下它们各自都应该提供什么和不应该提供什么。 对表现
层
,我们使用 Struts ;业务
层
使用 Spring ;对于持久
层
我们使用的是 Hib
研发管理
1,265
社区成员
28,324
社区内容
发帖
与我相关
我的任务
研发管理
软件工程/管理 管理版
复制链接
扫一扫
分享
社区描述
软件工程/管理 管理版
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章