开发中众多框架的个人理解,Unity设计模式,MVC,MVVM框架

devtools/2024/10/18 13:39:59/

前往个人博客,获取更好的阅读体验

开发中众多框架的个人理解

首先,无论使用什么框架,使用什么设计模式,本质都是为了分离逻辑,方便扩展,多人协同。换句话说,就是让代码质量更高;
所以并不需要具体掌握某个框架,只需要掌握某种框架的思想。大家写项目的时候多想想,写多了,就理解了。

1. ECS(Entity-Component-System)

1.1 定义

ECS是一种架构模式,强调将数据和逻辑分离,以便于高效地管理游戏中的大量实体。它由三部分组成:

  • Entity(实体):游戏对象的唯一标识符,通常是一个空的容器,不包含任何数据或逻辑。
  • Component(组件):存储数据的结构,描述实体的属性,例如位置、速度、健康值等。组件本身不包含逻辑。
  • System(系统):处理特定逻辑的代码,通常会操作具有相同组件的实体。例如,物理系统可能会处理所有具有“位置”和“速度”组件的实体。

就像对多个组件进行不同的组合,来创建不同的物体。然后通过系统来处理组件,进而处理物体。

1.2 特点

  • 高性能:通过数据导向设计优化内存访问和CPU缓存。通过系统并行处理实体,提高了性能。
  • 灵活性:可以自由组合和重用组件,增强了可扩展性。
  • 解耦:逻辑与数据分离,降低了各部分之间的耦合度。

1.3 优缺点

  • 优点
    • 高效处理大量实体。
    • 易于添加新功能(只需添加新组件和系统)。
  • 缺点
    • 学习曲线较陡。
    • 可能导致设计复杂性增加。

1.4 示例

// Entity
public class Entity
{public int Id; // 唯一标识符
}// Component
public class PositionComponent
{public float x;public float y;
}public class VelocityComponent
{public float vx;public float vy;
}// System
public class MovementSystem
{public void Update(List<Entity> entities){foreach (var entity in entities){var position = GetComponent<PositionComponent>(entity);var velocity = GetComponent<VelocityComponent>(entity);position.x += velocity.vx * Time.deltaTime;position.y += velocity.vy * Time.deltaTime;}}
}

2. MVC(Model-View-Controller)

2.1 定义

MVC是一种经典的软件设计模式,旨在分离应用程序的逻辑、用户界面和数据模型。其组成部分如下:

  • Model:代表数据和业务逻辑,负责数据的存储、检索和处理。
  • View:负责用户界面的显示,接收用户的输入。
  • Controller:处理用户输入,更新Model和View。

简单的说,就是通过Controller来控制Model和View的交互。例如,用户输入数据,Controller将数据传递给Model,Model处理数据后,Controller再将结果传递给View显示。

2.2 特点

  • 分离关注点:每个部分有独立的责任,降低耦合度。
  • 易于测试:逻辑分离后,更容易进行单元测试。

2.3 优缺点

  • 优点
    • 便于维护和扩展。
    • 清晰的结构,易于理解。
  • 缺点
    • 对小型应用可能显得过于复杂。
    • Controller可能会变得臃肿。

2.4 示例

// Model
public class UserModel
{public string Name { get; set; }
}// View
public class UserView
{public void DisplayUser(string name){Console.WriteLine("User Name: " + name);}
}// Controller
public class UserController
{private UserModel model;private UserView view;public UserController(UserModel model, UserView view){this.model = model;this.view = view;}public void UpdateUserName(string name){model.Name = name;view.DisplayUser(model.Name);}
}

3. MVVM(Model-View-ViewModel)

3.1 定义

MVVM是一种现代的软件架构模式,尤其在WPF和Xamarin等应用中常见。其组成部分如下:

  • Model:与MVC中的Model相似,负责数据和业务逻辑。
  • View:用户界面,负责数据的展示。
  • ViewModel:连接Model和View,处理UI逻辑,提供数据绑定。

简单的说,View直接与ViewModel数据绑定,然后ViewModel进行逻辑处理(可能涉及调用Model),然后返回值,更新Model与View

3.2 特点

  • 数据绑定:ViewModel通过数据绑定自动更新View。
  • 解耦:View与Model解耦,通过ViewModel进行交互。

