跳转至

论面向对象设计

  1. 介绍项目基本信息
  2. 自己担任的职位
  3. 该项目解决客户的哪些问题
  4. 从题目要求角度描述项目过程
  5. 描述项目交付得到用户的好评
  6. 如果字数不够可以写一些无关痛痒的问题

2023 年 5 月我参加了某航天设计院所的《三维数据轻量化异构项目》,担任系统架构师负责系统的分析和设计工作。该系统主要用于航天设计行业三维数据轻量化和预览工作,解决设计单位、制造单位和维修保障单位上下游间业务数据同步问题。系统包括三维数据轻量化、三维模型可视化、中性格式转换、中性格式一致性校验等功能,技术上使用 Iris、GORM、MYSQL 等技术栈,采用微服务方式进行开发、运维。 项目能够取得成功,很大程度上取决于采用了 RUP 统一过程模型,将一个二维模型划分为多个循环,每个循环完成一个迭代版本;每个循环通过初始、细化、构造、移交,降低了系统风险,确保高质量交付。2024 年 5 月项目顺利通过验收并上线运行,目前已经稳定运行 5 个月,得到了公司领导和客户的一致好评。

  1. 介绍公司基本信息
  2. 介绍公司所在行业的国内外形式,最好紧扣国家政策
  3. 介绍项目基本信息
  4. 介绍项目明确指标,比如对安全性要求很高,同时引出题目话题
  5. 详细解释一下话题概念,比如统一过程模型是把一个二维的软件过程模型,划分为多个循环,基于构件开发,功能结构,每个循环产生一个迭代版本。
  6. 介绍完后解释项目在这个中怎么使用
  7. 介绍项目技术栈信息、部署信息

我所在的公司作为国内主要的三维轻量化和可视化的厂商之一,致力于打造基于 B/S 端的三维模型轻量化生态,解决传统工业制造领域设计、制造、维修保障环节数据无法流通,难以协作的问题。三维数据轻量化是工业设计、仿真、制造过程中非常重要的一个过程,在这方面国外许多厂商在很早之前就已经推出了自己的三维数据轻量化方案,并快速占领了国内军工、航天航空、工业制造等多个重大卡脖子领域。为了打破国外垄断、提升公司竞争力,我司开创性的提出了建设独立自主的三维数据轻量化标准。2023 年 5 月我参加了某航天设计院所的《三维数据轻量化异构项目》,担任系统架构师负责系统的分析和设计工作。在设计之初我便意识到项目时间紧、任务重,项目生命周期和风险的管控是重中之重, 在软件过程模型中,瀑布模型适合项目需求明确,需求、设计、研发、测试,每个一个阶段都需要等待上一阶段结束后才能进行,如果某个阶段出现问题,将会产生连锁影响;敏捷开发模型适用于,需求不清晰,通过不断迭代,小步快跑这种快速迭代的方式开发;结合项目背景最终选择了统一过程模型。统一过程模型是基于构建的重量接过程问题,将一个二维的软接模型划分为多个循环,每个循环完成一个迭代,既保证了系统整体的稳定性,同时能够让客户快速了解项目进展。系统采用 Golang 语言开发,Mysql 存储结构化数据,Redis 存储热点数据和任务队列等信息。部署配置:两台高性能服务器安装麒麟 V1 作为数据服务器,通过一主一备方案保障数据安全;两台高性能服务器运行这集群服务通过冗余和心跳方式检测对方状态,确保系统在出现故障是能快速切换,以实现可用的目的。

  1. 介绍话题的核心特征,这个应该是题目明确要求的,可以说的一些关键词:解耦、面向对象、基于构件、层次化模型、微服务、基于 Web 的三层瘦客户端等

模型的过程控制可以提高大家的生产力,简洁的过程模型,确保了软件功能的可复用性。根据 RUP 过程模型我们把项目整体开发过程分为了:初始阶段、细化阶段、构造阶段和移交阶段,每个循环结束都会进行一次技术评审,验证系统功能符合要求才能进入下一阶段。

  1. 接上一端的描述,逐点详述,用户需求、设计模式、技术方案、客户沟通、构件开发都可以写。

初始阶段。初始阶段的主要目的是从用户的角度构造用例模型,明确系统边界。首先,我们通过问卷调查、现场沟通、联合讨论会等方式获取用户需求需求,详细了解用户对系统的预期,捕获在项目技术文档中没有明确的质量属性和功能需求。其次,我没内部组织了一场联合需求讨论会,结合项目招标文件、技术文档、调查信息,采纳各方意见,就功能需求的优先级达成一致,采用多阶段交付方式向用户提供系统最新功能,每一阶对应统一过程模型的一个循环。最后,我们结合项目需求,确定了项目目标、质量属性用例模型,通过结构化的描述手段比如用例图、活动图等方式明确用户需求,编写了《软件需求说明书》初稿,并通过了用户评审。

