gpt4 book ai didi

c# - 如何更好地在框架中组织类/包,以便我的应用程序的客户端可以轻松地扩展它们?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:22 25 4
gpt4 key购买 nike

假设我负责开发一款拼字游戏,因为客户的主要要求之一是能够在以后尝试不同的游戏方式和模式。我已经做了一个足够灵活的设计来支持这些变化。剩下的唯一问题是向客户端公开什么(对象的访问修饰符),以及如何组织它(如何在命名空间/包中公开我的对象)。

我应该如何定义事物,以便客户既可以轻松地使用我的标准实现(一个标准的拼字游戏,又能够进行他想要的所有修改?我想我需要的是一种框架,在他可以继续工作。

我在一个非严格的分层系统中组织我的类/接口(interface):

数据类型

包含可能在整个系统中使用的基本数据类型。系统中的任何人都可以访问此包及其成员。它的所有成员都是公开的。

包含我定义的所有接口(interface),这些接口(interface)可能对创建客户端的新 Scrabble 实现很有用。还包含游戏中使用的值类型,如 Piece。它的所有成员都是公开的。

实现

在 Implementations.StandardScrabble 包中包含实现我的标准拼字游戏所需的所有类/代码。例如,如果客户决定实现游戏的其他变体,他可以在 Implementations.XYZ 中创建它们。这些类都是包保护的,包外唯一可用的是游戏外观。同时使用域和数据类型包。

界面

包含我实现的 UI 类,以便程序的客户端和用户都可以运行游戏(我的实现)。可以访问所有其他层。


我组织事情的方式有几个缺点,最明显的是如果客户想要创建自己的游戏版本,他基本上必须自己实现几乎所有的东西(我在域中分享了接口(interface),但他几乎不能用它们做任何事情)。我觉得我应该将所有实现的类传递给域,然后只有一个 Façade 在实现命名空间中构建我的标准拼字游戏?

你会如何处理这个问题?是否有关于如何构建此类程序(基本上是框架)的推荐读物?

谢谢

最佳答案

我认为您试图给客户太多的自由。这一定让你难以处理事情。根据您的描述,客户端似乎能够修改游戏的几乎所有部分——模型、逻辑、用户界面……我认为最好限制应用程序中的可修改区域,但通过一般 Plugin 接口(interface)设置。这也会让用户更容易——他只需要学习插件的工作原理,而不是整个应用程序的逻辑。如果需要,为插件定义区域 - UI 插件、游戏模式插件等。许多生产应用程序和游戏都以这种方式工作(回想一下暗黑破坏神 II 及其拥有的各种令人惊叹的插件!)。

关于c# - 如何更好地在框架中组织类/包,以便我的应用程序的客户端可以轻松地扩展它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4024920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com