本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 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. 【机器学习】随机森林(Random Forest)

    随机森林是一个最近比较火的算法 它有很多的优点: 在数据集上表现良好 在当前的很多数据集上,相对其他算法有着很大的优势 它能够处理很高维度(feature很多)的数据,并且不用做特征选择 在训练完后, ...

  2. Selenium查询10010账户余额——python篇

    [本文出自天外归云的博客园] 问题 最近在网上搜到了一些练习题,改编了一下这里的20题如下:登陆中国联通网上营业厅 后选择「自助服务」-->「查询」-->「账户余额」,然后输出手机号码和可 ...

  3. 加快Terminal的打开加载速度

    加快Terminal的打开加载速度html, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirr ...

  4. php多进程编程相关资料(以备参考)

    进程与线程的区别 要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解. 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一个进程都 ...

  5. mysql中文进行全文索引支持问题

    先来看看对一个字段做全文索引,作为一个数据库系统需要做哪些工作? 假设一个文章表里面包含几个字段:文章id.文章作者.文章标题.文章内容 比如,我们对文章内容这个字段artilce_content建立 ...

  6. FTDI通用转USB芯片简述

    FTDI公司的FT2232系列芯片可实现USB与异步串行口RS232/RS485.同步串行总线IIC/SPI/JTAG相互通信,市场占有率,使用普遍. FTDI芯片有两种类型的驱动:virtual C ...

  7. xcode从8升级到9出现的问题

    为了使用iOS11,升级了xcode结果,TensorStorage.h里面报错,修改如下: https://stackoverflow.com/questions/46356153/xcode-9- ...

  8. mac上怎么安装dmg

    双击dmg文件,就会打开了,里面一般就是应用程序,拖到Finder-应用程序(如果里面是pkg格式,就是安装包,双击安装),然后还要注意一个安装完了以后,要把刚才载入的dmg推出,方法是把桌面上那个图 ...

  9. WCF数据交互时长度超过8192

    wcf项目里面,客户端的某个函数执行时可能需要上传13000个字符到服务器. 按照常规的接口+客户端调用写好代码之后,出现了这么个错误: 网上查了很多资料,没有能够一步到位解决问题的.花了2个小时,总 ...

  10. butterknife 配置了点击和绑定无效

    配置了butterknife 没有报错,但是控件绑定和点击均无效. 问题原因: butterknife配置不完善问题导致. 解决办法: 找到app的module的build.gradle depend ...