细化阶段。细化阶段的主要任务是基于初始阶段的需求稳定那个确认解空间,建立项目模型。我们把项目分成了五个主要模块:模型管理、三维轻量化转换、三维中心格式转换和一致性校验、三维模型预览。确立了整体软件架构、部件之间的交互接口、构件的设计与选择。基于构建的开发可以减少开发中的重复工作,降低开发成本,缩短开发周期,提高软件的质量和灵活性。获取构建有多种途径,第一种时现有构建库中直接提取符合要求的构建,或对已有的构建二次修改;第二种是采购第三方构件,现在市场上有很多符合要求的产品,比如开发平台、数据库系统、各种通用构建;第三种方式是开发符合自己需求的构建,如果市场上或者构件库中没有符合自己要求的构件,必须自己开发满足要求的构件,同时丰富了构件库中的构件。在该项目中上述获取构件的方式我们都使用了,在以前开发的项目中我们提取了很多通用的构件,比如系统随着规模的扩大会同时访问多个数据源,包括 mysql/mongodb/redis,所以我们提取了多数据源管理构件;日志记录与审计是软件架构质量属性中安全性的一种方式,我们提取了服务日志/行为日志记录构件;权限管理对于任何系统都很重要,我们提取了 RABC(基于角色访问控制)模型的独立授权构件,将权限与角色相关联,通过为用户授予适当的角色来分配权限,简化了授权的管理。 项目需求中有一项指标是要求只是三维模型轻量化任务的 200 并发,这个不同不传统互联网应用的两百并发,三维数据领域每个模型平均大小为 80-150 G,这意味着我们需要支持非常大规模的 CPU 密集运算,经过讨论,我提出了开发基于优先级队列任务调度构件的方案被大家采纳。由于 Redis 作为缓存服务提供了 ZSet(有序队列),基于该特性我们可以实现多优先的任务队列,对于用户上传的需要轻量化或中性格式转换的模型,通过优先级队列的管理可以智能化的将任务分发到不同的 CPU 密集运算的集群中,实现多 Worker 消费确保系统支持 200 模型转换任务的并法。在细化阶段我们完成了软件需求说明书的完善和软件体系文档,选择了合适的构件,并完成了用户对其的评审工作。

构造阶段。构建阶段的任务是把各种构件组装成产品。我们采用基于功能和面向对象的组装技术相结合,根据系统的需求,把各种渠道获取的构件组装成产品,并完成系统的集成测试和系统测试。每次迭代的成果都展示给用户,让用户详细了解进度,并提出反馈和改进意见,我们及时调整开发。该阶段结束时,向用户交付了系统的 Beta 版本。

移交阶段。交付阶段的任务是把产品成功的分发给用户。由于用户要求是新的业务应用该系统,不存在新老系统的业务移交问题,所以交付阶段比较简单。首先,在用户提供的环境下部署Beta版本,进行系统的Beta测试。其次,对各种错误和缺陷做出修改,增加文档和培训资料,并对用户进行培训。最后,配合用户完成了验收测试。

  1. 总结性的说项目验收并上线,解决了客户什么问题,提升了客户效率,降低了客户成本
  2. 项目因为使用了论文话题取得的了巨大成功,提升了研发效率,降低了研发风险,满足了质量属性效用树,比如安全性、可用性、性能的要求
  3. 说一下除此之外系统还存在一些无关痛痒的问题,比如没时间写文档、测试不充分、在客户现场定位问题不方便、由于使用用户过多达到了系统瓶颈需要扩容机器等。
  4. 最后说自己吸取教训,记录到拉工作日志中并与其他技术人员风险,避免此类恩提再次发生,为今后架构设计工作提供帮助。

2024 年 5 月《三维数据轻量化异构项目》顺利通过验收上线运行,该平台提供的能力,大大提高了用户的工作效率,解决了航天设计上下游之间信息不对称的问题,用户可以通过平台快速分下加密后的轻量化数据,在保证三维信息不泄露的同时降低了工作成本,得到了用户的好评。项目能够取得巨大的成功得益于采用了 RUP 统一过程模型,这个方案很好的降低了系统在开发和运维过程中的风险,是程序设计在兼顾用户的功能和性能需求的同时,全面满足了软件的可靠性要求,在加强平台安全性、提高系统稳定性等方面发挥了重要的作用,活动了领导和同事的一致好评。但是在系统运行过程中我也发现了一些不足,例如系统之间接口调用时由于业务复杂,简单的队列无法满足繁忙的场景,需要建立动态优先级调整机制处理队列等,这些问题通过应急反馈,在上级领导的推动下都得到了妥善的解决。我们也吸取了这种经验教训,记录到了工作总结中,并和其他技术人员分享,为今后架构设计工作提供帮助。