c# - 这个问题的良好代码架构?

标签 c# architecture oop

我正在开发一款带有可定制飞船的太空射击游戏。您可以通过一对雷达图*增加船舶任意数量的强度。在内部,我将每艘船表示为子类 SpaceObject 类,其中包含描述该船各种属性的 ShipInfo

我想开发一个相对简单的 API,让我可以为所有船舶属性(其中一些是基础实际集合的简化)输入一组相对强度(从雷达图允许的最小值到最大值)属性)并取回我可以提供给 PlayerShip 类的 ShipInfo 类(即实例化为玩家飞船的对象)。

我可以自己开发代码来完成简化属性和实际属性之间的转换,但我想要一些关于提供哪种架构的建议,以最大限度地减少与此翻译器代码交互的痛苦(即没有 5+ 的方法争论或其他一些废话)。有人有什么想法吗?

*=尚未实际实现,但这是计划。

最佳答案

Builder 模式呢?您可以在 ShipInfo 类上使用静态 FillDefaults 方法,然后通过返回您正在使用的实例的实例方法分配 ShipInfo 的每个属性,如下所示:

ShipInfo.FillDefaults().CalculateSomething(50).AssignName("Testing...").RelativeFiringPower(10).ApplyTo(myShip);

在 ShipInfo 中,这看起来像:

public static ShipInfo FillDefaults()
{
    ShipInfo newInstance = ...;
    // Do some default setup here
    return newInstance;
}

public ShipInfo CalculateSomething(int basis)
{
    // Do some calculation
    // Assign some values internally
    return this;
}

// Keep following this pattern of methods
public void ApplyTo(SpaceObject obj)
{
    // Some checks here if you want
    obj.ShipInfo = this;
}

关于c# - 这个问题的良好代码架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2855897/

相关文章:

c# - Swagger 扩展可能的端点

model-view-controller - 关于 MVC 架构的问题

oop - 接口(interface)与基类

c# - 无法使用 Miniprofiler 打印查询

c# - EF 6 - 如何正确执行并行查询

node.js - NestJs 设计问题 : How can I avoid creating a Nodejs Instance for each team?

php - MySQLi 的正确使用

python - 在可能会失败的构造函数中运行代码的错误做法?

c# - foreach 语句不能对类型为 'System.Data.DataSet' 的变量进行操作

architecture - 您如何开始软件架构讨论?