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

【软件工程】可执行文件和数据分离

一、概述

可执行文件和数据分离是一种软件设计策略,旨在将程序代码和程序使用的数据分离存储。这种方法通常用于提高软件的模块化程度和灵活性,以及方便软件的管理和维护。

在可执行文件和数据分离中,程序代码通常以可执行文件的形式存储,而程序所需的数据则以外部文件或其他形式存储。这样做的好处是可以降低程序的复杂性和耦合度,提高软件的可维护性和可扩展性。

在模块化设计中,代码(可执行文件)和数据通常被看作是不同的模块,这允许它们独立开发、更换、更新和维护。在分层架构中,软件被划分为不同的层,每层负责处理不同类型的任务。例如,数据可以存储在数据层,而业务逻辑会被放在另一层,界面逻辑则会在另外一层。这样,可执行文件通常关联于业务逻辑层和/或表示层,而数据则主要位于数据层。

例如,在游戏开发中,游戏的核心逻辑可能被封装在一个可执行文件中,而游戏的各种资源,如图像、声音、配置文件等则被存储在独立的文件中。这样,游戏开发人员可以通过修改这些独立文件来改变游戏的具体表现,而无需重新编译整个程序。这极大地提高了游戏开发和更新的效率。

需要注意的是,虽然可执行文件和数据分离可以提高软件的灵活性和可维护性,但它也可能带来一些问题。例如,如果数据文件被错误地修改或删除,可能会导致程序无法正常运行。因此,在使用这种策略时,需要采取适当的措施来保护和管理数据文件。

二、优缺点

 优点

1. 易于维护和更新:
   - 更新应用代码时,通常不需要对数据进行修改。
   - 独立地处理安全补丁和程序升级。

2. 数据备份和恢复:
   - 可以更容易地单独备份和恢复用户数据。
   - 在数据损坏或丢失的情况下,不需重装整个应用程序。

3. 安全性:
   - 对数据和应用程序设置不同的安全权限,以最大限度地减少安全风险。
   - 应用程序在需要时才访问数据,减少被恶意软件利用的风险。

4. 灵活性和兼容性:
   - 数据可以在不同的应用程序之间共享或迁移,这增加了兼容性。
   - 同一数据集可以被多个版本的应用程序或不同的应用程序使用。

5. 隔离性:
   - 应用程序崩溃或遇到问题时,数据往往保持不变,从而减少数据丢失的风险。
   - 便于实施故障隔离和灾难恢复计划。

6. 性能调优:
   - 可以针对应用程序和数据的存储分别进行性能优化。

缺点

1. 复杂性:
   - 分开管理代码和数据可能会导致系统架构更加复杂。
   - 需要额外的工具和协议来管理和同步数据。

2. 性能开销:
   - 如果应用程序和数据分布在不同的服务器或位置,可能会引入网络延迟等性能问题。
   - 数据访问可能需要通过API或服务层,这可能比直接访问文件系统要慢。

3. 一致性问题:
   - 在分布式系统中,保证数据的一致性可能是一个挑战。
   - 数据的同步和更新需要谨慎处理,以避免数据不同步的问题。

4. 依赖性管理:
   - 应用程序可能依赖于特定格式或结构的数据模型,当数据模型变化时,需要同时更新应用程序。

三、遵循可执行文件和数据分离策略的设计模式

 MVC (Model-View-Controller)

这是一个将应用程序分为三个核心部分的模式:模型(Model)、视图(View)和控制器(Controller)。模型负责数据和业务逻辑,视图负责展示层,而控制器连接视图和模型。MVC模式通过这种分离加强了数据和展示层(以及可执行代码)的独立性。

 MVVM (Model-View-ViewModel)

MVVM是一种类似于MVC的模式,通常应用于桌面和移动应用程序的开发中。它把应用程序分为三个部分:模型(Model)、视图(View)和视图模型(ViewModel)。模型代表数据和业务规则,视图是用户界面,而视图模型是一个特殊的控制器,作为视图与模型之间的粘合剂。

三层架构

三层架构模式是应用程序开发中非常流行的模式,它将应用程序分为:表示层、业务逻辑层和数据访问层。表示层对应用户界面逻辑,业务逻辑层管理应用程序的功能逻辑,而数据访问层负责数据存储和检索。这种分层确保了数据的独立存储和管理。

