如何 select 正确的 architectural/design 模式

How to select the right architectural/design patterns

我正在做我自己的研究项目,我在 architectural/design 模式的正确选择上很挣扎。

在这个项目中,"system"启动后,我需要在后台做一些事情(任务,处理,显示数据等),同时能够与系统交互使用,为了例如,键盘并发送一些命令,如 "give me status of this particular object" 或 "what is the data in this object".

所以我的问题是 - 什么软件 architectural/design 模式可以应用于这个特定项目? classes/objects之间的互动应该如何组织?应该如何创建对象?

可以在这里应用例如"event-driven architecture"或"Microkernel"吗?非常感谢对有用资源的一些参考! 非常感谢您!

您有一个后台任务,它确实可以用于消息 pump/event 队列。然后你的前台任务会向这个后台线程发送请求并异步等待结果。

看看书"Patterns for Parallel Programming"。

如果你看一本设计模式的书就更好了。 I really like this one

例如,如果您需要从特定对象获取一些数据,您可能需要观察者模式为您工作,一旦对象拥有数据,您(或另一个对象)就会知道这一点数据并可以使用它,使用另一种模式(策略可能有效,这实际上取决于你必须做什么)。

如果您必须同时做一些事情,还要检查单例模式(嗯,检查最重要的!)。

小心设计模式。如果你将它们散布在你的代码中希望一切都能很好地工作,你很快就会有一个不可读的样板文件。它们是食谱,而不是解决方案。

我给你的建议是拿一张纸和一支铅笔,开始画出你域中的所有实体,以及它们的所有必需品,看看它们之间的关系。如果你想认真对待它,你可以做类似 this 的事情。

在定义实体时,争取高内聚松散耦合

高内聚意味着您应该将相似的功能放在一起。在一个非常简单的示例中,如果您有一个 class 从文件中读取内容并对其进行处理,则 class 具有低内聚性,因为读取和处理是两个截然不同的功能。在这种情况下,您会希望每个功能都有一个 class。

至于松散耦合,它意味着你的实体应该相互独立。使用上面的示例,假设您现在拥有两个高度内聚的 classes - 一个从文件中读取内容 (Reader),另一个处理这些内容 (Processor)。现在,假设处理器 class 有一个 Reader class 的实例,并调用它以获取其输入。在这种情况下,我们可以说两个 class 是紧密耦合的,因为没有 Reader 处理器将无法工作。在 OOP 世界中,对此的解决方案通常是使用接口。你可以找到一个简洁的例子 here.

定义域的初始模型并尽可能多地收集相关知识后,您现在可以开始考虑实现的体系结构。这是您可以开始考虑架构模式的地方。事件驱动架构、干净架构、MVP、MVVM……这都取决于您的领域。了解哪种模式最适合是您的工作。剧透警告:即使对于有经验的工程师来说,这也很难正确地做到,所以不要害怕失败。

最后,把设计模式留给实现阶段。它们的使用完全取决于您的实施问题和决定。另外,不要强迫他们。理想情况下,您将解决一个问题,如果适用,您将看到一种模式出现。相信我,你最不想看到的就是 design patternitis. Anyway, if you need literature on patterns, I totally recommend this book 的大小写。无论您的工程师水平如何,这都很棒。

进一步阅读:

祝你好运!