26 | 实战二(下):如何实现一个支持各种统计规则的性能计数器?
王争
该思维导图由 AI 生成,仅供参考
在上一节课中,我们对计数器框架做了需求分析和粗略的模块划分。今天这节课,我们利用面向对象设计、实现方法,并结合之前学过的设计思想、设计原则来看一下,如何编写灵活、可扩展的、高质量的代码实现。
话不多说,现在就让我们正式开始今天的学习吧!
小步快跑、逐步迭代
在上一节课中,我们将整个框架分为数据采集、存储、聚合统计、显示这四个模块。除此之外,关于统计触发方式(主动推送、被动触发统计)、统计时间区间(统计哪一个时间段内的数据)、统计时间间隔(对于主动推送方法,多久统计推送一次)我们也做了简单的设计。这里我就不重新描述了,你可以打开上一节课回顾一下。
虽然上一节课的最小原型为我们奠定了迭代开发的基础,但离我们最终期望的框架的样子还有很大的距离。我自己在写这篇文章的时候,试图去实现上面罗列的所有功能需求,希望写出一个完美的框架,发现这是件挺烧脑的事情,在写代码的过程中,一直有种“脑子不够使”的感觉。我这个有十多年工作经验的人尚且如此,对于没有太多经验的开发者来说,想一下子把所有需求都实现出来,更是一件非常有挑战的事情。一旦无法顺利完成,你可能就会有很强的挫败感,就会陷入自我否定的情绪中。
不过,即便你有能力将所有需求都实现,可能也要花费很大的设计精力和开发时间,迟迟没有产出,你的 leader 会因此产生很强的不可控感。对于现在的互联网项目来说,小步快跑、逐步迭代是一种更好的开发模式。所以,我们应该分多个版本逐步完善这个框架。第一个版本可以先实现一些基本功能,对于更高级、更复杂的功能,以及非功能性需求不做过高的要求,在后续的 v2.0、v3.0……版本中继续迭代优化。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何实现一个支持各种统计规则的性能计数器。作者强调了小步快跑、逐步迭代的开发模式的重要性,提倡在多个版本中逐步完善框架。在v1.0版本中,作者暂时只实现了数据采集、存储、聚合统计和显示这四个基本功能,将更高级、更复杂的功能留在后续版本中进行迭代优化。文章详细讲解了面向对象设计与实现的步骤,包括划分职责、识别类、设计接口等。通过对MetricsCollector、MetricsStorage、Aggregator、ConsoleReporter和EmailReporter等类的划分和设计,作者展示了如何实现灵活、可扩展的、高质量的代码。整体而言,本文强调了逐步迭代的开发模式和面向对象设计的重要性,为读者提供了实现性能计数器的思路和方法。文章内容涉及面向对象设计、代码质量和灵活性,适合对性能计数器实现感兴趣的读者阅读。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》,新⼈⾸单¥98
《设计模式之美》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(96)
- 最新
- 精选
- 落叶飞逝的恋老师,请教个问题。类的定义里面,什么时候使用基本类型,什么时候用包装类型?
作者回复: 能用基本类型就不要用包装类型~
2020-01-0433 - 程序员小跃把落下的实战篇学习完了,还把老师的干货总结分享给了自己的小伙伴,都说赞
作者回复: 😍
2020-01-062 - 淤白打卡:用Java实现了文中的完整案例。
作者回复: 加油
2020-11-231 - 牛顿的烈焰激光剑Demo.java 里应该用`while(true);`包裹所有代码吧?
作者回复: 不用的哦,你觉得为啥要while循环呢?只是一个demo而已的
2020-01-062 - 猫头鹰爱拿铁可否提供下类图,整体上看着更方便。
作者回复: 自己画画?
2020-01-022 - 再见孙悟空对于获取大量数据在内存有可能把内存撑爆的问题,有什么好的解法吗?前段时间系统也遇到这个问题了,最后扩大了内存,有没有通过代码上来解决的方案呢?欢迎小伙伴和老师的指教。
作者回复: 后面有讲到 别急
2020-01-014 - 堵车要写出优美的代码,首先要有一颗对丑陋代码厌恶的心2020-01-02862
- 李现教你学编程新年快乐 一起学习 一起提高 20202020-01-01752
- 何沛Aggregator考虑到后期新增新的维度统计,可以考虑使用责任链模式。 ConsoleReporter、EmailReporter 出现了代码复用,可以用模板设计模式。2020-01-02530
- 辣么大想了三点,希望和小伙伴们讨论一下: 1、RequestInfo save 一次写入一条。是否需要考虑通过设置参数,例如一次写入1000或10000条?好处不用频繁的与数据库建立连接。 2、聚合统计Aggregator是否可以考虑不写代码实现统计的逻辑,而是使用一条SQL查询实现同样的功能? 3、EmailReporter startDailyReport 没指定明确的统计起止时间。设置统计指定区间的request info,例如08:00~次日08:00,然后发邮件。2020-01-011024
收起评论