3.3 优缺点

  • 优点
    • 提高了代码的可读性和可维护性。
    • 强大的数据绑定功能。
  • 缺点
    • 初学者可能对数据绑定感到困惑。
    • 对小型项目可能过于复杂。

3.4 示例

// Model
public class ProductModel
{public string Name { get; set; }public decimal Price { get; set; }
}// ViewModel
public class ProductViewModel : INotifyPropertyChanged
{private ProductModel model;public string Name{get => model.Name;set{model.Name = value;OnPropertyChanged();}}public decimal Price{get => model.Price;set{model.Price = value;OnPropertyChanged();}}public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged([CallerMemberName] string propertyName = null){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}
}// View (示例)
public class ProductView
{private ProductViewModel viewModel;public ProductView(ProductViewModel viewModel){this.viewModel = viewModel;// 假设这里有UI元素与viewModel绑定Console.WriteLine("Product Name: " + viewModel.Name);Console.WriteLine("Product Price: " + viewModel.Price);}
}

http://www.ppmy.cn/devtools/126734.html

相关文章

问:JVM当中的垃圾分类怎么搞?

在Java中&#xff0c;JVM&#xff08;Java虚拟机&#xff09;的垃圾识别与分类是自动内存管理的重要组成部分。这一过程主要通过垃圾收集器&#xff08;Garbage Collector&#xff09;实现&#xff0c;旨在识别和回收不再被程序引用的对象&#xff0c;以释放内存空间。 1. 垃圾…

[k8s理论知识]3.docker基础(二)隔离技术

容器其实是一种沙盒技术&#xff0c;其核心是通过约束和修改进程的动态表现&#xff0c;为其创建一个边界。这个边界确保了应用与应用之间不会相互干扰&#xff0c;同时可以方便在不同的环境中迁移&#xff0c;这是PaaS最理想的状态。 程序是代码的可执行镜像&#xff0c;通常…

极简版Java敏感词检测SDK

敏感词工具 sensitive-word 基于 DFA 算法实现的高性能敏感词工具&#xff0c;开源在GitHub&#xff1a;https://github.com/houbb/sensitive-word。用于敏感词/违禁词/违法词/脏词等的识别和阻拦&#xff0c;是基于 DFA 算法实现的高性能 java 敏感词过滤工具框架。 使用场景…

滚雪球学Redis[5.3讲]:Redis持久化优化深度解析:RDB与AOF的策略选择与实践

全文目录&#xff1a; &#x1f389;前言&#x1f6a6;Redis的监控与报警&#x1f504;1. 使用Redis自带工具进行监控&#x1f3af;1.1 Redis常用监控命令&#x1f3af;1.2 Redis配置文件中的监控相关参数 ⚙️2. 使用第三方工具进行Redis监控&#x1f4a1;2.1 Prometheus与Red…

【Mac苹果电脑安装】DBeaverEE for Mac 数据库管理工具软件教程【保姆级教程】

Mac分享吧 文章目录 DBeaverEE 数据库管理工具 软件安装完成&#xff0c;打开效果图片Mac电脑 DBeaverEE 数据库管理工具 软件安装——v24.21️⃣&#xff1a;下载软件2️⃣&#xff1a;安装JDK&#xff0c;根据下图操作步骤提示完成安装3️⃣&#xff1a;安装DBeaverEE&#…

linux之rm使用技巧

对于包含乱码的文件或目录名&#xff0c;在Linux中删除它们可能会有些棘手&#xff0c;但还是可以通过一些方法来实现。下面是一些处理这种情况的方法&#xff1a; 方法1: 使用通配符 如果这些乱码文件或目录的名字有共同的特征&#xff08;例如都是乱码&#xff09;&#xf…

LeetCode 面试经典150题 151.反转字符串中的单词

题目&#xff1a; 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能会…

Java中的异步编程:使用CompletableFuture提升并发性能

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 引言 在现代应用程序中,响应速度和并发性能变得越来越重要。随着处理任务变得复杂,应用程序常常需要同时处理多个任务,这对系统资源和性能提出了严峻的挑战。在传统的阻塞式编程模型中,线程等待任务完成往往…