当前位置: 首页 > news >正文

C#三层架构

一个好的框架,方便维护和管理。比如一个仓库,你东西全部堆一起。找都不好找,更别说维护了。

程序和仓库原理是一样的。

主要分三层:

UI
BLL
DAL

 UI:就是ui 画面 (比如公司老板)

BLL:业务 (4S店的接待员,企业的管理层)

DAL:对象服务类(公司的电工,员工,修车师傅等)

举个例子:你汽车保养,你就相当于ui,接待员就是BLL,修车师傅就是DAL

这个过程中,你的角色是下达命令,BLL是能够提供的服务,DAL是针对性的处理

ui你 new出BLL对象,调用BLL她的方法。
BLL内,new出DAL的对象,调用DAL对象的方法。
DAL内 new出 Models参数对象,处理完后,把参数对象,返回给上级

ui和BLL都不知道 数据的来源(数据隔离)

Models的作用:当你调用方法时,会传递参数,参数1个2个还行,要是几十个参数就会有问题,不光参数顺序会写错,类型可能也会写错,还会漏写参数。每次调用方法都填写那么多参数,很不方便。所以Models就体现她的作用了。把所有参数封装成对象来传递。这样,参数栏里,只要写一个对象类型就行了。方法内部再详细写:读取该参数对象的值。(高内聚低耦合)这样就不会再错写漏写参数了。

当你理解 Models 的作用,就知道该怎么使用了。Models就像饭店的菜单一样。在UI和BLL跟DAL之间传递。

这样 Models 这个类 写在独立的命名空间下。UI,BLL,DAL都引用这个命名空间。就可以new出参数对象来传递。

ui内部

BLL  bll = new BLL();
Models  models = new Models();

//修改 models的值。。。。

//最后  
Models  结果 = bll.某个方法( models );

在BLL 内部也是如此 new 出DAL,再把 models的参数传给 dal.某个方法( models );

注意: ui 内不应该 出现 new DAL();

就像 老板不可能去指派员工今天干什么工作。只会指派管理层,管理层再指派员工今天做什么工作。(如果什么事都由老板去做,那么,哪天换老板了,那BLL和DAL的事都要重新再写一边,这个工作量是非常大的,而且,上层一改,中层和下层全部都要改,会代码地震。代码的房子大厦都震塌了,你还准备用残砖剩瓦拼个大厦出来?这样的房子你敢住?)

代码分层后,哪层需要修改,只需要替换那一层就行。其他层都不需要修改便于维护和管理。这就是项目分层带来的优势。

相关文章:

  • 动态内存开辟(上)
  • 【云原生】阿里云容器镜像服务产品ACR EE之国内外场景应用模拟
  • html之网页结构
  • 手把手教你使用LabVIEW人工智能视觉工具包快速实现传统Opencv算子的调用(含源码)
  • Python小知识点
  • 目标检测 YOLOv5 - 最新版本v6.2模型在瑞芯微 Rockchip设备上运行的方案
  • Android 项目必备(三十)-->从 0 到 1 开发一个属于自己的 App
  • led灯珠型号及使用参数
  • MYSQL介绍——数据库的增删改及常用函数
  • 线性单功能PEG试剂甲氧基-聚乙二醇-丙烯酰胺,mPEG-Acrylamide,mPEG-ACA
  • 洛谷P3694
  • b站pink老师Echarts数据可视化笔记
  • 计算机三级数据库运行维护与优化(四)、合理使用索引、数据库存储结构和存取方法优化、完全规范化、索引的使用原则、、网络优化、监控内容、物化视图
  • HDMI/DVI____串行发送器
  • 深度操作系统 15.2——怀揣梦想,笃定前行
  • [译] React v16.8: 含有Hooks的版本
  • Git初体验
  • java8-模拟hadoop
  • JDK 6和JDK 7中的substring()方法
  • Puppeteer:浏览器控制器
  • Rancher如何对接Ceph-RBD块存储
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 协程
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • # Java NIO(一)FileChannel
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • $.each()与$(selector).each()
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)VC++中ondraw在什么时候调用的
  • ***通过什么方式***网吧
  • **PHP分步表单提交思路(分页表单提交)
  • .form文件_SSM框架文件上传篇
  • .net core控制台应用程序初识
  • .net 使用ajax控件后如何调用前端脚本
  • .net 受管制代码
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .netcore 获取appsettings
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [codevs 1296] 营业额统计
  • [CTF]2022美团CTF WEB WP
  • [Django ]Django 的数据库操作
  • [hdu 1711] Number Sequence [kmp]
  • [Interview]Java 面试宝典系列之 Java 多线程
  • [iOS]把16进制(#871f78)颜色转换UIColor
  • [JavaEE]线程的状态与安全