模块分析(二)

  对于对象/类的识别有一个需要考虑,就是调度类,在领域模型中是需要有一个调度类,或者说一个Root对象,可以将领域中的对象关联起来;可以是一个调度类性对象,类似于事件分发器;可以是一个根对象,就是通过这个root,可以链式方式,连环调度到所有的对象。

  在当一组对象/类识别出来之后,要设定他们之间的关系,关系主要有两类:所属关系和调用关系;所属关系要搞清楚是聚合,连接(要考虑清楚1:1还是1:*...)以及依赖;对于调用关系,要考虑清楚调用场景;比如一个信道管理对象和TCP的Session管理对象之间;是在信道管理对象创建了一个TCPChannel之后,调用Session管理对象的add消息,来进行Session管理;

  对于跟对象处理就是面向事件的来进行考量;所谓事件,大家可以理解为在经典INPUT-HANDLE-OUTPUT模型中的INPUT的载体,时间有以下五种触发场景(按照流程的生命周期进行排序):

  1. 监听,比如HTTP端口监听,比如TCP端口的监听,触发监听,一般都会触发事件;

  2. 异步处理,比如在NIO处理场景下,TCP发送一个请求,对端将会是异步方式进行相应,那么这个异步相应将会触发事件,这个例子可以归到上面其实也可以,异步其实本质是多线程处理,牵涉到多线程处理,还要对多线程处理结果进行跟踪和处理的,将会触发事件;

  3. 异常,将会触发事件;

  4. 完成,一个事件处理完了,可能会触发完成事件,需要调度类进行后续处理;

  5. 定时任务。

  在做模块和模块设计的时候,尽量少和外部模块交互,尽量通过上游模块以着参数的形式通告(上游可能是在没办法,不得已才会和其他模块交互,上游做牺牲,下游独立),尽量维护其独立性;

时间: 2025-01-15 02:08:03

模块分析(二)的相关文章

unreal3对象管理模块分析二

上一篇主要记了UClass的创建,现在总结一下UObject的创建,可以从几个不同角度来理解. 从途径上看,可以根据UObject的构造函数来分个类: // Constructors. UObject(); UObject( const UObject& Src ); UObject( ENativeConstructor, UClass* InClass, const TCHAR* InName, const TCHAR* InPackageName, EObjectFlags InFlags

css扁平化博客学习总结(一)模块分析

一.模块分析 1.每开发一个项目之前,首先要对项目进行一个大致规划,它到底要做什么功能,它有什么具体需求. 2.所以需要进行模块化分析,把这些东西具象化,把一个问题模块化,对需求有一个宏观的了解. 3.有一个模块的概念后,把模块进行细分,细分成更小的模块,然后逐一击破. 不进行模块分析的恶劣影响: 不做模块分析,一上手就想到哪儿做到哪儿,很容易一叶障目,不能看到全貌,你会发现做着做着就失控了.因为有些地方出现了矛盾,你会发现要修改的成本很高,还不如推倒重写. 新手很容易着眼于细节,首先不应该从细

Android WIFI模块分析

一:什么是WIFI WIFI是一种无线连接技术,可用于手机.电脑.PDA等终端.WIFI技术产生的目的是改善基于IEEE802.11标准的无线网络产品之间的互通性,也就是说WIFI是基于802.11标准的,但WIFI不等同无线网络. 二:Android平台下的WIFI模块 简单介绍一下,WIFI模块的基本功能: 1. 开关WIFI 除了在WIFI设置界面可以开关WIFI,还有其他的方法可以设置,要查看这些开关状态是否一致.还有就是飞行模式对WIFI开关的影响,由于WIFI开和关都有一个时间过程,

基于Android6.0的RIL框架层模块分析

本文与另外一篇分析RIL底层模块的文章是姐妹篇:基于Android6.0的RIL底层模块分析 根据手机网络制式的不同,通常系统中会扩展Phone.java这个类,扩展成GSMPhone和CDMAPhone.这个类主要是抽象整个手机来处理通信过程中与其他模块的交互.我们以GSMPhone为例,分析来电流程如何从底层传递到上层.该分析主要基于代码,所以会比较啰嗦. 以GSMPhone为例,在PhoneFactory类中有实例化该类的方法: public static Phone getGsmPhon

netty 源码分析二

以服务端启动,接收客户端连接整个过程为例分析, 简略分为 五个过程: 1.NioServerSocketChannel 管道生成, 2.NioServerSocketChannel 管道完成初始化, 3.NioServerSocketChannel注册至Selector选择器, 4.NioServerSocketChannel管道绑定到指定端口,启动服务 5.NioServerSocketChannel接受客户端的连接,进行相应IO操作 Ps:netty内部过程远比这复杂,简略记录下方便以后回忆

学生信息管理系统(四)——模块分析

学生信息管理系统已经敲完了,也进行了第一次验收,结果不是太理想.之前的总结也没有及时发表.现在重新复习一遍,把它发表. 从今天开始,我们就进入了代码分析阶段.现在我们就来分析一下模块中的几个函数. Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset 'executes SQL and returns Recordset Dim cnn As ADODB.Connection

又是正版!Win下ffmpeg源码调试分析二(Step into ffmpeg from Opencv for bugs in debug mode with MSVC)

最近工作忙一直没时间写,但是看看网络上这方面的资源确实少,很多都是linux的(我更爱unix,哈哈),而且很多是直接引入上一篇文章的编译结果来做的.对于使用opencv但是又老是被ffmpeg库坑害的朋友们,可能又爱又恨,毕竟用它处理和分析视频是第一选择,不仅是因为俩者配合使用方便,而且ffmpeg几乎囊括了我所知道的所有解编码器,但是正是因为这个导致了一些bug很难定位,所以有必要考虑一下如何快速定位你的ffmpeg bug. sorry,废话多了.首先给个思路: 1.使opencv 的hi

传奇源码分析-客户端(游戏逻辑处理源分析二)

5.接受登录成功后,接收GameSrv服务器发送的消息:接收GameGate发送的消息:CClientSocket::OnSocketMessage的FD_READ事件中,PacketQ.PushQ((BYTE*)pszPacket);把接收到的消息,压入PacketQ队列中.处理PacketQ队列数据是由CGameProcess::Load()时调用OnTimer在CGameProcess::OnTimer中处理的, 处理过程为:OnMessageReceive; ProcessPacket(

Redis数据持久化机制AOF原理分析二

Redis数据持久化机制AOF原理分析二 分类: Redis 2014-01-12 15:36  737人阅读  评论(0)  收藏  举报 redis AOF rewrite 目录(?)[+] 本文所引用的源码全部来自Redis2.8.2版本. Redis AOF数据持久化机制的实现相关代码是redis.c, redis.h, aof.c, bio.c, rio.c, config.c 在阅读本文之前请先阅读Redis数据持久化机制AOF原理分析之配置详解文章,了解AOF相关参数的解析,文章链

[Android]Volley源码分析(二)Cache

Cache作为Volley最为核心的一部分,Volley花了重彩来实现它.本章我们顺着Volley的源码思路往下,来看下Volley对Cache的处理逻辑. 我们回想一下昨天的简单代码,我们的入口是从构造一个Request队列开始的,而我们并不直接调用new来构造,而是将控制权反转给Volley这个静态工厂来构造. com.android.volley.toolbox.Volley: public static RequestQueue newRequestQueue(Context conte