服务导向架构 (SOA)

SOA不是一个特定的设计模式,而是一种设计原则,它提倡将应用程序分解为独立的服务,每个服务都执行特定的任务并通过网络通信。在SOA中,数据通常被独立服务管理,与执行普通业务逻辑的服务分离。

RESTful架构风格

RESTful API设计强调资源(数据或服务)的状态通过客户端和服务端之间的无状态传输进行管理。使用RESTful风格开发的服务通常会将业务逻辑代码(可执行文件)与数据存储分离,通过HTTP方法(如GET, POST, PUT, DELETE)与资源进行交互。

CQRS (Command Query Responsibility Segregation)

CQRS 可以看作是一种架构模式,它区分了修改状态的命令(Command)和获取状态的查询(Query)。这样可以将数据更新和数据读取的责任分离,常常意味着有不同的模型用于更新与查询。

Repository模式

Repository模式通常被用于隔离领域层和数据映射层,为领域实体提供了一种集合接口以访问数据源。这个模式的实现可以细粒度地控制对象的存储和检索,从而使应用程序的其余部分与数据访问逻辑分离。

相关文章:

【软件工程】可执行文件和数据分离

一、概述 可执行文件和数据分离是一种软件设计策略,旨在将程序代码和程序使用的数据分离存储。这种方法通常用于提高软件的模块化程度和灵活性,以及方便软件的管理和维护。 在可执行文件和数据分离中,程序代码通常以可执行文件的形式存储&a…...

Linux dirs命令

Linux dirs命令用于显示目录记录。 显示目录堆叠中的记录。 语法 dirs [/-n -l]参数: n 显示从左边算起第n笔的目录。-n 显示从右边算起第n笔的目录。-l 显示目录完整的记录。 实例 列出"/home/cc/Ruijie"里所有内容的详细信息。可用如下命令。 dir…...

有什么好用的C/C++源代码混淆工具?

​ 有什么好用的C/C源代码混淆工具? 开始使用ipaguard 前言 iOS加固保护是直接针对ios ipa二进制文件的保护技术,可以对iOS APP中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对APP进行完整性保护,防止应用…...

iOS设备信息详解

文章目录 ID 体系iOS设备信息详解IDFA介绍特点IDFA新政前世今生获取方式 IDFV介绍获取方式 UUID介绍特点获取方式 UDID介绍获取方式 OpenUDID介绍 Bundle ID介绍分类其他 IP地址介绍获取方式 MAC地址介绍获取方式正常获取MAC地址获取对应Wi-Fi的MAC地址 系统版本获取方式 设备型…...

如何使用支付宝沙箱环境支付并公网调用sdk创建支付单服务

文章目录 1.测试环境2.本地配置2. 内网穿透2.1 下载安装cpolar内网穿透2.2 创建隧道3. 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名5. 使用固定二级子域名进行访问 1.测试环境 MavenSpring bootJdk 1.8 2.本地配置 获取支付宝支付Java SDK,…...

[EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 Dell Latitude-7400 处理器Intel Core i7-8665U已驱动内存16GB DDR4 RAM已驱动硬盘Toshiba KIOXIA 512GB SSD已驱动显卡Intel UHD 620 Graphics已驱动声卡Realtek ALC256已驱动有线网卡 无 无无线网卡蓝牙Intel Wireless-AC 9560已驱动 支持系统版本 maco…...

用芯片SIC8833可开发电子秤方案

SIC8833作为一款高性能的电子秤方案芯片,这款芯片是一个带24bitADC的8位RISC MCU,内置8k16位OTP程序存储器。具体24位双向I/O口的特性,广泛应用于电子衡器和精密测量及控制系统,能满足用户的不同需求和应用场景。 以下是电子秤方案…...

【Qt-QFile-QDir】

Qt编程指南 ■ Stream■ QTextStream■ QDataStream ■ QDial■ QDir■ QFile■■ ■ Stream ■ QTextStream /* 获取文件的路径 */ QString fileName QFileDialog::getOpenFileName(this);/* 指向文件 */ file.setFileName(fileName);/* 判断文件是否存在 */ if (!file.exi…...

设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点

系列文章目录 设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用…...

Android 13 - Media框架(25)- OMXNodeInstance(二)

上一节我们了解了 OMXNodeInstance 的创建过程,以及 IOmx 服务和 OMXNodeInstance、OMX组件之间的联系。接下来我们将一起了解 ACodec 是如何通过 OMXNodeInstance 这个中间层进行端口定义设置,以及端口Buffer分配的。 OMXNodeInstance 的代码还是比较长…...

生物系统学中的进化树构建和分析R工具包V.PhyloMaker2的介绍和详细使用

V.PhyloMaker2是一个R语言的工具包,专门用于构建和分析生物系统学中的进化树(也称为系统发育树或phylogenetic tree)。以下是对V.PhyloMaker2的一些基本介绍和使用说明: 论文介绍:V.PhyloMaker2: An updated and enla…...

XStream 反序列化漏洞 CVE-2021-39144 已亲自复现

XStream 反序列化漏洞 CVE-2021-39144 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建 修复建议总结 漏洞名称 漏洞描述 在Unmarshalling Time处包含用于重新创建前一对象的类型信息。XStream基于这些类型的信息创建新实例。攻击者可以控制输入流并替换或注入对象&am…...

深入剖析LinkedList:揭秘底层原理

文章目录 一、 概述LinkedList1.1 LinkedList简介1.2 LinkedList的优点和缺点 二、 LinkedList数据结构分析2.1 Node节点结构体解析2.2 LinkedList实现了双向链表的原因2.3 LinkedList如何实现了链表的基本操作(增删改查)2.4 LinkedList的遍历方式 三、 …...

计算机网络复习-OSI TCP/IP 物理层

我膨胀了,挂我啊~ 作者简介: 每年都吐槽吉师网安奇怪的课程安排、全校正经学网络安全不超20人情景以及割韭菜企业合作的FW,今年是第一年。。 TCP/IP模型 先做两道题: TCP/IP协议模型由高层到低层分为哪几层: 这题…...

虚拟机服务器中了lockbit2.0/3.0勒索病毒怎么处理,数据恢复应对步骤

网络技术的不断发展也为网络威胁带来了安全隐患,近期,对于许多大型企业来说,许多企业的虚拟机服务器系统遭到了lockbit2.0/3.0勒索病毒攻击,导致企业所有计算机系统瘫痪,无法正常工作,严重影响了企业的正常…...

【MATLAB】 RGB和YCbCr互转

前言 在视频、图像处理领域经常会遇到不同色域图像的转换,比如RGB、YUV、YCbCr色域间的转换,这里提供一组转换公式,供大家参考。 色彩模型 RGB RGB色彩模型是一种用于表示数字图像的颜色空间,其中"RGB"代表红色&…...

【线性代数】决定张成空间的最少向量线性无关吗?

答1: 是的,张成空间的最少向量是线性无关的。 在数学中,张成空间(span space)是一个向量空间,它由一组向量通过线性组合(即每个向量乘以一个标量)生成。如果这组向量是线性无关的&…...

暴力破解(Pikachu)

基于表单的暴力破解 先随便输入一下,然后抓包,进行字典爆破 验证码绕过(on server) server服务端要输入正确的验证码后进行爆破 之后的操作没什么不一样 验证码绕过(on client) 这个也需要输入验证码,但是后面进行字典爆破的时候&#xf…...

如何使用CMake查看opencv封装好的函数

当我们有时想查看opencv自带的函数的源代码,比如函数cvCreateImage, 此时我们选中cvCreateImage, 点击鼠标右键->转到定义,我们会很惊讶的发现为什么只看到了cvCreateImage的一个简单声明,而没有源代码呢?这是因为openCV将很多…...

微盛·企微管家:用户运营API集成,电商无代码解决方案

连接电商平台的新纪元:微盛企微管家 随着电子商务的蓬勃发展,电商平台的高效运营已经成为企业成功的关键。在这个新纪元里,微盛企微管家以其创新的无代码开发连接方案,成为企业之间连接电商平台的强大工具。它允许企业轻松集成电…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

LLMs 系列实操科普(1)

写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

c# 局部函数 定义、功能与示例

C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...