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

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

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

首先,无论使用什么框架,使用什么设计模式,本质都是为了分离逻辑,方便扩展,多人协同。换句话说,就是让代码质量更高;

所以并不需要具体掌握某个框架,只需要掌握某种框架的思想。大家写项目的时候多想想,写多了,就理解了。

1. ECS(Entity-Component-System)

1.1 定义

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

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

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

1.2 特点

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

1.3 优缺点

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

1.4 示例

csharp 复制代码
// 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 示例

csharp 复制代码
// 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 示例

csharp 复制代码
// 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);
    }
}
相关推荐
诸葛悠闲11 分钟前
设计模式——桥接模式
设计模式·桥接模式
蔗理苦14 分钟前
2024-12-24 NO1. XR Interaction ToolKit 环境配置
unity·quest3·xr toolkit
花生糖@17 分钟前
Android XR 应用程序开发 | 从 Unity 6 开发准备到应用程序构建的步骤
android·unity·xr·android xr
向宇it1 小时前
【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
开发语言·unity·c#·编辑器·游戏引擎
捕鲸叉4 小时前
C++软件设计模式之外观(Facade)模式
c++·设计模式·外观模式
小小小妮子~5 小时前
框架专题:设计模式
设计模式·框架
先睡5 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
向宇it5 小时前
【从零开始入门unity游戏开发之——unity篇01】unity6基础入门开篇——游戏引擎是什么、主流的游戏引擎、为什么选择Unity
开发语言·unity·c#·游戏引擎
向宇it11 小时前
【从零开始入门unity游戏开发之——C#篇26】C#面向对象动态多态——接口(Interface)、接口里氏替换原则、密封方法(`sealed` )
java·开发语言·unity·c#·游戏引擎·里氏替换原则
Damon_X13 小时前
桥接模式(Bridge Pattern)
设计模式·桥接模式