本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 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。
 
 
 
 

.NET基础架构方法—DataTableToList通用方法的更多相关文章

  1. .NET基础架构方法—DataTableToExcel通用方法

    p { display: block; margin: 3px 0 0 0; } --> .NET架构基础方法—DataTableToExcel通用方法(NPOI) 今天封装DataTaleTo ...

  2. Object类中通用方法之:toString()方法

    1.Java所有的对象都是Object类的实例,都可以直接调用该类中定义的方法,这些方法称为通用方法 2.toString()方法即为Object类中定义的通用方法之一 3.平时我们如果在控制台直接打 ...

  3. 微软云基础架构Hyper-scale Datacenter

    每天醒来,可能很多人的习惯都是打开手机,看看微信,刷刷朋友圈,或者看看新闻,去咖啡店,打开电脑搜索一些关键字,观看视频,电视剧--可是你有没有想过你每一次键盘的敲击,每一次微信的语音的发送,数据会流向 ...

  4. 深入了解CI/CD:工具、方法、环境、基础架构的全面指南

    本文来自Rancher Labs 持续集成和持续交付(CI/CD)是DevOps背后的助推力之一.如果你的企业正在考虑使用DevOps,那么CI/CD绝对是需要考虑的其中一部分.但是CI/CD到底意味 ...

  5. java基础 3 Object通用方法(1)

    Object通用方法(1) clone: 浅复制    被复制对象的所有变量都含有与原对象相同的值,而所有对其他对象的引用仍然指向原来的对象,换言之,浅复制仅仅复                   ...

  6. Java 基础 - Collection集合通用方法及操作/ArrayList和LinkedList的差别优势 /弃用的Vector

    Collection的笔记: /**存储对象考虑使用: * 1.数组, ①一旦创建,其长度不可变!② 长度难于应对实际情况 * 2.Java集合, ①Collection集合: 1.set: 元素无序 ...

  7. 使用java泛型设计通用方法

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 因此我们可以利用泛型和反射来设计一些通用方法. 现在有2张表, 一张user表和一张stu ...

  8. DataTable数据赋值给Model通用方法

    注:该文属本人原创,今后项目中发现该方法存在BUG会实时更新,转载记得附上原文出处,方便大家获得最新代码. 相信大家在做项目中,经常会根据不同的表new各种不同的Model,当需要对Model进行实例 ...

  9. excel导出导入通用方法

    /** * 方法说明:批量导出通用方法 * 创建时间:2018年8月24日 *** * @param filePath 文件地址 * @param sheetName 分页名称 * @param ti ...

随机推荐

  1. 那点你不知道的XHtml(Xml+Html)语法知识(DTD、XSD)

    什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ.Data 框架里有一套XHtmlAction模板引擎, 应用在QBlo ...

  2. angularjs 指令详解 - template, restrict, replace

    通过指令机制,angularjs 提供了一个强大的扩展系统,我们可以通过自定义指令来扩展自己的指令系统. 怎样定义自己的指令呢? 我们通过 Bootstrap UI来学习吧.这个项目使用 angula ...

  3. C#设计模式之工厂

    IronMan之工厂 前言 实用为主,学一些用得到的技术更能在如今的社会里保命. 虽然在日常的工作中设计模式不是经常的用到,但是呢,学习它只有好处没有坏处. 设计模式像是一种“标签”,它是代码编写者思 ...

  4. 我所记录的git命令(非常实用)

    一.前言 记录一下工作中常用到的git命令,只是简单的笔记,欢迎大家交流... [ 顺便问下园友们,怎么感觉博客园发布的博客搜索有时都搜不到,后台编辑能填的都填写了,还是觉得搜索排名不高? 相同的标题 ...

  5. Nginx重写

    一.location匹配 1.分类:(1)正则location:~,~*(2)普通location:=,^~,@,无2.匹配规则:(1) =    精确匹配.如果找到,停止搜索(2) ^~    普通 ...

  6. show master/slave status求根溯源

    show master/slave status分别是查看主数据库以及副数据库的状态,是一种能查看主从复制运行情况的方式. 这里仅仅讨论linux下的nysql5.7.13版本的执行情况 一.show ...

  7. 单页面实现之hash

    至学了angularJs后,发现这个单页面应用不知道在没有angularJs的情况下怎么实现. 所以就此对这个思考与资料并行,终于知道这个的实现基本原理. 首先angularJs的实现是hash值的变 ...

  8. OleDB Destination 用法

    第一部分:简介 OleDB Destination component 是将数据流load 到destination,共有5种Data Access Mode,一般的Destination compo ...

  9. Windows无法安装到这个磁盘。请确保在计算机的BIOS菜单中启用了磁盘控制器

    今天一朋友问我这个问题,呃,以前我也遇到过,但忘记记录了,这次就记录一下吧,就懒得打字了,图片里面很清楚了 不说点什么的话是不是太水了O(∩_∩)O~,好吧扩充一下: Windows无法安装到这个磁盘 ...

  10. VB.NET 创建文件以及文件的读写(创建随机数)

    创建文件 Dim strFile As String = String.Format("C:\ErrorLog.txt", DateTime.Today.ToString(&quo ...