找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2824|回复: 12

C#框架结构分层:三层结构,DDD,MVC,MVVM,MVP

 火.. [复制链接]
  • 打卡等级:常驻代表
  • 打卡总天数:34
  • 打卡月天数:6
  • 打卡总奖励:9027
  • 最近打卡:2025-12-17 23:15:51

2823

主题

541

回帖

2万

积分

管理员

积分
22569
发表于 2021-5-7 20:18:48 | 显示全部楼层 |阅读模式
本文主题,讲解主要有哪些分层思想。
一、三层结构
作为早期程序开发的经典,这是一个完全由程序员自己控制的分层思想。
在我们自己所有的项目中,几乎是无处不在,无时无刻不在使用。
它的主要思想是分界面层(UI)、业务逻辑层(BLL)、数据访问层(DAL),不管去到哪里,这3个都少不掉的。之后的各种分层,大体都离不开三层结构的影子,或者受一些影响。
界面层(UI):指html界面那些。
业务逻辑层(BLL):指您的模型类和数据逻辑操作。
数据访问层(DAL):指您对数据库进行操作,一般指CRUD,即增删改查。
它在Visual Studio中的表现类似这样子:




UI层调用逻辑层BLL,再调用数据访问层DAL即可。
二、MVP
这是一个通常使用于android开发的时候的分层。划分为视图层(View)、模型层(Model)、中间层(Presenter)。
视图层(View):也就是界面层,它调用中间层(Presenter)。指手机界面。
模型层(Model):更具体的说是模型管理层,它调用中间层(Presenter)。指模型管理。
中间层(Presenter):从它的英文Presenter来看,是主持人的意思。也就是它会负责协调视图层和模型层之间的沟通,本层通常持有视图层的对象以及模型层的对象,可以对它们做协调操作。
它的本质是通过回调来完成通讯的。
二、MVC
这是一个较常用的分层思想,它主要用于网站建设。划分为模型(Model)、视图(View)、控制器(Controller)。
视图层(View):是指界面层,也就是html代码那部分。
模型层(Model):指对应于界面,给界面使用的Model实体类。
控制器(Controller):可以操作模型层的实体,它控制数据流向模型对象,并在数据变化时更新视图。它强制使视图与模型分离开。




在VisualStudio中,就有一个专门的MVC模型模板。下图是VS2019创建一个MVC模型应用程序的截图:





三、WebApi
它实现了前后端分离,是目前前端开发工程师和后端开发工程师共同合作的最好的协同方式,彼此之间尽量减少干扰。
它跟MVC是一样的,只不过视图层(View)放在了前端开发工程师的手上。而MVC的话,视图层还未分离,跟后端代码仍然是结合在一起的。
WebApi是目前主流的前后端程序员工作方式。
四、MVVM
这是作为C#程序员才有的独家秘诀,至少目前是,以后是不是就不知道了。
独家是因为,MVVM目前仅用于WPF和Xamarin开发。这2种都是微软产品,所以才说是C#程序员才有的独家秘诀。
它分为以下几个层:
视图层(View):就是界面层了,类似于html形式的,只不过在这里是用xaml语言来描述的。
模型层(Model):这个也很好理解,就是把界面上需要用到的属性参数啊什么的,构建成一个模型类即可,即建立一个Model类。这个Model类专门给这个视图界面使用的。
视图模型层(ViewModel):对于没有使用过WPF或者Xamarin的程序员来说,要理解这层可就头大了,因为它很难想明白。它的作用就是将Model类的对象,绑定到视图层View上。简单的说,就是负责绑定数据源,即给界面层的的控件的DataSource赋上值。
五、DDD
目前很火的后端开发模型。中文叫领域驱动设计(domain-driven design,简称DDD)。通常这个模型用于前后端分离的后端项目中。
我自己主要作为后端开发的角色,所以,我最常用的就是这个分层思想了:领域模型。
它主要分为:
界面层(Host或UI):当然就是前端界面啦。一般是分离的,可能有专门的前端进行维护。
应用层(Application):跟界面层打交道的服务层(Service),通常是以提供WebApi的方式跟界面层互动。
数据共享层(Share):本层一般不是必需的,但建议您拥有。主要是定义服务接口,用于多方使用。同时,本层也可以定义Dto对象,即数据交换类。什么是数据交换类?一般我们不建议数据库实体(Entity)直接显示给前端使用,而是经过转换成一个模型(Model)后,再把这个数据给前端看。比如数据库中的字段有身份证敏感信息,如果你一股脑就把Entity暴露给前端,问题就大了。所以要有一个数据交换,也就是Dto。
领域层(Domain):也就是我们三层结构中所说的业务逻辑层。是DDD的业务核心。负责连接应用层(Application)和数据仓储层(Database)。
数据访问层(Database):好理解,就是操作数据库了。
关于DDD领域模型,目前最好的例子,是ABP(AspNet Boilerplate )。关于Abp是个什么东西,你可以自行搜索一下。
来源:中洲少年
原文:https://www.toutiao.com/a6891179587556868619/

工控课堂 www.gkket.com

0

主题

266

回帖

1014

积分

中级会员

积分
1014
发表于 2021-5-7 20:18:49 | 显示全部楼层
楼主您的技术水准,我最服你,其他都是浮云
工控课堂 www.gkket.com

0

主题

114

回帖

327

积分

注册会员

积分
327
发表于 2021-5-8 16:04:57 | 显示全部楼层
无私奉献,好工控人,32个赞送给你!!
工控课堂 www.gkket.com

0

主题

87

回帖

129

积分

新手上路

积分
129
发表于 2025-11-14 16:46:47 | 显示全部楼层
赞同 + 10086,完全说出了我的想法!
工控课堂 www.gkket.com

0

主题

97

回帖

536

积分

中级会员

积分
536
发表于 2025-11-14 17:04:00 | 显示全部楼层
路过打卡,为优质内容疯狂打 call
工控课堂 www.gkket.com

0

主题

113

回帖

340

积分

注册会员

积分
340
发表于 2025-11-14 17:23:57 | 显示全部楼层
理性围观,感觉大家说的都有道理~
工控课堂 www.gkket.com

0

主题

1672

回帖

4321

积分

金牌会员

积分
4321
发表于 2025-11-14 18:39:16 | 显示全部楼层
赞同 + 10086,没毛病,完全没毛病
工控课堂 www.gkket.com

0

主题

53

回帖

68

积分

新手上路

积分
68
发表于 2025-11-14 21:03:16 | 显示全部楼层
水个经验,支持楼主,加油呀
工控课堂 www.gkket.com

0

主题

51

回帖

62

积分

新手上路

积分
62
QQ
发表于 2025-11-14 21:36:22 | 显示全部楼层
不请自来,只为说一句:太精彩了!
工控课堂 www.gkket.com

0

主题

582

回帖

2068

积分

高级会员

积分
2068
发表于 2025-11-15 00:35:26 | 显示全部楼层
笑不活了,评论区比正文还精彩
已转发给朋友,一起快乐一下
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 20:26 , Processed in 0.123599 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表