跳到主要内容

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

· 阅读需 7 分钟

在软件开发中,架构模式是设计和组织代码的重要方法。本文将详细介绍三种流行的架构模式:ECS(Entity-Component-System)、MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)。我们将探讨它们的定义、特点、优缺点以及在实际开发中的应用示例。

提示

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

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