自学内容网 自学内容网

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

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

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

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

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);
    }
}

原文地址:https://blog.csdn.net/m0_73727069/article/details/142927444

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!