dev*_*ium 6 c# java oop frameworks uml
让我们假设我负责开发Scrabble游戏,因为客户的主要要求之一是能够在以后尝试不同的游戏方式和模式.我已经制作了一个足够灵活的设计来支持这些变化.剩下的唯一问题是暴露给客户端的内容(对象的访问修饰符),以及如何组织它(如何在命名空间/包中公开我的对象).
我应该如何定义这样的东西,使客户端可以轻松使用我的标准实现(标准的Scrabble游戏,但能够进行他想要的所有修改?我想我需要的是一种框架,他可以在从事于.
我在非严格的分层系统中组织了我的类/接口:
包含可能在整个系统中使用的基本数据类型.系统中的任何人都可以访问此程序包及其成员.其所有成员都是公开的.
包含我定义的所有接口,这些接口可能有助于创建客户端新的Scrabble实现.还包含游戏中使用的值类型,如Piece.其所有成员都是公开的.
包含所有需要的类/代码,以在Implementations.StandardScrabble包中实现我的标准Scrabble游戏.如果客户决定实现游戏的其他变体,他可以在Implementations.XYZ中创建它们.这些类都受到包保护,并且包外部唯一可用的是游戏外观.使用域和数据类型包.
包含我已实现的UI类,以便客户端和程序用户都可以运行游戏(我的实现).可以访问所有其他图层.
我组织事物的方式有几个缺点,最明显的是如果客户想要创建自己的游戏版本,他必须基本上自己实现几乎所有东西(我在Domain中共享接口,但是他几乎什么都不做.)我觉得我应该将所有的实现类传递给Domain,然后只有一个Façade在Implementations命名空间中构建我的标准Scrabble?
你会怎么做?是否有关于如何构建这种程序(基本上是框架)的推荐阅读?
谢谢
我认为你试图给客户太多的自由。这一定让你的事情变得难以处理。根据您的描述,客户端似乎能够修改游戏的几乎所有部分 - 模型、逻辑、UI...我认为最好限制应用程序中的可修改区域,但通过通用接口公开一些Plugin
区域放。这也将使用户更容易 - 他只需要学习插件如何工作,而不是整个应用程序的逻辑。如果需要,可以为您的插件定义区域 - UI 插件、游戏模式插件等。许多生产应用程序和游戏都是以这种方式工作的(回想一下《暗黑破坏神 II》和它拥有的各种令人惊叹的插件!)。