c++ - 如何选择正确的架构/设计模式
问题描述
我正在做自己的研究项目,并且在正确选择架构/设计模式方面非常挣扎。
在这个项目中,“系统”启动后,我需要在后台做一些事情(任务、处理、显示数据等),同时能够使用键盘与系统交互并发送一些命令,例如“给我这个特定对象的状态”或“这个对象中的数据是什么”。
所以我的问题是——什么样的软件架构/设计模式可以应用于这个特定的项目?类/对象之间的交互应该如何组织?对象应该如何创建?
例如,“事件驱动架构”或“微内核”可以在这里应用吗?非常感谢对有用资源的一些参考!非常感谢您!
解决方案
小心设计模式。如果你把它们撒在你的代码中,希望一切都很好,你很快就会遇到一个难以阅读的样板文件。它们是食谱,而不是解决方案。
我对你的建议是选择一张纸和一支铅笔,开始绘制你领域中的所有实体,以及它们的所有必需品,然后看看它们之间的关系。如果你想认真一点,你可以做这样的事情。
在定义实体时,请争取高内聚和松耦合。
高内聚意味着您应该将相似的功能保持在一起。在一个非常简单的示例中,如果您有一个从文件中读取内容并对其进行处理的类,则该类的内聚性较低,因为读取和处理是两个非常不同的功能。在这种情况下,您需要为每个功能创建一个类。
至于松散耦合,这意味着您的实体应该相互独立。使用上面的示例,假设您现在拥有两个高度内聚的类——一个从文件中读取内容(Reader),另一个处理该内容(Processor)。现在,假设 Processor 类有一个 Reader 类的实例,并调用它以获取其输入。在这种情况下,我们可以说这两个类是紧密耦合的,因为 Processor 没有 Reader 就无法工作。在 OOP 世界中,解决方案通常是使用接口。你可以在这里找到一个简洁的例子。
在定义了域的初始模型并尽可能多地收集了有关它的知识之后,您现在可以开始考虑实现的架构了。这是您可以开始考虑架构模式的地方。事件驱动架构、干净架构、MVP、MVVM……这一切都取决于你的领域。知道哪种模式最适合是您的工作。剧透警告:即使是经验丰富的工程师也很难正确地做到这一点,所以不要害怕失败。
最后,将设计模式留给实施阶段。它们的使用完全取决于您的实施问题和决定。另外,不要强迫他们。理想情况下,你会解决一个问题,如果适用,你会看到一个模式出现。相信我,你最不想要的就是有一个design patternitis的案例。无论如何,如果您需要有关模式的文献,我完全推荐这本书。无论您作为工程师的水平如何,这都很棒。
进一步阅读:
祝你好运!
推荐阅读
- rest - 为什么我得到这个异常 java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer.class 我已经包含了所有的库?
- python - 将 Geotiff 转换为 NetCDF
- windows-services - 获取windows服务的tcl脚本是否存在
- android - Vertical RecyclerView里面的Vertical RecyclerView滚动问题?
- angular - Videogular 2 seekTime 功能不适用于 HLS 流
- sql-server-2008 - 锁定用户记录并防止编辑?
- c# - C# 正则表达式 - 获得壮举。超出音频文件名
- mongodb - 如何使用聚合框架找到重复子字段的最小值?
- python - Python3 使用 lambda 对嵌套字典的列表进行排序
- node.js - 如何等待来自 for 循环的多个异步调用?