CONVENTIONS.md 4.3 KB

编程规范

为了保持程序的通用性、扩展性和兼容性,代码设计应遵循以下原则:

  1. 模块化设计:将功能分解为独立的模块或类,每个模块或类应专注于单一职责。避免将多个不相关的业务逻辑集中在一个类或函数中。

  2. 高内聚低耦合:确保每个模块或类内部的元素紧密相关(高内聚),同时减少模块或类之间的依赖关系(低耦合)。这样可以使代码更易于维护和扩展。

  3. 单一职责原则:每个函数或方法应只执行一个最小化的任务。如果一个函数或方法包含多个步骤,应考虑将其分解为多个更小的函数或方法。

  4. 按需创建:根据业务需求决定是否创建新的文件、类或函数。如果现有类或函数无法满足新的需求,应考虑创建新的类或函数,而不是在现有代码中添加额外的逻辑。

  5. 继承与组合:合理使用继承和组合来增强代码的复用性和扩展性。优先使用组合而非继承,以避免过度复杂的继承层次。

  6. 注释与文档:为每个模块、类和函数添加适当的注释,说明其功能、输入输出以及使用场景。这有助于其他开发者理解和使用你的代码。

  7. 接口与抽象:定义清晰的接口和抽象基类,以便在不同实现之间保持兼容性。通过接口或抽象类来定义通用的行为,具体的实现可以在子类中完成。

  8. 可扩展性:在设计时考虑未来的扩展需求,避免硬编码和过度依赖特定实现。使用配置文件、依赖注入等方式来提高代码的灵活性。

  9. 兼容性:在修改或扩展代码时,确保新代码与旧代码兼容,避免破坏现有功能。可以通过版本控制、接口隔离等方式来管理兼容性问题。

项目说明:

  • 测试模块在 tests 的目录中, tests\mytest 是我私人的草稿,不用理会

轮询架构

我的场景中,Worker 是多机分布部署的,任务执行时间较长,且可能因错误被终止。为了确保任务的可追踪性和实时性,设计一个能够实时监控任务进度、记录失败点并支持任务恢复的系统是非常重要的。以下是针对你的需求的优化设计方案:


三、推荐方案

结合你的需求(实时性、任务恢复、多机部署),推荐以下方案:

  1. 任务进度存储
    • 使用 中心化数据库(SQL Server) 实时存储任务进度,确保数据可靠性和任务可恢复性。
  2. 任务监控
    • 使用 WebSocket 实时推送Redis Pub/Sub 实现任务进度的实时监控,避免轮询的开销。
  3. 错误处理
    • 在数据库中记录任务失败时的页码和错误信息,支持从失败点继续执行。

四、示例架构

+----------------+       +-----------------+       +----------------+
|   Worker 1     |       |   Worker 2      |       |   Worker N     |
| (更新进度)      |       | (更新进度)       |       | (更新进度)      |
+-------+--------+       +--------+--------+       +--------+-------+
        |                         |                         |
        |                         |                         |
        |                         |                         |
+-------v-------------------------v-------------------------v-------+
|                            Redis Pub/Sub                          |
| (实时广播任务进度)                                                 |
+-----------------------------------+-------------------------------+
                                    |
                                    |
+-----------------------------------v-------------------------------+
|                            Master (WebSocket)                     |
| (接收进度更新,存储到数据库)                                        |
+-----------------------------------+-------------------------------+
                                    |
                                    |
+-----------------------------------v-------------------------------+
|                            SQL Server                             |
| (存储任务进度、失败信息)                                            |
+-------------------------------------------------------------------+