初识三层

      首先,我们这里所说的三层架构是指逻辑上的划分,并不是物理上的划分方式。区分层次的目的即为了“高内聚,低耦合”的思想。使用三层架构,必然有很多的好处和优点,但并不是所有的都必须用三层。对于比较业务逻辑简单,没有真正的数据存储的项目系统,就不需要用三层了。

      三层具体是指表现层,也叫显示层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。下面分别介绍一下这三层:

1、表现层UI

表现层是呈现给用户的,因此其设计与构想要符合用户的偏好和风格。“用户至上,兼顾简洁”是一个不变的原则。

回想我们做VB小例子的时候,Form1就是最终运行的时候呈现出来的界面,我们可以通过它来输入密码登录,也可以通过它获取信息。UI的作用跟它差不多作用无非就是输入和输出,即向用户展现特定业务数据,采集用户的输入信息和操作。

表现层只负责这两个大的功能,而对于显示的数据是怎么来的、又是如何工作的,它都不用考虑。


2、业务逻辑层BLL

      很多人把业务逻辑层看作是三层的核心,这也说明了它在体系架构中的关键位置,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。

 它的作用也可大概分为两个:一是从数据访问层DAL获取数据,供UI显示;一是对从UI得到用户的指令和数据,进行业务逻辑处理,然后写入DAL数据源。比如,用户输入用户名和密码进行登录,BLL层就负责对其进行业务逻辑处理,然后DAL层查看是否存在该用户。


3、数据访问层DAL

  数据访问层主要是与数据源打交道,负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。具体包括:从数据源加载数据,向数据源写入数据,从数据源删除数据。
简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。



 通过对三层概念的了解,我们对它们各层的联系就会有一个大致的了解。总结一下如下:
 UI只负责显示和采集用户操作,不包含任何业务相关的逻辑处理。
 BLL负责处理业务逻辑。通过获取UI传来的操作指令,决定执行业务逻辑,在需要访问数据源的时候直接交给DAL处理。处理完成后,返回必要数据给UI。
 DAL提供基本的数据访问,不包含任何业务相关的逻辑处理。

 它们分别处在不同的程序集中,但各个层之间存在一定的引用关系。引用是什么意思呢?引用是项目之间的一个桥梁和通道,借助于引用,我们可以使得各层之间有了联系。但是引用也有禁忌,不能循环引用。比如A引用B,那么B就不可以引用A。
UI直接引用BLL,可能会间接引用DAL。
BLL引用DAL。
DAL不引用UI和BLL。
各层为什么要引用为什么不引用是和它们的功能和作用直接相关的。在这里就不赘述了。

除了这些引用关系,还有一个重要的角色没有出场,那就是Model数据模型。数据模型的作用是封装数据,在三层之间传输数据。它并不知道各个层次,是独立于各个层次的。因此它不会引用各层,但其他层需要引用它。

说到三层,大家经常把三层与MVC放在一起比较。虽然他们都是在分层,都是在解耦。但其实他们根本不是一个概念。 三层架构将整个项目划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。 而 MVC分为 Model(模型),View(视图),Controller(控制)。它的目的是职责划分。
三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目。MVC是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目。
我们一般是在考虑使用了三层架构的基础上再根据具体需求决定是否需要使用MVC,所以MVC中总是伴随着三层架构,所以大家总是会认为MVC就是三层架构,三层架构就是MVC,殊不知,它们二者是一起出现的。



python+opencv简谱识别音频生成系统源码含GUI界面+详细运行教程+数据 一、项目简介 提取简谱中的音乐信息,依据识别到的信息生成midi文件。 Extract music information from musical scores and generate a midi file according to it. 二、项目运行环境 python=3.11.1 第三方库依赖 opencv-python=4.7.0.68 numpy=1.24.1 可以使用命令 pip install -r requirements.txt 来安装所需的第三方库。 三、项目运行步骤 3.1 命令行运行 运行main.py。 输入简谱路径:支持图片或文件夹,相对路径或绝对路径都可以。 输入简谱主音:它通常在第一页的左上角“1=”之后。 输入简谱速度:即每分钟拍数,同在左上角。 选择是否输出程序中间提示信息:请输入Y或N(不区分大小写,下同)。 选择匹配精度:请输入L或M或H,对应低/中/高精度,一般而言输入L即可。 选择使用的线程数:一般与CPU核数相同即可。虽然python的线程不是真正的多线程,但仍能起到加速作用。 估算字符上下间距:这与简谱中符号的密集程度有关,一般来说纵向符号越稀疏,这个值需要设置得越大,范围通常在1.0-2.5。 二值化算法:使用全局阈值则跳过该选项即可,或者也可输入OTSU、采用大津二值化算法。 设置全局阈值:如果上面选择全局阈值则需要手动设置全局阈值,对于.\test.txt中所提样例,使用全局阈值并在后面设置为160即可。 手动调整中间结果:若输入Y/y,则在识别简谱后会暂停代码,并生成一份txt文件,在其中展示识别结果,此时用户可以通过修改这份txt文件来更正识别结果。 如果选择文件夹的话,还可以选择所选文件夹中不需要识别的文件以排除干扰
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值