本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws
 
C#本地实现的和Redis Set实现的,实际上都是要维护一个Events和Handlers的对应关系,sub建立关系(也可以称为Regist), pub用户查询存在哪些关系,并调用。这些都是非分布式的情况,可以当你有一台应用服务器的时候用C#字典实现对应关系的存储就可以。当同一个应用做负载均衡于多台服务器上,为保证发布订阅的对应关系,在各台服务器上保持一致,这个时候可使用Redis 作为一个对应关系存储者。当然如果你确保,pub/sub关系,在程序一开始建立以后,不会被动态改变,那么前两者均可。
如果需要分布式处理,发布者和订阅者或者说生产者和消费者分离,那使用MQ和Redis的pub/sub是最合适不过的。
在将来的拓展中,只需要定义事件对象,事件处理器和维护他们之间的关系。
 
 
也听过这样的说法,在项目伊始,很多设计是增加了代码的复杂程度,应该一切从简,以流畅开发为主。曾在一定程度上,我认为这样的说法是有道理的,项目开始和搭建的过程中,的确要摒弃照猫画虎的行为,不是架子漂亮就合适。但是在面对项目日益增加的需求,随之带来的逻辑上的复杂度增加,极简的框架的确承受不来,我见过的几个项目存在这样的问题,极简的几层=>日益庞大的逻辑层,混杂sql的逻辑,几个甚至十几个接口公用同一个Model。
当然这不是在抱怨,这几个项目我也没在写后端的逻辑,我也不认为我一定能比谁写得好,只是做个反思,项目的任何问题,都是整个团队的问题。
 
在过去前两年的学习中,自己“照虎画猫”搭架子,先建几层接口,再用几层实现,不管懂不懂搞个依赖注入,工厂就算面向接口了,再来个EF仓储,工作单元,加上些遍布在代码中到处都是的缓存这就是持久了,对了再搞个Restful风格的Api,给分页弄个PageResult啥的等等,
想想面对复杂和日益增加的需求,终究是经不住什么考验,把太多的时间花在怎么搭的漂亮,而从不考虑业务上如何抽象和组合,上面是比较主观的一些反省。
 
更让我现在觉得不对劲的是,当初在学校 学习面向接口的时候,有些资料解释其好处,这样说道:“如果以后你换一个Dal层 或者你换一个service层,把这套接口重新实现一下,其他逻辑不用动。”  , 现在想想,这说的是shit?谁会把一套service或者dal换掉?举个恰当的栗子好吗,让人产生误解影响深远。倒不如说,你有个IRedisClient接口,提供了两套实现,一套RedisClient和一套RedisClusterClient, 你可以在单节点和集群间灵活切换。否则给别人一种 面向接口没什么意义的感觉。补充一点,从面向服务的角度,Service面向接口编程,是将来做RPC调用最基本的支撑,所以service需要你的IService,在服务提供者和服务消费者之间做好规范。
 
客观的来看,学习的路上走弯路也算是少不了的过程,还要继续画下去,但更多的应该让自己关注在解决什么问题上,而不只是画的漂亮,多读书,多实践,不知不言,言则有据,把握本质,正确运用。
 
接触过很多做C#的朋友,也有很多做Java的朋友。C#方面开发大多关注代码层面的框架,假如他们不关注代码层面的框架,面对日益复杂的需求,得到的结果就是严重耦合,难以拓展,写到最后就是一堆面向过程的逻辑代码,也没有什么出名的框架从Web层到服务,再到数据层整合的比较完善,在分布式方面的设计和解决方案还有待普及。 C#方向的童鞋研究DDD的有很多,能研究一些这样思想的,比抱着“三层”架构写臃肿的代码的朋友强的多得多,至少人家有一颗将复杂业务简单化的心。还有.net架构设计实战此类的国产书,纠结讨论于BeginTranscation()到底能不能写在逻辑层中,如果写在数据层,又要掺杂了很多业务逻辑怎么办,难免让人无力吐槽。
而Java方面,代码层面的框架关注度可能少一点,在整个架构体系,从代码层面的解耦到服务层面的解耦,拓展性方面会关注度会高一些,并且基本web项目都得益于Spring框架,各种解决方案比较完善,比如单体架构拆分成SOA。
 
 
 
 

