首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >设计/应用结构和关注点分离问题

设计/应用结构和关注点分离问题
EN

Stack Overflow用户
提问于 2019-05-23 00:10:02
回答 2查看 0关注 0票数 0

所以这个问题是从这里开始的(如何处理多个事件args)。这个问题让我想到了这一点,但又足以保证自己的线索。

我正在创建一个游戏(用于娱乐和学习目的),并想知道我是否使用了良好的设计标准。我想我可能已经将OTT分离出来了,或者只是把整件事弄错了,但我希望事实并非如此。我没有问题重写它,因为我想学习“最佳实践”及其实际应用。

编辑

让我解释一下游戏的更多内容,它基于Jawbreaker在许多手机上发现的游戏(这里有快速演示)。目标是选择成组的球以将其从比赛中移除并且尽可能多地得分。

我试图扩展它一点,有不同类型的板,球以不同的方式移动,不同的球类型,球可能只是去他们被告知的地方,或者他们可能会做一些事情。

所以这是我创建的对象的结构,顶行显示DLL的对象,第二行显示这些对象引用的内容:

旧文本
旧文本

(来源:ggpht.com

这是我尝试做UML的尝试:

旧文本http://yuml.me/3279d2ac

单击此处链接到UML的完整页面,使其更大,希望更容易阅读

Objects DLL包含游戏,Balls和Board中使用的基本对象。它们不包含任何关于它们如何对情况起作用/做出反应的逻辑(球确实实现了CompareTo和Equals方法)。可能有多个IBall的实现(对于IBoard也是如此,尽管我想不到那么多)。

InstanceManager DLL用作创建对象的一种方式,不确定它是否可以在对象DLL中完全消失。工厂是静态类,具有各种重载方法来创建IBall对象。BallFactory可以采用BallType Enum,Drawing.Color对象等.BoardFactory非常相似。Jawbreaker是一个单例对象,它处理诸如持有随机对象之类的事情,因为它经常使用和一些GameConfiguration数据(与本主题不太相关)。

Engine DLL是大多数工作发生的地方。LogicFactories采用BallType和BoardType对象来创建相关的逻辑对象。逻辑对象用于控制IBall和IBoard对象的工作方式。BallLogic告诉球,当它的事件发生时它能做什么。例如,当选择Ball时,在Ball Logic上调用一个方法,即选择了Y上的球X. 球可以做任何类型的球应该/可以做的任何事情。BoardLogic非常相似,涉及董事会的行为方式。

引擎对象是另一个单例,是GUI与整个游戏交互的方式。GUI不会直接实例化任何其他对象。

因此,总结一下IBall和IBoard类只包含有关它们的数据,Logic类处理所有功能。

我想知道的是:

1)这是一种明智的做法吗?

2)(通常)逻辑应该与对象/数据分开吗?

3)我是否因为关注点的分离而走得太远了?

4)关于设计/结构的任何其他评论

编辑

我使用几个单例的原因部分是为了简单地在一个地方访问数据,而不是一直保持对象,也只是因为它是单个游戏而且不会扩展到高端或跨多个机器。我确实理解他们不是很好,而不是我经常使用的东西,但感谢评论。

感谢您的想法和反馈。

EN

Stack Overflow用户

发布于 2019-05-23 10:03:48

你的故障看起来正朝着正确的方向发展。但是,我不确定您是否试图将数据从演示文稿中从逻辑中分离出来。看看MVC、观察者和策略模式。

记住这一点:当您设计一个应用程序时,需要进行权衡。您可以用较少的精力扩展应用程序,但是性能和内存使用会比较松散。而且,我不想这样说,但不要创建不必要的接口。如果您知道现在或以后要扩展对象的功能,在创建接口时,如果没有在实现之前考虑它。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100009050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档