张逸说

出口成张,逸派胡言

0%

要知道何时以及如何正确使用静态方法,首先要搞清楚静态方法与实例方法的区别。静态(static)本身说明该行为是无状态的,无需实例化,调用时无需再格外分配内存来存放实例。所以,针对全局的单例场景、无状态的行为时,就可以考虑用使用静态方法。但是,静态方法有一个致命的问题,即它与具体类型是强耦合的。如果该行为可能存在变化,就要避免使用静态方法。

阅读全文 »

在软件构造过程中,我们必须正确地理解领域。一种生动的方式是通过“场景”来展现领域逻辑。领域专家或业务分析师从领域中提炼出“场景”,就好像是从抽象的三维球体中,切割出具体可见的一片。然后以这一片场景为舞台,上演各种角色之间的悲欢离合。每个角色的行为皆在业务流程的指引下展开活动,并受到业务规则的约束。当我们在描述场景时,就好像在讲故事,又好似在拍电影。

阅读全文 »

大数据平台日志存储分析系统是在大数据平台下,针对业务系统产生的日志记录进行存储和分析。日志数据来自ElasticSearch存储的日志历史数据,并将需要存储和分析的日志数据从ElasticSearch中读取到Kafka中。Kafka的消费者在侦听到数据消息进入后,以流方式获取数据写入到HBase中。存储在HBase中的数据则是为日志数据的检索与分析提供服务。Web前端通过调用后端API检索HBase中的数据,并进行透视表的可视化展现,展现后的数据支持CSV导出功能。

阅读全文 »

我正在撰写《实践领域驱动设计(Practice Domain-Driven Design,暂定名)》,本书的简略版会在近几个月陆续在GitChat上发布,而完整版会充实更多内容,然后出版纸质书。

最近十年,我在许多项目以及咨询中都在尝试实践领域驱动设计,也体会到这种设计方法给设计质量带来的好处。当然,领域驱动设计确乎博大精深,越要尝试去掌握它,就越发发现它的深邃。

在进行领域驱动设计咨询和培训过程中,我深刻体会到领域驱动设计的难以落地。即使是DDD的专家,也未必能非常轻易地给初学者讲清楚如何进行领域建模,如何改进领域设计的质量。专家们当然可以设计得很好,可一旦问他们为何要这样设计,他们或许会说“by experience”;但这真不是他们的故弄玄虚,而是真实感受,因为很多设计idea其实都是只可意会不可言传的。

阅读全文 »

Operator是Apache Apex平台进行数据处理的最基本构建模块。Apex将要处理的数据抽象为tuple,而tuple就是流动在operator之间。Apex的operator可以通过由DAG(Directed Acyclic Graph,有向无环图)组成的Stream进行连接。因此,在Apex架构体系与数据流模型中,一个典型的Apex流应用是由DAG来呈现的,而DAG又包括了数据流(称之为streams)与操作(称之为operators)。

什么是Operator

Operator是独立的逻辑操作单元,可用于执行用例的业务逻辑。例如在ETL流程中,对数据的过滤就可以视为一个单独的operator。在Apex中,Operator的粒度并没有限制,你可以编写一个operator来完成整个业务逻辑,但为了更好地利用Apache Apex提供的分布式框架,通常还是建议将Operator定义为一个轻量级的独立任务(task)。Apex的API允许用户将任务拆分为不同的阶段(stage),这样就能使得所有的任务可以并行地执行在不同的tuple之上。

阅读全文 »