EventBus的思路和一些反思的更多相关文章

  1. python犯傻之题目解答思路比较与反思

    1.题目: 企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%: 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%: 20万 ...

  2. Android项目实战(二十九):酒店预定日期选择

    先看需求效果图: 几个需求点: 1.显示当月以及下个月的日历 (可自行拓展更多月份) 2.首次点击选择"开始日期",再次点击选择"结束日期" (1).如果&qu ...

  3. python员工管理系统(基础版)

    各位小伙伴们大家好,最近自学python已经差不多把基础学完了,现在运用这些基础知识写了一个简单版本的员工管理系统 因为在大学里我是学过java的,所以,当有了一定的基础和熏陶外,真心觉得python ...

  4. DDD实践反思

    某大型互联网公司于2019年开始在XX中台财务域进行DDD实践.事后回顾,整体并没有达到预期的效果,个人也做了很多的反思和总结,形成此文. 1. 背景 为什么当时要实践DDD?其中的缘由比较复杂,可以 ...

  5. Noip2016 总结&反思

    一直在期盼的联赛,真正来临时,却远不像我想象的样子. 有些事,真的不敢再想. 算法可以离线,时光却不能倒流.dfs可以回溯,现实却没有如果. 有些事,注定只能成为缺憾,抱恨终生. 不得不说今年Noip ...

  6. web开发实战--弹出式富文本编辑器的实现思路和踩过的坑

    前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...

  7. django+nginx+xshell简易日志查询,接上<关于《rsyslog+mysql+loganalyzer搭建日志服务器<个人笔记>》的反思>

    纠正一下之前在<关于<rsyslog+mysql+loganalyzer搭建日志服务器<个人笔记>>的反思>中说到的PHP+MySQL太慢,这里只是说我技术不好,没 ...

  8. 关于《rsyslog+mysql+loganalyzer搭建日志服务器<个人笔记>》的反思

    关于<rsyslog+mysql+loganalyzer搭建日志服务器<个人笔记>>的反思--链接--http://www.cnblogs.com/drgcaosheng/p/ ...

  9. Android学习系列(43)--使用事件总线框架EventBus和Otto

    事件总线框架 针对事件提供统一订阅,发布以达到组件间通信的解决方案. 原理 观察者模式. EventBus和Otto 先看EventBus的官方定义: Android optimized event ...

随机推荐

  1. 【深度学习】理解dropout

    dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃.注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络. ...

  2. 利用jenkins的api来完成相关工作流程的自动化

    [本文出自天外归云的博客园] 背景 1. 实际工作中涉及到安卓客户端方面的测试,外推或运营部门经常会有很多的渠道,而每个渠道都对应着一个app的下载包,这些渠道都记录在安卓项目下的一个渠道列表文件中. ...

  3. ssm框架结合axis2实例步骤

    本文亲测: 1.从官网下载axis2相关api,地址是:http://axis.apache.org/axis2/java/core/download.html,我下载的是axis2-1.7.6-bi ...

  4. SnowNLP:•中文分词•词性标准•提取文本摘要,•提取文本关键词,•转换成拼音•繁体转简体的 处理中文文本的Python3 类库

    SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和Te ...

  5. NLP自然语言处理 jieba中文分词,关键词提取,词性标注,并行分词,起止位置,文本挖掘,NLP WordEmbedding的概念和实现

    1. NLP 走近自然语言处理 概念 Natural Language Processing/Understanding,自然语言处理/理解 日常对话.办公写作.上网浏览 希望机器能像人一样去理解,以 ...

  6. pandas 常用函数整理

    pandas常用函数整理,作为个人笔记. 仅标记函数大概用途做索引用,具体使用方式请参照pandas官方技术文档. 约定 from pandas import Series, DataFrame im ...

  7. Postgres快速创建大量测试数据

    DROP TABLE IF EXISTS color; CREATE TABLE color( cname ), remark ) ); ),) ,); 插入10000000数据之后,用时51秒 对于 ...

  8. Android——计算器第一次完善

    完善: 1- 处理首位为0 2- 处理首位为“.” 3- 处理前两位为“0.”,此时首位为0,但是不能处理 4- 处理小数点不能重复输入 发现bug:12.3x6 = 如下图: xml <?xm ...

  9. drupal8 管理入门

    https://www.drupal.org/node/1896670 本节将介绍新的Drupal8用户,网站管理.它涵盖了使用管理员帐户,并提供从哪里开始的建议. 了解管理员帐户 在安装过程结束时, ...

  10. Sencha Touch 2.3 自定义主题皮肤,颜色

    写博客园越来越懒了,只写重点部分,不明白的可以Q我. 1.当你通过Cmd生成项目之后,App\resources\sass就是我们的样式源文件 2.想自定义自己的样式分为两种方式 扩展:这个是基于st ...