【PaPaPa】集成B/S主流技术的MVC5项目 - 实干派:说做就做,我们已经起航,你还在观望吗
我们是谁 |
我们是C#爱好者,互相分享技术,一起学习一起成长一起做一个项目。
我们是开源爱好者,从我们手上出来的代码都会托管在源代码管理平台(oschina),到目前为止不收费,将来也不会出现任何收费情况。
我们是“大牛”,工作中、学习中遇到各种问题都在群里讨论的有声有色,或许某某只是初级程序员,但或许你不会的他就正好知道,而此时他就是你的“大牛”。
我们在干什么 |
一个叫【PaPaPa】的项目,类似伴游的b/s架构项目。
项目中用到的ASP.Net MVC5、Bootstrap 3、Metronic、Redis、EF、SignalR等。
系统架构简介 |
这是个PPT,这里几乎是所有内容了,毕竟我们目前只做了这些,将来做完以后当然就绝对不止这些了。
如果你想看完整版的PPT,可以戳我:http://files.cnblogs.com/files/doddgu/PaPaPa.pptx
这里是在网上找到PPT模版随便改了下,层级关系不要太纠结喔
大概的类库划分是这个样子的
我们尝试自己创造了一些东西
补一张解决方案的截图
我们已经完成了哪些 |
系统架构雏形已经搭建完成,上面PPT里提到的东西都完成了(当然目前有部分还只是雏形阶段,这需要一个不断完善的过程)。
而项目目前属于刚起步阶段,只完成了注册、登录、用户中心(修改用户资料)。
基础设施层已经完全与业务脱离,目的是打造一套可复用的底层类库,它的特点应该是:稳定、可扩展、易用。
核心层针对业务做了一些妥协的封装,这里在不同的业务中可能不是那么的适用,但也不是完全没借鉴性的。比如缓存决策,这在大多数项目中都是个很好用的功能。
不能太水了,本篇蜻蜓点水的说下缓存决策 |
其实技术不能太较真,听上去很高大上的词语实际背后是特别简单的方法调用集合。
毕竟本篇只是个序言,我不会写的太多,如果有兴趣可继续关注我的下一篇,这里讲一小段比较核心点的代码吧。
public override async Task<int> SaveAsync()
{
var result = await base.SaveAsync(); SetRedis(); return result;
} private void SetRedis()
{
try
{
var type = typeof(T);
var monitor = EqualsMonitorManager<string, RedisCacheMonitor>.Get(MonitorConstant.REDIS_KEY, x => x.TableName == type.Name);
if (monitor != null)
{
foreach (var entity in base.DbSet.Local)
{
foreach (var field in monitor.Fields)
{
var pi = type.GetProperty(field);
RedisSingleton.GetInstance.Client.HSet(type.Name, string.Format("{0}:{1}", pi.Name, pi.GetValue(entity, null).ToString()), entity);
}
}
}
}
catch (Exception ex)
{
Logger.Error(ex.ToString());
}
}
这段代码其实是缓存决策的上半部中的一段,调用缓存前需要填充缓存数据,而这里就是将插入、修改、删除(其实没删除,因为我设计的时候就只允许改成失效状态,不允许删除数据)3个会引发数据库修改的动作发生后同步动作到redis中。
有个很高大上的名词,你可以叫他“镜像”,也可以叫”XXX“,反正这只是某些大牛为了统一叫法起了个名字罢了。
SaveChangesAsync是EF的异步保存方法,我们要做的事情其实很简单,就是拦截保存方法,代码中是SaveAsync,这个是我们自己针对EF封装后的方法。
大概思路是这样的:
想要让 SaveAsync 听我们的话, override 就派上了用场,重写 SaveAsync。
调用基类的 SaveAsync 后,再加上保存到Redis的代码。
这样一个SaveAsync就变成了做2件事,先保存到数据库再保存到Redis,从而杜绝了代码中到处写保存到Redis的重复代码。
细心的朋友会发现,我们并不会把所有的数据保存到Redis中,所以必须要有个规则告诉我们哪些数据才需要保存到redis中。
而代码中 EqualMonitorManager 就是做这个保存规则的事情,因为这里需要搭配很多东西来说,所以如果你对这里感兴趣就敬请期待后面的博客吧。
当然如果你是个急性子也可以直接下载我们的代码,跟踪调试下瞬间了然。
感谢 |
最后感谢能有那么多人在这个项目启动过程中做出的贡献。
老虎:一个很牛x的PM级人物,需求文档写的很搞笑又很实际。其实叫他“色虎”,我觉得更好些。
贝勒:从不嫌弃任何活,边学边做,很好的小伙子。也可以叫他“十万个为什么”。
四哥:没事儿就蹦出来挑挑刺,提提意见,在这过程中我们确实也是收获良多。
零点:总是有各种各样的问题,活跃群里的气氛。
此处省略号该出现了,“……”
此时我不得不说我学坏了 |
是的,我发现我之前的开源项目是很多人去看过,下载过,甚至加群,但是很少有人点推荐、评论。
而偶然有一天发现某个博客采用了一个方法效果很好我就效仿一下。
想获得代码地址你得点下推荐,然后评论留下你的QQ邮箱,或者看右上角我的简介,加入我们的群也是一种捷径。
加了群的就不用留QQ邮箱哦,群里公告有git地址的。
最后祝大家工作愉快,事事顺心 ^_^
由于寻同道中人的目的已经达到,故此不再强制要求留邮箱或加群,直接公开地址:http://git.oschina.net/doddgu/PaPaPa
谢谢大家的支持,谢谢
【PaPaPa】集成B/S主流技术的MVC5项目 - 实干派:说做就做,我们已经起航,你还在观望吗的更多相关文章
- 框架基础:关于ajax设计方案(三)---集成ajax上传技术
之前发布了ajax的通用解决方案,核心的ajax发布请求,以及集成了轮询.这次去外国网站逛逛,然后发现了ajax level2的上传文件,所以就有了把ajax的上传文件集成进去的想法,ajax方案的l ...
- C#开发BIMFACE系列52 CS客户端集成BIMFACE应用的技术方案
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在我的博客<C#开发BIMFACE系列49 Web网页集成BIMFACE应用的技术方案>.<C#开发BI ...
- C#工业物联网和集成系统解决方案的技术路线(数据源、数据采集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App)
目 录 工业物联网和集成系统解决方案的技术路线... 1 前言... 1 第一章 系统架构... 3 1.1 硬件构架图... 3 1.2 ...
- 【收藏用】--切勿转载Java处理XML的三种主流技术及介绍
原帖地址 : http://www.ibm.com/developerworks/cn/xml/dm-1208gub/ XML (eXtensible Markup Language) 意为可扩展标记 ...
- ASP.NET Identity 2集成到MVC5项目--笔记01
Identiry2是微软推出的Identity的升级版本,较之上一个版本更加易于扩展,总之更好用.如果需要具体细节.网上具体参考Identity2源代码下载 参考文章 在项目中,是不太想直接把这一堆堆 ...
- ASP.NET Identity 2集成到MVC5项目--笔记02
ASP.NET Identity 2集成到MVC5项目--笔记01 ASP.NET Identity 2集成到MVC5项目--笔记02 继上一篇,本篇主要是实现邮件.用户名登陆和登陆前邮件认证. 1. ...
- Java 处理 XML 的三种主流技术及介绍
Java 处理 XML 的三种主流技术及介绍 原文地址:https://www.ibm.com/developerworks/cn/xml/dm-1208gub/ XML (eXtensible Ma ...
- NB-IoT将成为未来5G物联网主流技术
日前,我国完成了IMT-2020(5G)候选技术方案的完整提交.据悉,在提交的方案中,NB-IoT技术被正式纳入5G候选技术集合,预计2020年6月ITU将正式宣布5G技术方案的诞生.而NB-IoT也 ...
- 在线直播: .NET与物联网主流技术探秘 初识IoT!
DNT精英论坛暨.NET北京俱乐部是由资深.NET专家和社区活跃分子发起的技术论坛,以“分享.成长.合作.共赢”为原则,致力于打造一个领先的技术分享平台和成长交流生态.本次活动由aelf赞助支持,刘洪 ...
随机推荐
- eclipse中 项目-->属性-->为什么没有deployment assembly 选项
原因: 因为当前的maven工程不是web工程,需要转换成web工程. 解决方法: 右击工程属性,找到Project Facets,选择Dynamic Web Module,2.5 点击apply.这 ...
- Hadoop HBase概念学习系列之HBase里的高表设计概念(表设计)(二十八)
在下面这篇博文里,我给各位博客们,分享了创建HBase表,但这远不止打好基础. HBase编程 API入门系列之create(管理端而言)(8) 在关系型数据库里,表的高表和宽表是不存在的.在如HBa ...
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
- MySQL 导出远程服务器数据库 为 sql文件
MySQL 导出远程服务器sql文件 mysqldump -h192.168.1.111 –P3306 -uroot -ppassword --default-character-set=utf8 t ...
- Python学习之路 (二)爬虫(一)
Python基础 基础教程参考廖雪峰的官方网站https://www.liaoxuefeng.com/ 一."大数据时代",数据获取的方式 1. 企业生产的用户数据:大型互联网公司 ...
- js之radio应用实例
radio和checkbox还有select,可谓是前后端常用三剑客啊!特别是checkbox和select,关于这两个今天不讲,因为在下面这几篇文章,我已经比较详细的讲解了. SpringMVC之a ...
- sqoop数据导入命令 (sql---hdfs)
mysql------->hdfs sqoop导入数据工作流程: sqoop提交任务到hadoop------>hadoop启动mapreduce------->mapreduce通 ...
- 知乎live考研数学冲刺135+资料分享
前言 各位学弟学妹,您好,live中本来是给出了我的邮箱,通过邮箱来获取资料,但是没有想到,后来我每天打开邮箱,都是需要回复的邮件,少则一两封,多则四五封,每天如此,也是一个比较繁琐费时的方式.我决定 ...
- Spring AOP源码分析(二)动态A0P自定义标签
摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 之前讲过Spring中的自定义注解,如果声明了自定义的注解,那么就一定 ...
- Centos7 yum安装Mysql5.7
1.下载mysql安装源 curl -LO http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2.安装yum源 ...