布局网络卫星成为重点
|
横轴是连接数,纵轴是 QPS。此时,这张图反映了一个数量级,希望大家在面试的时候可以正确的描述出来,不要问你的时候,你回答的数量级相差甚远! 完全基于内存实现“ 65 哥:这个我知道,Redis 是基于内存的数据库,跟磁盘数据库相比,完全吊打磁盘的速度,就像段誉的凌波微步。对于磁盘数据库来说,首先要将数据通过 IO 操作读取到内存里。 ”没错,不论读写操作都是在内存上完成的,我们分别对比下内存操作与磁盘操作的差异。
磁盘调用栈图 1.1 模型 domain是DDD中一个非常宽泛的概念。不过,我们平常就当作数据库对应的Java 类使用了(没什么错)。在实际操作中,它还可能有下面几种名字,在普通项目中区别不大,你最好在项目中保持相同的意义来避免歧义。
对于简单的项目,我通常在项目中使用entity来表示和数据库的交互。在JPA之类的ORM中,也是做相关处理的。比如javax.persistence.Entity注解。你要明白的是,Spring Data其实取了一个比较折衷的点,把很多东西揉在一起了。 1.2 Dao dao层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作。在一些其他框架中,还会叫别的名字。
Dao应该满足最小封装原则,理论上只涉及一句SQL的执行。如果有多个数据的存取动作,需要封装在Service中,并用事务进行管理(虽然这么说,但repository在DDD中,是不和具体的数据库打交道的)。 1.3 service和controller 这个没什么好说的,基本上所有重要的逻辑都在这里完成。service用于逻辑处理,controller用于接口暴露。 2. 根据功能组织 大多数情况下,我们使用上面的这种划分模式,能够很好的完成工作。比如,所有的数据处理,都放在Dao层,所有的逻辑处理,都放在Service层。 这在小项目中相安无事,但如果项目中,有成百上千个Entity,这些目录中的文件就会爆炸,以至于最后无法维护。 另外一个问题就是,仅仅一个简单的功能,就可能分散在多个package下的多个文件中,大型项目维护变得困难。
我们有另外一个思路,就是根据功能进行分组。比如下面的截图。 (编辑:阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
