本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 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. ABP理论学习之事件总线和领域事件

    返回总目录 本篇目录 事件总线 定义事件 触发事件 处理事件 句柄注册 取消注册 在C#中,我们可以在一个类中定义自己的事件,而其他的类可以注册该事件,当某些事情发生时,可以通知到该类.这对于桌面应用 ...

  2. Hadoop学习笔记—1.基本介绍与环境配置

    一.Hadoop的发展历史 说到Hadoop的起源,不得不说到一个传奇的IT公司—全球IT技术的引领者Google.Google(自称)为云计算概念的提出者,在自身多年的搜索引擎业务中构建了突破性的G ...

  3. 探索c#之不可变数据类型

    阅读目录: 不可变对象 自定义不可变集合 Net提供的不可变集合 不可变优点 不可变对象缺点 不可变对象 不可变(immutable): 即对象一旦被创建初始化后,它们的值就不能被改变,之后的每次改变 ...

  4. c#语言-高阶函数

    介绍 如果说函数是程序中的基本模块,代码段,那高阶函数就是函数的高阶(级)版本,其基本定义如下: 函数自身接受一个或多个函数作为输入. 函数自身能输出一个函数,即函数生产函数. 满足其中一个条件就可以 ...

  5. dofile执行ANDROID APK里面的文件

    我使用dofile执行APK文件是不行的,比如 dofile("assets/res/flist")只能先拷贝到writablePath然后再dofile拿到数据后再清除这个临时文 ...

  6. js封装用户选项传递给Servlet之考试系统二

    <%@ page language="java" import="java.util.*" contentType="text/html; ch ...

  7. js self = this的解释

    Demo 1: function Person(){ this.name = 'hjzgg'; this.age = 24; this.show = function(){ alert(name + ...

  8. Android音频开发之MediaRecorder/MediaPlayer

    前言: 上次我们介绍了实时采集音频数据以及播放,今天我们来认识一下直接录制文件的方式. 直接上代码:录制管理类 public class MediaRecorderManager { public s ...

  9. 好玩的SQL

    1. 做一个3*3的加法表 SQL), (); A||'+'||B||'='||(A+B) ------------------------------------------------------ ...

  10. 利用private font改变PDF文件的字体

    利用private font改变PDF文件的字体 前几天做项目,需要使用未安装的字体来改变PDF的文件.以前并没有实现过类似的功能,幸运的是我在网上找到了类似的教程,并成功实现了这个功能. 下面就跟大 ...